| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analyzer.test.src.summary.resynthesize_kernel_test; | 5 library analyzer.test.src.summary.resynthesize_kernel_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 import '../context/mock_sdk.dart'; | 34 import '../context/mock_sdk.dart'; |
| 35 import 'resynthesize_common.dart'; | 35 import 'resynthesize_common.dart'; |
| 36 | 36 |
| 37 main() { | 37 main() { |
| 38 defineReflectiveSuite(() { | 38 defineReflectiveSuite(() { |
| 39 defineReflectiveTests(ResynthesizeKernelStrongTest); | 39 defineReflectiveTests(ResynthesizeKernelStrongTest); |
| 40 }); | 40 }); |
| 41 } | 41 } |
| 42 | 42 |
| 43 /// Tests marked with this annotation fail because of a Fasta problem. |
| 44 const _fastaProblem = const Object(); |
| 45 |
| 43 @reflectiveTest | 46 @reflectiveTest |
| 44 class ResynthesizeKernelStrongTest extends ResynthesizeTest { | 47 class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
| 45 final resourceProvider = new MemoryResourceProvider(context: pathos.posix); | 48 final resourceProvider = new MemoryResourceProvider(context: pathos.posix); |
| 46 | 49 |
| 47 @override | 50 @override |
| 48 bool get isSharedFrontEnd => true; | 51 bool get isSharedFrontEnd => true; |
| 49 | 52 |
| 50 @override | 53 @override |
| 51 bool get isStrongMode => true; | 54 bool get isStrongMode => true; |
| 52 | 55 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 // TODO(scheglov): implement encodeDecodeLibrarySource | 110 // TODO(scheglov): implement encodeDecodeLibrarySource |
| 108 throw new UnimplementedError(); | 111 throw new UnimplementedError(); |
| 109 } | 112 } |
| 110 | 113 |
| 111 @failingTest | 114 @failingTest |
| 112 test_class_alias_documented() async { | 115 test_class_alias_documented() async { |
| 113 await super.test_class_alias_documented(); | 116 await super.test_class_alias_documented(); |
| 114 } | 117 } |
| 115 | 118 |
| 116 @failingTest | 119 @failingTest |
| 117 test_class_alias_with_forwarding_constructors_type_substitution() async { | 120 @_fastaProblem |
| 118 await super | |
| 119 .test_class_alias_with_forwarding_constructors_type_substitution(); | |
| 120 } | |
| 121 | |
| 122 @failingTest | |
| 123 test_class_alias_with_forwarding_constructors_type_substitution_complex() asyn
c { | |
| 124 await super | |
| 125 .test_class_alias_with_forwarding_constructors_type_substitution_complex
(); | |
| 126 } | |
| 127 | |
| 128 @failingTest | |
| 129 test_class_constructor_field_formal_multiple_matching_fields() async { | 121 test_class_constructor_field_formal_multiple_matching_fields() async { |
| 130 // Fasta does not generate the class. | 122 // Fasta does not generate the class. |
| 131 // main() with a fatal error is generated instead. | 123 // main() with a fatal error is generated instead. |
| 132 await super.test_class_constructor_field_formal_multiple_matching_fields(); | 124 await super.test_class_constructor_field_formal_multiple_matching_fields(); |
| 133 } | 125 } |
| 134 | 126 |
| 135 @failingTest | 127 @failingTest |
| 136 test_class_documented_tripleSlash() async { | 128 test_class_documented_tripleSlash() async { |
| 137 await super.test_class_documented_tripleSlash(); | 129 await super.test_class_documented_tripleSlash(); |
| 138 } | 130 } |
| 139 | 131 |
| 140 @failingTest | 132 @failingTest |
| 141 test_class_documented_withLeadingNotDocumentation() async { | 133 test_class_documented_withLeadingNotDocumentation() async { |
| 142 await super.test_class_documented_withLeadingNotDocumentation(); | 134 await super.test_class_documented_withLeadingNotDocumentation(); |
| 143 } | 135 } |
| 144 | 136 |
| 145 @failingTest | 137 @failingTest |
| 138 @_fastaProblem |
| 146 test_class_interfaces_unresolved() async { | 139 test_class_interfaces_unresolved() async { |
| 140 // Fasta generates additional `#errors` top-level variable. |
| 147 await super.test_class_interfaces_unresolved(); | 141 await super.test_class_interfaces_unresolved(); |
| 148 } | 142 } |
| 149 | 143 |
| 150 @failingTest | 144 @failingTest |
| 145 @_fastaProblem |
| 151 test_class_mixins_unresolved() async { | 146 test_class_mixins_unresolved() async { |
| 147 // Fasta generates additional `#errors` top-level variable. |
| 152 await super.test_class_mixins_unresolved(); | 148 await super.test_class_mixins_unresolved(); |
| 153 } | 149 } |
| 154 | 150 |
| 155 @failingTest | 151 @failingTest |
| 152 @_fastaProblem |
| 156 test_class_supertype_unresolved() async { | 153 test_class_supertype_unresolved() async { |
| 154 // Fasta generates additional `#errors` top-level variable. |
| 157 await super.test_class_supertype_unresolved(); | 155 await super.test_class_supertype_unresolved(); |
| 158 } | 156 } |
| 159 | 157 |
| 160 @failingTest | 158 @failingTest |
| 159 @_fastaProblem |
| 161 test_class_type_parameters_bound() async { | 160 test_class_type_parameters_bound() async { |
| 161 // Fasta does not provide a flag for explicit vs. implicit Object bound. |
| 162 await super.test_class_type_parameters_bound(); | 162 await super.test_class_type_parameters_bound(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 @failingTest | 165 @failingTest |
| 166 test_class_type_parameters_f_bound_complex() async { | |
| 167 await super.test_class_type_parameters_f_bound_complex(); | |
| 168 } | |
| 169 | |
| 170 @failingTest | |
| 171 test_closure_generic() async { | 166 test_closure_generic() async { |
| 172 await super.test_closure_generic(); | 167 await super.test_closure_generic(); |
| 173 } | 168 } |
| 174 | 169 |
| 175 @failingTest | 170 @failingTest |
| 176 test_closure_in_variable_declaration_in_part() async { | 171 test_closure_in_variable_declaration_in_part() async { |
| 177 await super.test_closure_in_variable_declaration_in_part(); | 172 await super.test_closure_in_variable_declaration_in_part(); |
| 178 } | 173 } |
| 179 | 174 |
| 180 @failingTest | 175 @failingTest |
| (...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 await super | 950 await super |
| 956 .test_inferred_function_type_in_generic_class_in_generic_method(); | 951 .test_inferred_function_type_in_generic_class_in_generic_method(); |
| 957 } | 952 } |
| 958 | 953 |
| 959 @failingTest | 954 @failingTest |
| 960 test_inferred_type_is_typedef() async { | 955 test_inferred_type_is_typedef() async { |
| 961 await super.test_inferred_type_is_typedef(); | 956 await super.test_inferred_type_is_typedef(); |
| 962 } | 957 } |
| 963 | 958 |
| 964 @failingTest | 959 @failingTest |
| 965 test_inferred_type_refers_to_bound_type_param() async { | |
| 966 await super.test_inferred_type_refers_to_bound_type_param(); | |
| 967 } | |
| 968 | |
| 969 @failingTest | |
| 970 test_inferred_type_refers_to_function_typed_param_of_typedef() async { | 960 test_inferred_type_refers_to_function_typed_param_of_typedef() async { |
| 971 await super.test_inferred_type_refers_to_function_typed_param_of_typedef(); | 961 await super.test_inferred_type_refers_to_function_typed_param_of_typedef(); |
| 972 } | 962 } |
| 973 | 963 |
| 974 @failingTest | 964 @failingTest |
| 975 test_inferred_type_refers_to_function_typed_parameter_type_generic_class() asy
nc { | 965 test_inferred_type_refers_to_function_typed_parameter_type_generic_class() asy
nc { |
| 976 await super | 966 await super |
| 977 .test_inferred_type_refers_to_function_typed_parameter_type_generic_clas
s(); | 967 .test_inferred_type_refers_to_function_typed_parameter_type_generic_clas
s(); |
| 978 } | 968 } |
| 979 | 969 |
| (...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2111 | 2101 |
| 2112 @override | 2102 @override |
| 2113 Expression getExpression(kernel.Expression expression) { | 2103 Expression getExpression(kernel.Expression expression) { |
| 2114 return new _ExprBuilder(this).build(expression); | 2104 return new _ExprBuilder(this).build(expression); |
| 2115 } | 2105 } |
| 2116 | 2106 |
| 2117 @override | 2107 @override |
| 2118 InterfaceType getInterfaceType( | 2108 InterfaceType getInterfaceType( |
| 2119 ElementImpl context, kernel.Supertype kernelType) { | 2109 ElementImpl context, kernel.Supertype kernelType) { |
| 2120 return _getInterfaceType( | 2110 return _getInterfaceType( |
| 2121 kernelType.className.canonicalName, kernelType.typeArguments); | 2111 context, kernelType.className.canonicalName, kernelType.typeArguments); |
| 2122 } | 2112 } |
| 2123 | 2113 |
| 2124 @override | 2114 @override |
| 2125 LibraryElement getLibrary(String uriStr) { | 2115 LibraryElement getLibrary(String uriStr) { |
| 2126 return _resynthesizer.getLibrary(uriStr); | 2116 return _resynthesizer.getLibrary(uriStr); |
| 2127 } | 2117 } |
| 2128 | 2118 |
| 2129 DartType getType(ElementImpl context, kernel.DartType kernelType) { | 2119 DartType getType(ElementImpl context, kernel.DartType kernelType) { |
| 2130 if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance; | 2120 if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance; |
| 2131 if (kernelType is kernel.VoidType) return VoidTypeImpl.instance; | 2121 if (kernelType is kernel.VoidType) return VoidTypeImpl.instance; |
| 2132 if (kernelType is kernel.InterfaceType) { | 2122 if (kernelType is kernel.InterfaceType) { |
| 2133 return _getInterfaceType( | 2123 return _getInterfaceType(context, kernelType.className.canonicalName, |
| 2134 kernelType.className.canonicalName, kernelType.typeArguments); | 2124 kernelType.typeArguments); |
| 2135 } | 2125 } |
| 2136 if (kernelType is kernel.TypeParameterType) { | 2126 if (kernelType is kernel.TypeParameterType) { |
| 2137 kernel.TypeParameter kTypeParameter = kernelType.parameter; | 2127 kernel.TypeParameter kTypeParameter = kernelType.parameter; |
| 2138 return _getTypeParameter(context, kTypeParameter).type; | 2128 return _getTypeParameter(context, kTypeParameter).type; |
| 2139 } | 2129 } |
| 2140 // TODO(scheglov) Support other kernel types. | 2130 // TODO(scheglov) Support other kernel types. |
| 2141 throw new UnimplementedError('For ${kernelType.runtimeType}'); | 2131 throw new UnimplementedError('For ${kernelType.runtimeType}'); |
| 2142 } | 2132 } |
| 2143 | 2133 |
| 2144 /** | 2134 /** |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2207 return parentElement.getNamedConstructor(name.name) as ElementImpl; | 2197 return parentElement.getNamedConstructor(name.name) as ElementImpl; |
| 2208 } else if (isMethod) { | 2198 } else if (isMethod) { |
| 2209 return parentElement.getMethod(name.name) as ElementImpl; | 2199 return parentElement.getMethod(name.name) as ElementImpl; |
| 2210 } | 2200 } |
| 2211 return null; | 2201 return null; |
| 2212 } | 2202 } |
| 2213 | 2203 |
| 2214 throw new UnimplementedError('Should not be reached.'); | 2204 throw new UnimplementedError('Should not be reached.'); |
| 2215 } | 2205 } |
| 2216 | 2206 |
| 2217 InterfaceType _getInterfaceType( | 2207 InterfaceType _getInterfaceType(ElementImpl context, |
| 2218 kernel.CanonicalName className, List<kernel.DartType> kernelArguments) { | 2208 kernel.CanonicalName className, List<kernel.DartType> kernelArguments) { |
| 2219 var libraryName = className.parent; | 2209 var libraryName = className.parent; |
| 2220 var libraryElement = _resynthesizer.getLibrary(libraryName.name); | 2210 var libraryElement = _resynthesizer.getLibrary(libraryName.name); |
| 2221 ClassElementImpl classElement = libraryElement.getType(className.name); | 2211 ClassElementImpl classElement = libraryElement.getType(className.name); |
| 2222 | 2212 |
| 2223 if (kernelArguments.isEmpty) { | 2213 if (kernelArguments.isEmpty) { |
| 2224 return classElement.type; | 2214 return classElement.type; |
| 2225 } | 2215 } |
| 2226 | 2216 |
| 2227 return new InterfaceTypeImpl.elementWithNameAndArgs( | 2217 return new InterfaceTypeImpl.elementWithNameAndArgs( |
| 2228 classElement, classElement.name, () { | 2218 classElement, classElement.name, () { |
| 2229 List<DartType> arguments = kernelArguments | 2219 List<DartType> arguments = kernelArguments |
| 2230 .map((kernel.DartType k) => getType(classElement, k)) | 2220 .map((kernel.DartType k) => getType(context, k)) |
| 2231 .toList(growable: false); | 2221 .toList(growable: false); |
| 2232 return arguments; | 2222 return arguments; |
| 2233 }); | 2223 }); |
| 2234 } | 2224 } |
| 2235 | 2225 |
| 2236 /// Return the [TypeParameterElement] for the given [kernelTypeParameter]. | 2226 /// Return the [TypeParameterElement] for the given [kernelTypeParameter]. |
| 2237 TypeParameterElement _getTypeParameter( | 2227 TypeParameterElement _getTypeParameter( |
| 2238 ElementImpl context, kernel.TypeParameter kernelTypeParameter) { | 2228 ElementImpl context, kernel.TypeParameter kernelTypeParameter) { |
| 2239 String name = kernelTypeParameter.name; | 2229 String name = kernelTypeParameter.name; |
| 2240 for (var ctx = context; ctx != null; ctx = ctx.enclosingElement) { | 2230 for (var ctx = context; ctx != null; ctx = ctx.enclosingElement) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2282 } | 2272 } |
| 2283 | 2273 |
| 2284 /** | 2274 /** |
| 2285 * Get the [Source] object for the given [uri]. | 2275 * Get the [Source] object for the given [uri]. |
| 2286 */ | 2276 */ |
| 2287 Source _getSource(String uri) { | 2277 Source _getSource(String uri) { |
| 2288 return _sources.putIfAbsent( | 2278 return _sources.putIfAbsent( |
| 2289 uri, () => _analysisContext.sourceFactory.forUri(uri)); | 2279 uri, () => _analysisContext.sourceFactory.forUri(uri)); |
| 2290 } | 2280 } |
| 2291 } | 2281 } |
| OLD | NEW |