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

Unified Diff: pkg/kernel/lib/verifier.dart

Issue 2999033002: Mark top-level error field as static. (Closed)
Patch Set: Remove unused import. Created 3 years, 4 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
« no previous file with comments | « pkg/front_end/testcases/regress/issue_29986.dart.strong.expect ('k') | pkg/kernel/test/verify_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/lib/verifier.dart
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index c923a8d7d8ae63fa57ba91655b87a83eda949e60..be3697eae8860748844e2c3a99e2ac42272e78ba 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -57,8 +57,12 @@ class VerifyingVisitor extends RecursiveVisitor {
bool inCatchBlock = false;
+ Library currentLibrary;
+
Member currentMember;
+
Class currentClass;
+
TreeNode currentParent;
TreeNode get context => currentMember ?? currentClass;
@@ -187,6 +191,12 @@ class VerifyingVisitor extends RecursiveVisitor {
}
}
+ void visitLibrary(Library node) {
+ currentLibrary = node;
+ super.visitLibrary(node);
+ currentLibrary = null;
+ }
+
void checkTypedef(Typedef node) {
var state = typedefState[node];
if (state == TypedefState.Done) return;
@@ -216,6 +226,15 @@ class VerifyingVisitor extends RecursiveVisitor {
visitField(Field node) {
currentMember = node;
var oldParent = enterParent(node);
+ bool isTopLevel = node.parent == currentLibrary;
+ if (isTopLevel && !node.isStatic) {
+ problem(node, "The top-level field '${node.name.name}' should be static",
+ context: node);
+ }
+ if (node.isConst && !node.isStatic) {
+ problem(node, "The const field '${node.name.name}' should be static",
+ context: node);
+ }
classTypeParametersAreInScope = !node.isStatic;
node.initializer?.accept(this);
node.type.accept(this);
« no previous file with comments | « pkg/front_end/testcases/regress/issue_29986.dart.strong.expect ('k') | pkg/kernel/test/verify_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698