Convert DeferredAccessor to DeferredAccessGenerator
Change-Id: I591895d94b051534c0151e30689d1798d803796d
Reviewed-on: https://dart-review.googlesource.com/55466
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 147b088..99e4b4c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -84,7 +84,7 @@
show
BuilderHelper,
CalleeDesignation,
- DeferredAccessor,
+ DeferredAccessGenerator,
ErrorAccessor,
FastaAccessor,
FunctionTypeAccessor,
@@ -1415,7 +1415,7 @@
TypeDeclarationAccessor accessor = new TypeDeclarationAccessor(
this, token, prefix, charOffset, builder, name);
return (prefix?.deferred == true)
- ? new DeferredAccessor(this, token, prefix, accessor)
+ ? new DeferredAccessGenerator(this, token, prefix, accessor)
: accessor;
} else if (builder.isLocal) {
if (constantContext != ConstantContext.none &&
@@ -1468,7 +1468,7 @@
StaticAccessGenerator accessor =
new StaticAccessGenerator(this, token, builder.target, null);
return (prefix?.deferred == true)
- ? new DeferredAccessor(this, token, prefix, accessor)
+ ? new DeferredAccessGenerator(this, token, prefix, accessor)
: accessor;
} else if (builder is PrefixBuilder) {
if (constantContext != ConstantContext.none && builder.deferred) {
@@ -1505,7 +1505,7 @@
}
}
return (prefix?.deferred == true)
- ? new DeferredAccessor(this, token, prefix, accessor)
+ ? new DeferredAccessGenerator(this, token, prefix, accessor)
: accessor;
}
}
@@ -2780,8 +2780,8 @@
var type = pop();
PrefixBuilder deferredPrefix;
int checkOffset;
- if (type is DeferredAccessor) {
- DeferredAccessor accessor = type;
+ if (type is DeferredAccessGenerator) {
+ DeferredAccessGenerator accessor = type;
type = accessor.accessor;
deferredPrefix = accessor.builder;
checkOffset = accessor.token.charOffset;
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 71ed96d..e0ac25a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -1253,14 +1253,22 @@
}
}
-abstract class _DeferredAccessor<Arguments> extends Accessor<Arguments> {
+class DeferredAccessGenerator<Arguments> extends Generator<Arguments> {
final PrefixBuilder builder;
- final Accessor accessor;
- _DeferredAccessor(BuilderHelper<dynamic, dynamic, Arguments> helper,
+ final FastaAccessor accessor;
+
+ DeferredAccessGenerator(BuilderHelper<dynamic, dynamic, Arguments> helper,
Token token, this.builder, this.accessor)
: super(helper, token);
+ String get plainNameForRead {
+ return unsupported(
+ "deferredAccessor.plainNameForRead", offsetForToken(token), uri);
+ }
+
+ String get debugName => "DeferredAccessGenerator";
+
kernel.Expression _makeSimpleRead() {
return helper.wrapInDeferredCheck(
accessor._makeSimpleRead(), builder, token.charOffset);
@@ -1278,6 +1286,45 @@
builder,
token.charOffset);
}
+
+ buildPropertyAccess(
+ IncompleteSend send, int operatorOffset, bool isNullAware) {
+ var propertyAccess =
+ accessor.buildPropertyAccess(send, operatorOffset, isNullAware);
+ if (propertyAccess is FastaAccessor) {
+ return new DeferredAccessGenerator(
+ helper, token, builder, propertyAccess);
+ } else {
+ kernel.Expression expression = propertyAccess;
+ return helper.wrapInDeferredCheck(expression, builder, token.charOffset);
+ }
+ }
+
+ @override
+ DartType buildTypeWithBuiltArguments(List<DartType> arguments,
+ {bool nonInstanceAccessIsError: false}) {
+ helper.addProblem(
+ templateDeferredTypeAnnotation.withArguments(
+ accessor.buildTypeWithBuiltArguments(arguments,
+ nonInstanceAccessIsError: nonInstanceAccessIsError),
+ builder.name),
+ offsetForToken(token),
+ lengthForToken(token));
+ return const InvalidType();
+ }
+
+ kernel.Expression doInvocation(int offset, Arguments arguments) {
+ return helper.wrapInDeferredCheck(
+ accessor.doInvocation(offset, arguments), builder, token.charOffset);
+ }
+
+ @override
+ void printOn(StringSink sink) {
+ sink.write(", builder: ");
+ sink.write(builder);
+ sink.write(", accessor: ");
+ sink.write(accessor);
+ }
}
abstract class _ReadOnlyAccessor<Arguments> extends Accessor<Arguments> {
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_impl.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_impl.dart
index 9955340..74e4545 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_impl.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_impl.dart
@@ -780,60 +780,6 @@
}
}
-class DeferredAccessor<Arguments> extends _DeferredAccessor<Arguments>
- with FastaAccessor<Arguments> {
- DeferredAccessor(BuilderHelper<dynamic, dynamic, Arguments> helper,
- Token token, PrefixBuilder builder, FastaAccessor expression)
- : super(helper, token, builder, expression);
-
- String get plainNameForRead {
- return unsupported(
- "deferredAccessor.plainNameForRead", offsetForToken(token), uri);
- }
-
- String get debugName => "DeferredAccessor";
-
- FastaAccessor get accessor => super.accessor;
-
- buildPropertyAccess(
- IncompleteSend send, int operatorOffset, bool isNullAware) {
- var propertyAccess =
- accessor.buildPropertyAccess(send, operatorOffset, isNullAware);
- if (propertyAccess is FastaAccessor) {
- return new DeferredAccessor(helper, token, builder, propertyAccess);
- } else {
- kernel.Expression expression = propertyAccess;
- return helper.wrapInDeferredCheck(expression, builder, token.charOffset);
- }
- }
-
- @override
- DartType buildTypeWithBuiltArguments(List<DartType> arguments,
- {bool nonInstanceAccessIsError: false}) {
- helper.addProblem(
- templateDeferredTypeAnnotation.withArguments(
- accessor.buildTypeWithBuiltArguments(arguments,
- nonInstanceAccessIsError: nonInstanceAccessIsError),
- builder.name),
- offsetForToken(token),
- lengthForToken(token));
- return const InvalidType();
- }
-
- kernel.Expression doInvocation(int offset, Arguments arguments) {
- return helper.wrapInDeferredCheck(
- accessor.doInvocation(offset, arguments), builder, token.charOffset);
- }
-
- @override
- void printOn(StringSink sink) {
- sink.write(", builder: ");
- sink.write(builder);
- sink.write(", accessor: ");
- sink.write(accessor);
- }
-}
-
int adjustForImplicitCall(String name, int offset) {
// Normally the offset is at the start of the token, but in this case,
// because we insert a '.call', we want it at the end instead.
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 42c85c0..3fc5207 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -46,7 +46,7 @@
import 'package:front_end/src/fasta/kernel/expression_generator.dart'
show
- DeferredAccessor,
+ DeferredAccessGenerator,
FastaAccessor,
IncompleteError,
IncompletePropertyAccessor,
@@ -202,10 +202,11 @@
check("IncompletePropertyAccessor(offset: 4, name: bar)",
new IncompletePropertyAccessor<Arguments>(helper, token, name));
check(
- "DeferredAccessor(offset: 4, builder: Instance of 'PrefixBuilder',"
+ "DeferredAccessGenerator(offset: 4, "
+ "builder: Instance of 'PrefixBuilder',"
" accessor: ThisAccessor(offset: 4, isInitializer: false,"
" isSuper: false))",
- new DeferredAccessor<Arguments>(
+ new DeferredAccessGenerator<Arguments>(
helper, token, prefixBuilder, accessor));
check("ReadOnlyAccessor(offset: 4, plainNameForRead: foo)",
new ReadOnlyAccessor<Arguments>(helper, token, expression, "foo"));