Chromium Code Reviews| 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 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 403 test_constructor_initializers_assertInvocation() async { | 403 test_constructor_initializers_assertInvocation() async { |
| 404 await super.test_constructor_initializers_assertInvocation(); | 404 await super.test_constructor_initializers_assertInvocation(); |
| 405 } | 405 } |
| 406 | 406 |
| 407 @failingTest | 407 @failingTest |
| 408 test_constructor_initializers_assertInvocation_message() async { | 408 test_constructor_initializers_assertInvocation_message() async { |
| 409 await super.test_constructor_initializers_assertInvocation_message(); | 409 await super.test_constructor_initializers_assertInvocation_message(); |
| 410 } | 410 } |
| 411 | 411 |
| 412 @failingTest | 412 @failingTest |
| 413 test_constructor_initializers_field() async { | 413 @_fastaProblem |
| 414 await super.test_constructor_initializers_field(); | |
| 415 } | |
| 416 | |
| 417 @failingTest | |
| 418 test_constructor_initializers_field_notConst() async { | 414 test_constructor_initializers_field_notConst() async { |
| 415 // Fasta generates additional `#errors` top-level variable. | |
| 419 await super.test_constructor_initializers_field_notConst(); | 416 await super.test_constructor_initializers_field_notConst(); |
| 420 } | 417 } |
| 421 | 418 |
| 422 @failingTest | 419 @failingTest |
| 420 @_fastaProblem | |
| 423 test_constructor_initializers_field_withParameter() async { | 421 test_constructor_initializers_field_withParameter() async { |
| 422 // https://github.com/dart-lang/sdk/issues/30251 | |
| 424 await super.test_constructor_initializers_field_withParameter(); | 423 await super.test_constructor_initializers_field_withParameter(); |
| 425 } | 424 } |
| 426 | 425 |
| 427 @failingTest | 426 @failingTest |
| 428 test_constructor_initializers_superInvocation_named() async { | |
| 429 await super.test_constructor_initializers_superInvocation_named(); | |
| 430 } | |
| 431 | |
| 432 @failingTest | |
| 433 test_constructor_initializers_superInvocation_namedExpression() async { | |
| 434 await super.test_constructor_initializers_superInvocation_namedExpression(); | |
| 435 } | |
| 436 | |
| 437 @failingTest | |
| 438 test_constructor_initializers_superInvocation_unnamed() async { | |
| 439 await super.test_constructor_initializers_superInvocation_unnamed(); | |
| 440 } | |
| 441 | |
| 442 @failingTest | |
| 443 test_constructor_initializers_thisInvocation_named() async { | |
| 444 await super.test_constructor_initializers_thisInvocation_named(); | |
| 445 } | |
| 446 | |
| 447 @failingTest | |
| 448 test_constructor_initializers_thisInvocation_namedExpression() async { | |
| 449 await super.test_constructor_initializers_thisInvocation_namedExpression(); | |
| 450 } | |
| 451 | |
| 452 @failingTest | |
| 453 test_constructor_initializers_thisInvocation_unnamed() async { | |
| 454 await super.test_constructor_initializers_thisInvocation_unnamed(); | |
| 455 } | |
| 456 | |
| 457 @failingTest | |
| 458 test_constructor_redirected_factory_named() async { | 427 test_constructor_redirected_factory_named() async { |
| 459 await super.test_constructor_redirected_factory_named(); | 428 await super.test_constructor_redirected_factory_named(); |
| 460 } | 429 } |
| 461 | 430 |
| 462 @failingTest | 431 @failingTest |
| 463 test_constructor_redirected_factory_named_generic() async { | 432 test_constructor_redirected_factory_named_generic() async { |
| 464 await super.test_constructor_redirected_factory_named_generic(); | 433 await super.test_constructor_redirected_factory_named_generic(); |
| 465 } | 434 } |
| 466 | 435 |
| 467 @failingTest | 436 @failingTest |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 544 test_constructor_redirected_thisInvocation_unnamed() async { | 513 test_constructor_redirected_thisInvocation_unnamed() async { |
| 545 await super.test_constructor_redirected_thisInvocation_unnamed(); | 514 await super.test_constructor_redirected_thisInvocation_unnamed(); |
| 546 } | 515 } |
| 547 | 516 |
| 548 @failingTest | 517 @failingTest |
| 549 test_constructor_redirected_thisInvocation_unnamed_generic() async { | 518 test_constructor_redirected_thisInvocation_unnamed_generic() async { |
| 550 await super.test_constructor_redirected_thisInvocation_unnamed_generic(); | 519 await super.test_constructor_redirected_thisInvocation_unnamed_generic(); |
| 551 } | 520 } |
| 552 | 521 |
| 553 @failingTest | 522 @failingTest |
| 554 test_constructor_withCycles_const() async { | |
| 555 await super.test_constructor_withCycles_const(); | |
| 556 } | |
| 557 | |
| 558 @failingTest | |
| 559 test_defaultValue_refersToGenericClass_constructor() async { | 523 test_defaultValue_refersToGenericClass_constructor() async { |
| 560 await super.test_defaultValue_refersToGenericClass_constructor(); | 524 await super.test_defaultValue_refersToGenericClass_constructor(); |
| 561 } | 525 } |
| 562 | 526 |
| 563 @failingTest | 527 @failingTest |
| 564 test_defaultValue_refersToGenericClass_constructor2() async { | 528 test_defaultValue_refersToGenericClass_constructor2() async { |
| 565 await super.test_defaultValue_refersToGenericClass_constructor2(); | 529 await super.test_defaultValue_refersToGenericClass_constructor2(); |
| 566 } | 530 } |
| 567 | 531 |
| 568 @failingTest | 532 @failingTest |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 939 test_import_show() async { | 903 test_import_show() async { |
| 940 await super.test_import_show(); | 904 await super.test_import_show(); |
| 941 } | 905 } |
| 942 | 906 |
| 943 @failingTest | 907 @failingTest |
| 944 test_inferred_function_type_for_variable_in_generic_function() async { | 908 test_inferred_function_type_for_variable_in_generic_function() async { |
| 945 await super.test_inferred_function_type_for_variable_in_generic_function(); | 909 await super.test_inferred_function_type_for_variable_in_generic_function(); |
| 946 } | 910 } |
| 947 | 911 |
| 948 @failingTest | 912 @failingTest |
| 913 test_inferred_function_type_in_generic_class_constructor() async { | |
| 914 await super.test_inferred_function_type_in_generic_class_constructor(); | |
| 915 } | |
| 916 | |
| 917 @failingTest | |
| 949 test_inferred_function_type_in_generic_class_in_generic_method() async { | 918 test_inferred_function_type_in_generic_class_in_generic_method() async { |
| 950 await super | 919 await super |
| 951 .test_inferred_function_type_in_generic_class_in_generic_method(); | 920 .test_inferred_function_type_in_generic_class_in_generic_method(); |
| 952 } | 921 } |
| 953 | 922 |
| 954 @failingTest | 923 @failingTest |
| 955 test_inferred_type_is_typedef() async { | 924 test_inferred_type_is_typedef() async { |
| 956 await super.test_inferred_type_is_typedef(); | 925 await super.test_inferred_type_is_typedef(); |
| 957 } | 926 } |
| 958 | 927 |
| (...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1907 } | 1876 } |
| 1908 } else if (args.length == 1) { | 1877 } else if (args.length == 1) { |
| 1909 var operator = _toBinaryOperatorTokenType(operatorName); | 1878 var operator = _toBinaryOperatorTokenType(operatorName); |
| 1910 var right = build(args.single); | 1879 var right = build(args.single); |
| 1911 return AstTestFactory.binaryExpression(left, operator, right); | 1880 return AstTestFactory.binaryExpression(left, operator, right); |
| 1912 } | 1881 } |
| 1913 } | 1882 } |
| 1914 } | 1883 } |
| 1915 } | 1884 } |
| 1916 | 1885 |
| 1886 if (expr is kernel.StaticInvocation) { | |
| 1887 kernel.Procedure target = expr.target; | |
| 1888 String name = target.name.name; | |
| 1889 List<Expression> arguments = _toArguments(expr.arguments); | |
| 1890 MethodInvocation invocation = | |
| 1891 AstTestFactory.methodInvocation3(null, name, null, arguments); | |
| 1892 invocation.methodName.staticElement = _getElement(target.reference); | |
| 1893 return invocation; | |
| 1894 } | |
| 1895 | |
| 1917 if (expr is kernel.ConstructorInvocation) { | 1896 if (expr is kernel.ConstructorInvocation) { |
| 1918 var element = _getElement(expr.targetReference); | 1897 var element = _getElement(expr.targetReference); |
| 1919 | 1898 |
| 1920 var kernelType = expr.getStaticType(_context._resynthesizer._types); | 1899 var kernelType = expr.getStaticType(_context._resynthesizer._types); |
| 1921 var type = _context.getType(null, kernelType); | 1900 var type = _context.getType(null, kernelType); |
| 1922 TypeName typeName = _buildType(type); | 1901 TypeName typeName = _buildType(type); |
| 1923 | 1902 |
| 1924 var constructorName = AstTestFactory.constructorName( | 1903 var constructorName = AstTestFactory.constructorName( |
| 1925 typeName, element.name.isNotEmpty ? element.name : null); | 1904 typeName, element.name.isNotEmpty ? element.name : null); |
| 1926 constructorName?.name?.staticElement = element; | 1905 constructorName?.name?.staticElement = element; |
| 1927 | 1906 |
| 1928 var keyword = expr.isConst ? Keyword.CONST : Keyword.NEW; | 1907 var keyword = expr.isConst ? Keyword.CONST : Keyword.NEW; |
| 1929 var arguments = _toArguments(expr.arguments); | 1908 var arguments = _toArguments(expr.arguments); |
| 1930 return AstTestFactory.instanceCreationExpression( | 1909 return AstTestFactory.instanceCreationExpression( |
| 1931 keyword, constructorName, arguments); | 1910 keyword, constructorName, arguments); |
| 1932 } | 1911 } |
| 1933 | 1912 |
| 1934 // TODO(scheglov): complete getExpression | 1913 // TODO(scheglov): complete getExpression |
| 1935 throw new UnimplementedError('kernel: (${expr.runtimeType}) $expr'); | 1914 throw new UnimplementedError('kernel: (${expr.runtimeType}) $expr'); |
| 1936 } | 1915 } |
| 1937 | 1916 |
| 1917 ConstructorInitializer buildInitializer(kernel.Initializer k) { | |
| 1918 if (k is kernel.FieldInitializer) { | |
| 1919 Expression value = build(k.value); | |
| 1920 ConstructorFieldInitializer initializer = AstTestFactory | |
| 1921 .constructorFieldInitializer(false, k.field.name.name, value); | |
| 1922 initializer.fieldName.staticElement = _getElement(k.fieldReference); | |
| 1923 return initializer; | |
| 1924 } | |
| 1925 | |
| 1926 if (k is kernel.RedirectingInitializer) { | |
| 1927 ConstructorElementImpl redirect = _getElement(k.targetReference); | |
| 1928 var arguments = _toArguments(k.arguments); | |
| 1929 | |
| 1930 RedirectingConstructorInvocation invocation = | |
| 1931 AstTestFactory.redirectingConstructorInvocation(arguments); | |
| 1932 invocation.staticElement = redirect; | |
| 1933 | |
| 1934 String name = k.target.name.name; | |
| 1935 if (name.isNotEmpty) { | |
| 1936 invocation.constructorName = AstTestFactory.identifier3(name) | |
| 1937 ..staticElement = redirect; | |
| 1938 } | |
| 1939 | |
| 1940 return invocation; | |
| 1941 } | |
| 1942 | |
| 1943 if (k is kernel.SuperInitializer) { | |
| 1944 ConstructorElementImpl redirect = _getElement(k.targetReference); | |
| 1945 var arguments = _toArguments(k.arguments); | |
| 1946 | |
| 1947 SuperConstructorInvocation invocation = | |
| 1948 AstTestFactory.superConstructorInvocation(arguments); | |
| 1949 invocation.staticElement = redirect; | |
| 1950 | |
| 1951 String name = k.target.name.name; | |
| 1952 if (name.isNotEmpty) { | |
| 1953 invocation.constructorName = AstTestFactory.identifier3(name) | |
| 1954 ..staticElement = redirect; | |
| 1955 } | |
| 1956 | |
| 1957 return invocation; | |
| 1958 } | |
| 1959 | |
| 1960 // TODO(scheglov) Support other kernel initializer types. | |
| 1961 throw new UnimplementedError('For ${k.runtimeType}'); | |
| 1962 } | |
| 1963 | |
| 1938 Expression _buildIdentifier(kernel.Reference reference, {bool isGet: false}) { | 1964 Expression _buildIdentifier(kernel.Reference reference, {bool isGet: false}) { |
| 1939 Element element = _getElement(reference); | 1965 Element element = _getElement(reference); |
| 1940 if (isGet && element is PropertyInducingElement) { | 1966 if (isGet && element is PropertyInducingElement) { |
| 1941 element = (element as PropertyInducingElement).getter; | 1967 element = (element as PropertyInducingElement).getter; |
| 1942 } | 1968 } |
| 1943 SimpleIdentifier property = AstTestFactory.identifier3(element.displayName) | 1969 SimpleIdentifier property = AstTestFactory.identifier3(element.displayName) |
| 1944 ..staticElement = element; | 1970 ..staticElement = element; |
| 1945 Element enclosingElement = element.enclosingElement; | 1971 Element enclosingElement = element.enclosingElement; |
| 1946 if (enclosingElement is ClassElement) { | 1972 if (enclosingElement is ClassElement) { |
| 1947 SimpleIdentifier classRef = AstTestFactory | 1973 SimpleIdentifier classRef = AstTestFactory |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2083 Future<List<int>> readAsBytes() async { | 2109 Future<List<int>> readAsBytes() async { |
| 2084 return file.readAsBytesSync(); | 2110 return file.readAsBytesSync(); |
| 2085 } | 2111 } |
| 2086 | 2112 |
| 2087 @override | 2113 @override |
| 2088 Future<String> readAsString() async { | 2114 Future<String> readAsString() async { |
| 2089 return file.readAsStringSync(); | 2115 return file.readAsStringSync(); |
| 2090 } | 2116 } |
| 2091 } | 2117 } |
| 2092 | 2118 |
| 2093 class _KernelLibraryResynthesizerContextImpl | 2119 class _KernelLibraryResynthesizerContextImpl |
|
Siggi Cherem (dart-lang)
2017/07/25 15:19:56
question unrelated to the CL: what is your plan wi
scheglov
2017/07/25 16:15:54
Yes, the plan is to extract these classes into a s
| |
| 2094 implements KernelLibraryResynthesizerContext { | 2120 implements KernelLibraryResynthesizerContext { |
| 2095 final _KernelResynthesizer _resynthesizer; | 2121 final _KernelResynthesizer _resynthesizer; |
| 2096 | 2122 |
| 2097 @override | 2123 @override |
| 2098 final kernel.Library library; | 2124 final kernel.Library library; |
| 2099 | 2125 |
| 2100 _KernelLibraryResynthesizerContextImpl(this._resynthesizer, this.library); | 2126 _KernelLibraryResynthesizerContextImpl(this._resynthesizer, this.library); |
| 2101 | 2127 |
| 2102 @override | 2128 @override |
| 2129 ConstructorInitializer getConstructorInitializer( | |
| 2130 ConstructorElementImpl constructor, kernel.Initializer k) { | |
| 2131 if (k is kernel.LocalInitializer || | |
| 2132 k is kernel.FieldInitializer && k.isSynthetic || | |
| 2133 k is kernel.SuperInitializer && k.isSynthetic) { | |
| 2134 return null; | |
| 2135 } | |
| 2136 return new _ExprBuilder(this).buildInitializer(k); | |
| 2137 } | |
| 2138 | |
| 2139 @override | |
| 2140 ElementImpl getElement(kernel.Reference reference) { | |
| 2141 return _getElement(reference.canonicalName); | |
| 2142 } | |
| 2143 | |
| 2144 @override | |
| 2103 Expression getExpression(kernel.Expression expression) { | 2145 Expression getExpression(kernel.Expression expression) { |
| 2104 return new _ExprBuilder(this).build(expression); | 2146 return new _ExprBuilder(this).build(expression); |
| 2105 } | 2147 } |
| 2106 | 2148 |
| 2107 @override | 2149 @override |
| 2108 InterfaceType getInterfaceType( | 2150 InterfaceType getInterfaceType( |
| 2109 ElementImpl context, kernel.Supertype kernelType) { | 2151 ElementImpl context, kernel.Supertype kernelType) { |
| 2110 return _getInterfaceType( | 2152 return _getInterfaceType( |
| 2111 context, kernelType.className.canonicalName, kernelType.typeArguments); | 2153 context, kernelType.className.canonicalName, kernelType.typeArguments); |
| 2112 } | 2154 } |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 2137 */ | 2179 */ |
| 2138 ElementImpl _getElement(kernel.CanonicalName name) { | 2180 ElementImpl _getElement(kernel.CanonicalName name) { |
| 2139 if (name == null) return null; | 2181 if (name == null) return null; |
| 2140 kernel.CanonicalName parentName = name.parent; | 2182 kernel.CanonicalName parentName = name.parent; |
| 2141 | 2183 |
| 2142 // If the parent is the root, then this name is a library. | 2184 // If the parent is the root, then this name is a library. |
| 2143 if (parentName.isRoot) { | 2185 if (parentName.isRoot) { |
| 2144 return _resynthesizer.getLibrary(name.name); | 2186 return _resynthesizer.getLibrary(name.name); |
| 2145 } | 2187 } |
| 2146 | 2188 |
| 2189 // If the name is private, it is prefixed with a library URI. | |
| 2190 if (name.name.startsWith('_')) { | |
| 2191 parentName = parentName.parent; | |
| 2192 } | |
| 2193 | |
| 2147 // Skip qualifiers. | 2194 // Skip qualifiers. |
| 2148 bool isGetter = false; | 2195 bool isGetter = false; |
| 2149 bool isSetter = false; | 2196 bool isSetter = false; |
| 2150 bool isField = false; | 2197 bool isField = false; |
| 2151 bool isConstructor = false; | 2198 bool isConstructor = false; |
| 2152 bool isMethod = false; | 2199 bool isMethod = false; |
| 2153 if (parentName.name == '@getters') { | 2200 if (parentName.name == '@getters') { |
| 2154 isGetter = true; | 2201 isGetter = true; |
| 2155 parentName = parentName.parent; | 2202 parentName = parentName.parent; |
| 2156 } else if (parentName.name == '@setters') { | 2203 } else if (parentName.name == '@setters') { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2272 } | 2319 } |
| 2273 | 2320 |
| 2274 /** | 2321 /** |
| 2275 * Get the [Source] object for the given [uri]. | 2322 * Get the [Source] object for the given [uri]. |
| 2276 */ | 2323 */ |
| 2277 Source _getSource(String uri) { | 2324 Source _getSource(String uri) { |
| 2278 return _sources.putIfAbsent( | 2325 return _sources.putIfAbsent( |
| 2279 uri, () => _analysisContext.sourceFactory.forUri(uri)); | 2326 uri, () => _analysisContext.sourceFactory.forUri(uri)); |
| 2280 } | 2327 } |
| 2281 } | 2328 } |
| OLD | NEW |