Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Unified Diff: pkg/front_end/lib/src/fasta/builder/scope.dart

Issue 2767653002: Implement fullNameForErrors on all Builders. (Closed)
Patch Set: Used <unnamed> instead of empty string. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/builder/scope.dart
diff --git a/pkg/front_end/lib/src/fasta/builder/scope.dart b/pkg/front_end/lib/src/fasta/builder/scope.dart
index 60e4f9df796c23a62401fa05c64f9f64ca8276a1..2fe432982ec4967adb96df71a4679cf0306fe0a4 100644
--- a/pkg/front_end/lib/src/fasta/builder/scope.dart
+++ b/pkg/front_end/lib/src/fasta/builder/scope.dart
@@ -37,7 +37,7 @@ class Scope {
return lookupAmbiguous(name, builder, false, charOffset, fileUri);
}
return builder.isSetter
- ? new AccessErrorBuilder(builder, charOffset, fileUri)
+ ? new AccessErrorBuilder(name, builder, charOffset, fileUri)
: builder;
} else {
return parent?.lookup(name, charOffset, fileUri);
@@ -52,14 +52,14 @@ class Scope {
}
if (builder.isField) {
if (builder.isFinal) {
- return new AccessErrorBuilder(builder, charOffset, fileUri);
+ return new AccessErrorBuilder(name, builder, charOffset, fileUri);
} else {
return builder;
}
} else if (builder.isSetter) {
return builder;
} else {
- return new AccessErrorBuilder(builder, charOffset, fileUri);
+ return new AccessErrorBuilder(name, builder, charOffset, fileUri);
}
} else {
return parent?.lookupSetter(name, charOffset, fileUri);
@@ -81,7 +81,7 @@ class Scope {
} else if (current.isSetter && setterBuilder == null) {
setterBuilder = current;
} else {
- return new AmbiguousBuilder(builder, charOffset, fileUri);
+ return new AmbiguousBuilder(name, builder, charOffset, fileUri);
}
current = current.next;
}
@@ -133,16 +133,32 @@ class Scope {
}
}
-class AccessErrorBuilder extends Builder {
+abstract class ProblemBuilder extends Builder {
+ final String name;
+
final Builder builder;
- AccessErrorBuilder(this.builder, int charOffset, Uri fileUri)
+ ProblemBuilder(this.name, this.builder, int charOffset, Uri fileUri)
: super(null, charOffset, fileUri);
- Builder get parent => builder;
-
get target => null;
+ bool get hasProblem => true;
+
+ String get message;
+
+ @override
+ String get fullNameForErrors => name;
+}
+
+/// Represents a [builder] that's being accessed incorrectly. For example, an
+/// attempt to write to a final field, or to read from a setter.
+class AccessErrorBuilder extends ProblemBuilder {
+ AccessErrorBuilder(String name, Builder builder, int charOffset, Uri fileUri)
+ : super(name, builder, charOffset, fileUri);
+
+ Builder get parent => builder;
+
bool get isFinal => builder.isFinal;
bool get isField => builder.isField;
@@ -163,16 +179,12 @@ class AccessErrorBuilder extends Builder {
bool get isLocal => builder.isLocal;
- bool get hasProblem => true;
+ String get message => "Access error: '$name'.";
}
-class AmbiguousBuilder extends Builder {
- final Builder builder;
+class AmbiguousBuilder extends ProblemBuilder {
+ AmbiguousBuilder(String name, Builder builder, int charOffset, Uri fileUri)
+ : super(name, builder, charOffset, fileUri);
- AmbiguousBuilder(this.builder, int charOffset, Uri fileUri)
- : super(null, charOffset, fileUri);
-
- get target => null;
-
- bool get hasProblem => true;
+ String get message => "Duplicated named: '$name'.";
}
« no previous file with comments | « pkg/front_end/lib/src/fasta/builder/prefix_builder.dart ('k') | pkg/front_end/lib/src/fasta/builder/type_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698