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

Unified Diff: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java

Issue 18051016: Do report StaticWarningCode.FINAL_NOT_INITIALIZED (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Don't report for native classes Created 7 years, 5 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: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java
diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java
index 93a052dac8a9036fc70d4f8a97a65b73c4626701..e9229d3d9a75d61e865967a4dddf51084cea2800 100644
--- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java
+++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java
@@ -164,7 +164,6 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
NOT_INIT,
INIT_IN_DECLARATION,
INIT_IN_FIELD_FORMAL,
- INIT_IN_DEFAULT_VALUE,
INIT_IN_INITIALIZERS
}
@@ -236,6 +235,12 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
private boolean isInConstInstanceCreation;
/**
+ * This is set to {@code true} iff the visitor is currently visiting children nodes of a native
+ * {@link ClassDeclaration}.
+ */
+ private boolean isInNativeClass;
+
+ /**
* This is set to {@code true} iff the visitor is currently visiting a static variable
* declaration.
*/
@@ -398,6 +403,7 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
public Void visitClassDeclaration(ClassDeclaration node) {
ClassElement outerClass = enclosingClass;
try {
+ isInNativeClass = node.getNativeClause() != null;
enclosingClass = node.getElement();
WithClause withClause = node.getWithClause();
ImplementsClause implementsClause = node.getImplementsClause();
@@ -434,6 +440,7 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
checkImplementsSuperClass(node);
return super.visitClassDeclaration(node);
} finally {
+ isInNativeClass = false;
initialFieldElementsMap = null;
enclosingClass = outerClass;
}
@@ -899,6 +906,12 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
|| node.getExternalKeyword() != null) {
return false;
}
+
+ // Ignore if native class.
+ if (isInNativeClass) {
+ return false;
+ }
+
boolean foundError = false;
HashMap<FieldElement, INIT_STATE> fieldElementsMap = new HashMap<FieldElement, INIT_STATE>(
initialFieldElementsMap);
@@ -938,6 +951,9 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
// Visit all of the initializers
NodeList<ConstructorInitializer> initializers = node.getInitializers();
for (ConstructorInitializer constructorInitializer : initializers) {
+ if (constructorInitializer instanceof RedirectingConstructorInvocation) {
+ return false;
+ }
if (constructorInitializer instanceof ConstructorFieldInitializer) {
ConstructorFieldInitializer constructorFieldInitializer = (ConstructorFieldInitializer) constructorInitializer;
SimpleIdentifier fieldName = constructorFieldInitializer.getFieldName();
@@ -966,48 +982,24 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
fieldElement.getDisplayName());
foundError = true;
}
-// else if (variableElement instanceof TopLevelVariableElement) {
- // TODO(jwren) Report error, constructor initializer variable is a top level element
- // (Either here or in ElementResolver#visitFieldFormalParameter)
-// }
}
-// else {
- // TODO(jwren) Do we need to consider this branch?
-// }
}
}
- // Before we do the final check for FINAL_NOT_INITIALIZED, first we loop through all of the
- // parameters that have default values to set INIT_IN_DEFAULT_VALUE onto the FieldElement in our
- // fieldElementsMap.
-// for (FormalParameter formalParameter : formalParameters) {
-// if (formalParameter instanceof DefaultFormalParameter) {
-// DefaultFormalParameter defaultFormalParameter = (DefaultFormalParameter) formalParameter;
-// if (defaultFormalParameter.getDefaultValue() != null) {
-// // TODO(jwren) Need associated field element:
-// //fieldElementsMap.put(??, INIT_STATE.INIT_IN_DEFAULT_VALUE);
-// }
-// }
-// }
-
- // Visit all of the states in the map to ensure that none were never initialized
- // TODO(jwren) revisit this block- lots of false positives are generated by the SDK Analysis test
- // Specifically, need Dart language question answered concerning formal function parameters
- // i.e., code like "(..., int this.f(..), ...)".
- // See test at CompileTimeErrorCodeTest.test_finalNotInitialized_inConstructor()
-// Set<Entry<FieldElement, INIT_STATE>> set = fieldElementsMap.entrySet();
-// for (Entry<FieldElement, INIT_STATE> entry : set) {
-// if (entry.getValue() == INIT_STATE.NOT_INIT) {
-// FieldElement fieldElement = entry.getKey();
-// if (fieldElement.isFinal() || fieldElement.isConst()) {
-// errorReporter.reportError(
-// StaticWarningCode.FINAL_NOT_INITIALIZED,
-// node.getReturnType(),
-// fieldElement.getName());
-// foundError = true;
-// }
-// }
-// }
+ // Visit all of the states in the map to ensure that none were never initialized.
+ Set<Entry<FieldElement, INIT_STATE>> set = fieldElementsMap.entrySet();
+ for (Entry<FieldElement, INIT_STATE> entry : set) {
+ if (entry.getValue() == INIT_STATE.NOT_INIT) {
+ FieldElement fieldElement = entry.getKey();
+ if (fieldElement.isFinal() || fieldElement.isConst()) {
+ errorReporter.reportError(
+ StaticWarningCode.FINAL_NOT_INITIALIZED,
+ node.getReturnType(),
+ fieldElement.getName());
+ foundError = true;
+ }
+ }
+ }
return foundError;
}
@@ -2661,6 +2653,9 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
* @see CompileTimeErrorCode#FINAL_NOT_INITIALIZED
*/
private boolean checkForFinalNotInitialized(VariableDeclarationList node) {
+ if (isInNativeClass) {
+ return false;
+ }
boolean foundError = false;
if (!node.isSynthetic() && (node.isConst() || node.isFinal())) {
NodeList<VariableDeclaration> variables = node.getVariables();
@@ -2668,7 +2663,7 @@ public class ErrorVerifier extends RecursiveASTVisitor<Void> {
if (variable.getInitializer() == null) {
errorReporter.reportError(
StaticWarningCode.FINAL_NOT_INITIALIZED,
- variable,
+ variable.getName(),
variable.getName().getName());
foundError = true;
}

Powered by Google App Engine
This is Rietveld 408576698