| Index: dart/compiler/javatests/com/google/dart/compiler/parser/DartASTValidator.java
|
| diff --git a/dart/compiler/javatests/com/google/dart/compiler/parser/DartASTValidator.java b/dart/compiler/javatests/com/google/dart/compiler/parser/DartASTValidator.java
|
| deleted file mode 100755
|
| index 9309162eecc00937ea767df0cf3295f4a10b9ea8..0000000000000000000000000000000000000000
|
| --- a/dart/compiler/javatests/com/google/dart/compiler/parser/DartASTValidator.java
|
| +++ /dev/null
|
| @@ -1,635 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -package com.google.dart.compiler.parser;
|
| -
|
| -import com.google.dart.compiler.ast.ASTVisitor;
|
| -import com.google.dart.compiler.ast.DartArrayAccess;
|
| -import com.google.dart.compiler.ast.DartArrayLiteral;
|
| -import com.google.dart.compiler.ast.DartBinaryExpression;
|
| -import com.google.dart.compiler.ast.DartBlock;
|
| -import com.google.dart.compiler.ast.DartBooleanLiteral;
|
| -import com.google.dart.compiler.ast.DartBreakStatement;
|
| -import com.google.dart.compiler.ast.DartCase;
|
| -import com.google.dart.compiler.ast.DartCatchBlock;
|
| -import com.google.dart.compiler.ast.DartClass;
|
| -import com.google.dart.compiler.ast.DartConditional;
|
| -import com.google.dart.compiler.ast.DartContinueStatement;
|
| -import com.google.dart.compiler.ast.DartDefault;
|
| -import com.google.dart.compiler.ast.DartDoWhileStatement;
|
| -import com.google.dart.compiler.ast.DartDoubleLiteral;
|
| -import com.google.dart.compiler.ast.DartEmptyStatement;
|
| -import com.google.dart.compiler.ast.DartExprStmt;
|
| -import com.google.dart.compiler.ast.DartField;
|
| -import com.google.dart.compiler.ast.DartFieldDefinition;
|
| -import com.google.dart.compiler.ast.DartForInStatement;
|
| -import com.google.dart.compiler.ast.DartForStatement;
|
| -import com.google.dart.compiler.ast.DartFunction;
|
| -import com.google.dart.compiler.ast.DartFunctionExpression;
|
| -import com.google.dart.compiler.ast.DartFunctionObjectInvocation;
|
| -import com.google.dart.compiler.ast.DartFunctionTypeAlias;
|
| -import com.google.dart.compiler.ast.DartIdentifier;
|
| -import com.google.dart.compiler.ast.DartIfStatement;
|
| -import com.google.dart.compiler.ast.DartImportDirective;
|
| -import com.google.dart.compiler.ast.DartInitializer;
|
| -import com.google.dart.compiler.ast.DartIntegerLiteral;
|
| -import com.google.dart.compiler.ast.DartLabel;
|
| -import com.google.dart.compiler.ast.DartLibraryDirective;
|
| -import com.google.dart.compiler.ast.DartMapLiteral;
|
| -import com.google.dart.compiler.ast.DartMapLiteralEntry;
|
| -import com.google.dart.compiler.ast.DartMethodDefinition;
|
| -import com.google.dart.compiler.ast.DartMethodInvocation;
|
| -import com.google.dart.compiler.ast.DartNamedExpression;
|
| -import com.google.dart.compiler.ast.DartNativeBlock;
|
| -import com.google.dart.compiler.ast.DartNativeDirective;
|
| -import com.google.dart.compiler.ast.DartNewExpression;
|
| -import com.google.dart.compiler.ast.DartNode;
|
| -import com.google.dart.compiler.ast.DartNullLiteral;
|
| -import com.google.dart.compiler.ast.DartParameter;
|
| -import com.google.dart.compiler.ast.DartParameterizedTypeNode;
|
| -import com.google.dart.compiler.ast.DartParenthesizedExpression;
|
| -import com.google.dart.compiler.ast.DartPropertyAccess;
|
| -import com.google.dart.compiler.ast.DartRedirectConstructorInvocation;
|
| -import com.google.dart.compiler.ast.DartReturnStatement;
|
| -import com.google.dart.compiler.ast.DartSourceDirective;
|
| -import com.google.dart.compiler.ast.DartStringInterpolation;
|
| -import com.google.dart.compiler.ast.DartStringLiteral;
|
| -import com.google.dart.compiler.ast.DartSuperConstructorInvocation;
|
| -import com.google.dart.compiler.ast.DartSuperExpression;
|
| -import com.google.dart.compiler.ast.DartSwitchStatement;
|
| -import com.google.dart.compiler.ast.DartSyntheticErrorExpression;
|
| -import com.google.dart.compiler.ast.DartSyntheticErrorStatement;
|
| -import com.google.dart.compiler.ast.DartThisExpression;
|
| -import com.google.dart.compiler.ast.DartThrowExpression;
|
| -import com.google.dart.compiler.ast.DartTryStatement;
|
| -import com.google.dart.compiler.ast.DartTypeExpression;
|
| -import com.google.dart.compiler.ast.DartTypeNode;
|
| -import com.google.dart.compiler.ast.DartTypeParameter;
|
| -import com.google.dart.compiler.ast.DartUnaryExpression;
|
| -import com.google.dart.compiler.ast.DartUnit;
|
| -import com.google.dart.compiler.ast.DartUnqualifiedInvocation;
|
| -import com.google.dart.compiler.ast.DartVariable;
|
| -import com.google.dart.compiler.ast.DartVariableStatement;
|
| -import com.google.dart.compiler.ast.DartWhileStatement;
|
| -
|
| -import junit.framework.Assert;
|
| -
|
| -import java.util.ArrayList;
|
| -import java.util.List;
|
| -
|
| -public class DartASTValidator extends ASTVisitor<Void> {
|
| -
|
| - private ArrayList<String> errors = new ArrayList<String>();
|
| -
|
| - public void assertValid() {
|
| - if (!errors.isEmpty()) {
|
| - StringBuilder builder = new StringBuilder();
|
| - builder.append("Invalid AST structure:");
|
| - for (String message : errors) {
|
| - builder.append("\r\n ");
|
| - builder.append(message);
|
| - }
|
| - Assert.fail(builder.toString());
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public void visit(List<? extends DartNode> nodes) {
|
| - if (nodes != null) {
|
| - int previousEnd = -1;
|
| - for (DartNode node : nodes) {
|
| - int start = node.getSourceInfo().getOffset();
|
| - if (start <= previousEnd) {
|
| - errors.add("Node starts (" + start + ") before previous sibling's end (" + previousEnd
|
| - + ") or nodes are not in source order");
|
| - }
|
| - node.accept(this);
|
| - previousEnd = start + node.getSourceInfo().getLength() - 1;
|
| - }
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public Void visitArrayAccess(DartArrayAccess node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitArrayLiteral(DartArrayLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitBinaryExpression(DartBinaryExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitBlock(DartBlock node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitBooleanLiteral(DartBooleanLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitBreakStatement(DartBreakStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitCase(DartCase node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitCatchBlock(DartCatchBlock node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitClass(DartClass node) {
|
| - validate(node);
|
| - node.getName().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitConditional(DartConditional node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitContinueStatement(DartContinueStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitDefault(DartDefault node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitDoubleLiteral(DartDoubleLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitDoWhileStatement(DartDoWhileStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitEmptyStatement(DartEmptyStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitExprStmt(DartExprStmt node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitFieldDefinition(DartFieldDefinition node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitField(DartField node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - node.getName().accept(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitForInStatement(DartForInStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitForStatement(DartForStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitFunction(DartFunction node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitFunctionExpression(DartFunctionExpression node) {
|
| - validate(node);
|
| - DartIdentifier name = node.getName();
|
| - if (name != null) {
|
| - name.accept(this);
|
| - }
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitFunctionObjectInvocation(DartFunctionObjectInvocation node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitFunctionTypeAlias(DartFunctionTypeAlias node) {
|
| - validate(node);
|
| - node.getName().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitIdentifier(DartIdentifier node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitIfStatement(DartIfStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitImportDirective(DartImportDirective node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitInitializer(DartInitializer node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitIntegerLiteral(DartIntegerLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitLabel(DartLabel node) {
|
| - validate(node);
|
| - node.getLabel().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitLibraryDirective(DartLibraryDirective node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitMapLiteral(DartMapLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitMapLiteralEntry(DartMapLiteralEntry node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitMethodDefinition(DartMethodDefinition node) {
|
| - validate(node);
|
| - node.getName().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitMethodInvocation(DartMethodInvocation node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitNativeBlock(DartNativeBlock node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitNativeDirective(DartNativeDirective node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitNewExpression(DartNewExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitNullLiteral(DartNullLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitParameter(DartParameter node) {
|
| - validate(node);
|
| - node.getName().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitParenthesizedExpression(DartParenthesizedExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitPropertyAccess(DartPropertyAccess node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitReturnStatement(DartReturnStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitSourceDirective(DartSourceDirective node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitNamedExpression(DartNamedExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitStringInterpolation(DartStringInterpolation node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitStringLiteral(DartStringLiteral node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitSuperConstructorInvocation(
|
| - DartSuperConstructorInvocation node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitSuperExpression(DartSuperExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitSwitchStatement(DartSwitchStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitSyntheticErrorExpression(DartSyntheticErrorExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitSyntheticErrorStatement(DartSyntheticErrorStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitThisExpression(DartThisExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitThrowExpression(DartThrowExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitTryStatement(DartTryStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitTypeExpression(DartTypeExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitTypeNode(DartTypeNode node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitTypeParameter(DartTypeParameter node) {
|
| - validate(node);
|
| - node.getName().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitUnaryExpression(DartUnaryExpression node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitUnit(DartUnit node) {
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitUnqualifiedInvocation(DartUnqualifiedInvocation node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitVariable(DartVariable node) {
|
| - validate(node);
|
| - node.getName().accept(this);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitVariableStatement(DartVariableStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitWhileStatement(DartWhileStatement node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - public Void visitRedirectConstructorInvocation(DartRedirectConstructorInvocation node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -
|
| - private void validate(DartNode node) {
|
| - DartNode parent = node.getParent();
|
| - if (parent == null) {
|
| - errors.add("No parent for " + node.getClass().getName());
|
| - }
|
| -
|
| - int nodeStart = node.getSourceInfo().getOffset();
|
| - int nodeLength = node.getSourceInfo().getLength();
|
| - if (nodeStart < 0 || nodeLength < 0) {
|
| - errors.add("No source info for " + node.getClass().getName());
|
| - }
|
| -
|
| - if (parent != null) {
|
| - int nodeEnd = nodeStart + nodeLength;
|
| - int parentStart = parent.getSourceInfo().getOffset();
|
| - int parentEnd = parentStart + parent.getSourceInfo().getLength();
|
| - if (parentStart > nodeStart && !isExceptionForNesting(node)) {
|
| - errors.add("Invalid source start (" + nodeStart + ") for "
|
| - + node.getClass().getName() + " inside "
|
| - + parent.getClass().getName() + " (" + parentStart + ")");
|
| - }
|
| - if (nodeEnd > parentEnd && !isExceptionForNesting(node)) {
|
| - errors.add("Invalid source end (" + nodeEnd + ") for "
|
| - + node.getClass().getName() + " inside "
|
| - + parent.getClass().getName() + " (" + parentStart + ")");
|
| - }
|
| - }
|
| -
|
| - if (node instanceof DartSyntheticErrorExpression
|
| - || node instanceof DartSyntheticErrorExpression) {
|
| - errors.add("Parser error at (" + nodeStart + ")");
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Return {@code true} if the given node is an exception to the rule that nodes must nest lexically
|
| - * within their parents. The one exception currently recognized is a DartTypeNode whose parent is
|
| - * a DartParameter within a DartCatchBlock. This exception exists because the type has been moved
|
| - * outside the parameter (following the 'on' keyword) but we didn't update the AST structure to
|
| - * reflect this change.
|
| - *
|
| - * @param node the node being tested
|
| - * @return {@code true} if the given node is an exception to the rule that nodes must nest lexically
|
| - * within their parents
|
| - */
|
| - private boolean isExceptionForNesting(DartNode node) {
|
| - return (node instanceof DartTypeNode) && (node.getParent() instanceof DartParameter) && (node.getParent().getParent() instanceof DartCatchBlock);
|
| - }
|
| -
|
| - @Override
|
| - public Void visitParameterizedTypeNode(DartParameterizedTypeNode node) {
|
| - validate(node);
|
| - node.visitChildren(this);
|
| - return null;
|
| - }
|
| -}
|
|
|