| 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, () {
|
|
|