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 |