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 7d74587706d9cbaf6c5d00ec267aab5dcea68b17..abe486c95164269eed02268371ed4c44e425d5a9 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'; |
@@ -493,11 +494,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,36 +544,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 { |
await super.test_const_topLevel_ifNull(); |
} |
@failingTest |
- test_const_topLevel_parenthesis() async { |
- await super.test_const_topLevel_parenthesis(); |
- } |
- |
- @failingTest |
- test_const_topLevel_prefix() async { |
- await super.test_const_topLevel_prefix(); |
- } |
- |
- @failingTest |
test_const_topLevel_super() async { |
await super.test_const_topLevel_super(); |
} |
@@ -2194,6 +2165,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'); |
} |
@@ -2269,6 +2283,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 { |
@@ -2364,6 +2402,7 @@ class _KernelLibraryResynthesizerContextImpl |
bool isGetter = false; |
bool isSetter = false; |
bool isField = false; |
+ bool isMethod = false; |
if (parentName.name == '@getters') { |
isGetter = true; |
parentName = parentName.parent; |
@@ -2373,6 +2412,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); |
@@ -2398,6 +2440,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; |
} |