Index: pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart |
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart |
index 5f091e89c02f38161dce00fec68a03d2629be56b..9d9f27e7750b4e8c9366ba6971ad3b73f70be569 100644 |
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart |
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart |
@@ -26,6 +26,7 @@ import 'package:front_end/src/incremental/byte_store.dart'; |
import 'package:front_end/src/incremental/kernel_driver.dart'; |
import 'package:kernel/kernel.dart' as kernel; |
import 'package:kernel/target/targets.dart'; |
+import 'package:kernel/type_environment.dart' as kernel; |
import 'package:package_config/packages.dart'; |
import 'package:path/path.dart' as pathos; |
import 'package:test_reflective_loader/test_reflective_loader.dart'; |
@@ -96,7 +97,8 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
} |
- var resynthesizer = new _KernelResynthesizer(context, libraryMap); |
+ var resynthesizer = |
+ new _KernelResynthesizer(context, kernelResult.types, libraryMap); |
return resynthesizer.getLibrary(testUriStr); |
} |
@@ -493,11 +495,6 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
@failingTest |
- test_const_reference_topLevelVariable() async { |
- await super.test_const_reference_topLevelVariable(); |
- } |
- |
- @failingTest |
test_const_reference_topLevelVariable_imported() async { |
await super.test_const_reference_topLevelVariable_imported(); |
} |
@@ -548,31 +545,11 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest { |
} |
@failingTest |
- test_const_topLevel_binary() async { |
- await super.test_const_topLevel_binary(); |
- } |
- |
- @failingTest |
- test_const_topLevel_conditional() async { |
- await super.test_const_topLevel_conditional(); |
- } |
- |
- @failingTest |
- test_const_topLevel_identical() async { |
- await super.test_const_topLevel_identical(); |
- } |
- |
- @failingTest |
- test_const_topLevel_ifNull() async { |
+ solo_test_const_topLevel_ifNull() async { |
await super.test_const_topLevel_ifNull(); |
} |
@failingTest |
- test_const_topLevel_prefix() async { |
- await super.test_const_topLevel_prefix(); |
- } |
- |
- @failingTest |
test_const_topLevel_super() async { |
await super.test_const_topLevel_super(); |
} |
@@ -2189,6 +2166,49 @@ class _ExprBuilder { |
return AstTestFactory.propertyAccess(target, identifier); |
} |
+ if (expr is kernel.ConditionalExpression) { |
+ var condition = build(expr.condition); |
+ var then = build(expr.then); |
+ var otherwise = build(expr.otherwise); |
+ return AstTestFactory.conditionalExpression(condition, then, otherwise); |
+ } |
+ |
+ if (expr is kernel.Not) { |
+ kernel.Expression kernelOperand = expr.operand; |
+ var operand = build(kernelOperand); |
+ return AstTestFactory.prefixExpression(TokenType.BANG, operand); |
+ } |
+ |
+ if (expr is kernel.LogicalExpression) { |
+ var operator = _toBinaryOperatorTokenType(expr.operator); |
+ var left = build(expr.left); |
+ var right = build(expr.right); |
+ return AstTestFactory.binaryExpression(left, operator, right); |
+ } |
+ |
+ if (expr is kernel.MethodInvocation) { |
+ kernel.Member member = expr.interfaceTarget; |
+ if (member is kernel.Procedure) { |
+ if (member.kind == kernel.ProcedureKind.Operator) { |
+ var left = build(expr.receiver); |
+ String operatorName = expr.name.name; |
+ List<kernel.Expression> args = expr.arguments.positional; |
+ if (args.isEmpty) { |
+ if (operatorName == 'unary-') { |
+ return AstTestFactory.prefixExpression(TokenType.MINUS, left); |
+ } |
+ if (operatorName == '~') { |
+ return AstTestFactory.prefixExpression(TokenType.TILDE, left); |
+ } |
+ } else if (args.length == 1) { |
+ var operator = _toBinaryOperatorTokenType(operatorName); |
+ var right = build(args.single); |
+ return AstTestFactory.binaryExpression(left, operator, right); |
+ } |
+ } |
+ } |
+ } |
+ |
// TODO(scheglov): complete getExpression |
throw new UnimplementedError('kernel: (${expr.runtimeType}) $expr'); |
} |
@@ -2264,6 +2284,30 @@ class _ExprBuilder { |
return AstTestFactory.interpolationExpression(expr); |
} |
} |
+ |
+ /// Return the [TokenType] for the given operator [name]. |
+ TokenType _toBinaryOperatorTokenType(String name) { |
+ if (name == '==') return TokenType.EQ_EQ; |
+ if (name == '&&') return TokenType.AMPERSAND_AMPERSAND; |
+ if (name == '||') return TokenType.BAR_BAR; |
+ if (name == '^') return TokenType.CARET; |
+ if (name == '&') return TokenType.AMPERSAND; |
+ if (name == '|') return TokenType.BAR; |
+ if (name == '>>') return TokenType.GT_GT; |
+ if (name == '<<') return TokenType.LT_LT; |
+ if (name == '+') return TokenType.PLUS; |
+ if (name == '-') return TokenType.MINUS; |
+ if (name == '*') return TokenType.STAR; |
+ if (name == '/') return TokenType.SLASH; |
+ if (name == '~/') return TokenType.TILDE_SLASH; |
+ if (name == '%') return TokenType.PERCENT; |
+ if (name == '>') return TokenType.GT; |
+ if (name == '<') return TokenType.LT; |
+ if (name == '>=') return TokenType.GT_EQ; |
+ if (name == '<=') return TokenType.LT_EQ; |
+ if (name == 'unary-') return TokenType.MINUS; |
+ throw new ArgumentError(name); |
+ } |
} |
class _FileSystemAdaptor implements FileSystem { |
@@ -2359,6 +2403,7 @@ class _KernelLibraryResynthesizerContextImpl |
bool isGetter = false; |
bool isSetter = false; |
bool isField = false; |
+ bool isMethod = false; |
if (parentName.name == '@getters') { |
isGetter = true; |
parentName = parentName.parent; |
@@ -2368,6 +2413,9 @@ class _KernelLibraryResynthesizerContextImpl |
} else if (parentName.name == '@fields') { |
isField = true; |
parentName = parentName.parent; |
+ } else if (parentName.name == '@methods') { |
+ isMethod = true; |
+ parentName = parentName.parent; |
} |
ElementImpl parentElement = _getElement(parentName); |
@@ -2393,6 +2441,8 @@ class _KernelLibraryResynthesizerContextImpl |
return parentElement.getSetter(name.name) as ElementImpl; |
} else if (isField) { |
return parentElement.getField(name.name) as ElementImpl; |
+ } else if (isMethod) { |
+ return parentElement.getMethod(name.name) as ElementImpl; |
} |
return null; |
} |
@@ -2422,6 +2472,7 @@ class _KernelLibraryResynthesizerContextImpl |
class _KernelResynthesizer { |
final AnalysisContext _analysisContext; |
+ final kernel.TypeEnvironment types; |
final Map<String, kernel.Library> _kernelMap; |
final Map<String, LibraryElementImpl> _libraryMap = {}; |
@@ -2430,7 +2481,7 @@ class _KernelResynthesizer { |
*/ |
final Map<String, Source> _sources = <String, Source>{}; |
- _KernelResynthesizer(this._analysisContext, this._kernelMap); |
+ _KernelResynthesizer(this._analysisContext, this.types, this._kernelMap); |
LibraryElementImpl getLibrary(String uriStr) { |
return _libraryMap.putIfAbsent(uriStr, () { |