Index: dart/compiler/java/com/google/dart/compiler/parser/CompletionHooksParserBase.java |
diff --git a/dart/compiler/java/com/google/dart/compiler/parser/CompletionHooksParserBase.java b/dart/compiler/java/com/google/dart/compiler/parser/CompletionHooksParserBase.java |
deleted file mode 100644 |
index 0c52488ffcaecc886b33f72c90f44d63bd767a3f..0000000000000000000000000000000000000000 |
--- a/dart/compiler/java/com/google/dart/compiler/parser/CompletionHooksParserBase.java |
+++ /dev/null |
@@ -1,482 +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.common.HasSourceInfo; |
- |
-/** |
- * This class exists to enforce constraints on begin calls so code |
- * completion works. |
- * <p> |
- * In particular, it prevents {@link #begin()} from being called directly, |
- * ensuring that callers must use appropriate {@code beginFoo} methods. |
- * <p> |
- * These hooks serve two purposes: |
- * <ol> |
- * <li>remember start positions to set source location information on AST |
- * nodes |
- * <li>provide an event mechanism that is useful for an IDE operating on code |
- * being edited - for example, for error recovery or code completion |
- * </ol> |
- * <p> |
- * Every call to {@code beginFoo} must be balanced with exactly one call |
- * to either {@link #rollback()} or {@link #done(Object)}. Between those |
- * calls, there may be an arbitrary number of calls to |
- * {@link #doneWithoutConsuming(Object)} to set AST node positions based on |
- * the current position on the stack. |
- */ |
-public abstract class CompletionHooksParserBase extends AbstractParser { |
- |
- /* |
- * Guards the parser from infinite loops and recursion. |
- * THIS CLASS IS FOR DEBUG/INTERNAL USE ONLY. |
- * TODO (fabiomfv) - remove before release. |
- */ |
- private class TerminationGuard { |
- |
- /* |
- * Loosely, determines the maximum number of non-terminals 'visited' without |
- * advancing on input. It does not need to be a precise number, just to have |
- * an upper bound on the 'space' the parser can consume before declaring |
- * it is not making progress. |
- */ |
- private static final int THRESHOLD = 1000; |
- |
- private int maxPositionRange = Integer.MIN_VALUE; |
- private int minPositionRange = Integer.MAX_VALUE; |
- private int threshold = THRESHOLD; |
- |
- /* |
- * Guard against parser termination bugs. Called from begin(). |
- * If the parser does not consume tokens it is an indication that it is not |
- * making progress. Look at the stack in the exception for hints of |
- * productions at fault. Called from begin() |
- */ |
- public boolean assertProgress() { |
- int currentPosition = position(); |
- if (currentPosition > maxPositionRange) { |
- minPositionRange = maxPositionRange; |
- maxPositionRange = currentPosition; |
- threshold = THRESHOLD; |
- } else if (currentPosition < minPositionRange) { |
- minPositionRange = currentPosition; |
- threshold = THRESHOLD; |
- } |
- if (threshold-- <= 0) { |
- StringBuilder sb = new StringBuilder(); |
- sb.append("Parser failed to make progress after many tries. File a " + |
- "bug and attach this callstack and error output.\n"); |
- sb.append("Scanner State: "); |
- sb.append(ctx.toString()); |
- sb.append("\n"); |
- sb.append("Input range ["); |
- sb.append(minPositionRange); |
- sb.append(","); |
- sb.append(maxPositionRange); |
- sb.append("]\n"); |
- throw new AssertionError(sb.toString()); |
- } |
- return true; |
- } |
- } |
- |
- /** |
- * Guards against termination bugs. For debugging purposes only. |
- * See {@link TerminationGuard} for details. |
- */ |
- private TerminationGuard guard = new TerminationGuard(); |
- |
- /** |
- * Set the context the parser will use. |
- * |
- * @param ctx the {@link ParserContext} to use |
- */ |
- public CompletionHooksParserBase(ParserContext ctx) { |
- super(ctx); |
- } |
- |
- protected void beginArgumentDefinitionTest() { |
- begin(); |
- } |
- |
- protected void beginArrayLiteral() { |
- begin(); |
- } |
- |
- protected void beginAssertStatement() { |
- begin(); |
- } |
- |
- protected void beginBinaryExpression() { |
- begin(); |
- } |
- |
- protected void beginBlock() { |
- begin(); |
- } |
- |
- protected void beginBreakStatement() { |
- begin(); |
- } |
- |
- protected void beginCatchClause() { |
- begin(); |
- } |
- |
- protected void beginCatchParameter() { |
- begin(); |
- } |
- |
- protected void beginClassBody() { |
- begin(); |
- } |
- |
- protected void beginClassMember() { |
- begin(); |
- } |
- |
- protected void beginCompilationUnit() { |
- begin(); |
- } |
- |
- protected void beginConditionalExpression() { |
- begin(); |
- } |
- |
- protected void beginConstExpression() { |
- begin(); |
- } |
- |
- protected void beginConstructor() { |
- begin(); |
- } |
- |
- protected void beginConstructorNamePart() { |
- begin(); |
- } |
- |
- protected void beginContinueStatement() { |
- begin(); |
- } |
- |
- protected void beginDoStatement() { |
- begin(); |
- } |
- |
- protected void beginEmptyStatement() { |
- begin(); |
- } |
- |
- protected void beginEntryPoint() { |
- begin(); |
- } |
- |
- protected void beginExportDirective() { |
- begin(); |
- } |
- |
- protected void beginExpression() { |
- begin(); |
- } |
- |
- protected void beginExpressionList() { |
- begin(); |
- } |
- |
- protected void beginExpressionStatement() { |
- begin(); |
- } |
- |
- protected void beginFieldInitializerOrRedirectedConstructor() { |
- begin(); |
- } |
- |
- protected void beginFinalDeclaration() { |
- begin(); |
- } |
- |
- protected void beginForInitialization() { |
- begin(); |
- } |
- |
- protected void beginFormalParameter() { |
- begin(); |
- } |
- |
- protected void beginFormalParameterList() { |
- begin(); |
- } |
- |
- protected void beginForStatement() { |
- begin(); |
- } |
- |
- protected void beginFunctionDeclaration() { |
- begin(); |
- } |
- |
- protected void beginFunctionLiteral() { |
- begin(); |
- } |
- |
- protected void beginFunctionStatementBody() { |
- begin(); |
- } |
- |
- protected void beginClassTypeInterface() { |
- begin(); |
- } |
- |
- protected void beginFunctionTypeInterface() { |
- begin(); |
- } |
- |
- protected void beginIdentifier() { |
- begin(); |
- } |
- |
- protected void beginIfStatement() { |
- begin(); |
- } |
- |
- protected void beginImportDirective() { |
- begin(); |
- } |
- |
- protected void beginImportCombinator() { |
- begin(); |
- } |
- |
- protected void beginInitializer() { |
- begin(); |
- } |
- |
- protected void beginTypeExpression() { |
- begin(); |
- } |
- |
- protected void beginLabel() { |
- begin(); |
- } |
- |
- protected void beginLibraryDirective() { |
- begin(); |
- } |
- |
- protected void beginLiteral() { |
- begin(); |
- } |
- |
- protected void beginMapLiteral() { |
- begin(); |
- } |
- |
- protected void beginMapLiteralEntry() { |
- begin(); |
- } |
- |
- protected void beginMetadata() { |
- begin(); |
- } |
- |
- protected void beginMethodName() { |
- begin(); |
- } |
- |
- protected void beginNativeBody() { |
- begin(); |
- } |
- |
- protected void beginNativeDirective() { |
- begin(); |
- } |
- |
- protected void beginNewExpression() { |
- begin(); |
- } |
- |
- protected void beginOperatorName() { |
- begin(); |
- } |
- |
- protected void beginParameter() { |
- begin(); |
- } |
- |
- protected void beginParameterName() { |
- begin(); |
- } |
- |
- protected void beginParenthesizedExpression() { |
- begin(); |
- } |
- |
- protected void beginPartDirective() { |
- begin(); |
- } |
- |
- protected void beginPartOfDirective() { |
- begin(); |
- } |
- |
- protected void beginPostfixExpression() { |
- begin(); |
- } |
- |
- protected void beginQualifiedIdentifier() { |
- begin(); |
- } |
- |
- protected void beginReturnStatement() { |
- begin(); |
- } |
- |
- protected void beginReturnType() { |
- begin(); |
- } |
- |
- protected void beginSelectorExpression() { |
- begin(); |
- } |
- |
- protected void beginSourceDirective() { |
- begin(); |
- } |
- |
- protected void beginSpreadExpression() { |
- begin(); |
- } |
- |
- protected void beginStringInterpolation() { |
- begin(); |
- } |
- |
- protected void beginStringSegment() { |
- begin(); |
- } |
- |
- protected void beginSuperExpression() { |
- begin(); |
- } |
- |
- protected void beginSuperInitializer() { |
- begin(); |
- } |
- |
- protected void beginSwitchMember() { |
- begin(); |
- } |
- |
- protected void beginSwitchStatement() { |
- begin(); |
- } |
- |
- protected void beginThisExpression() { |
- begin(); |
- } |
- |
- protected void beginThrowExpression() { |
- begin(); |
- } |
- |
- protected void beginTopLevelElement() { |
- begin(); |
- } |
- |
- protected void beginTryStatement() { |
- begin(); |
- } |
- |
- protected void beginTypeAnnotation() { |
- begin(); |
- } |
- |
- protected void beginTypeArguments() { |
- begin(); |
- } |
- |
- protected void beginTypeFunctionOrVariable() { |
- begin(); |
- } |
- |
- protected void beginTypeParameter() { |
- begin(); |
- } |
- |
- protected void beginUnaryExpression() { |
- begin(); |
- } |
- |
- protected void beginVarDeclaration() { |
- begin(); |
- } |
- |
- protected void beginVariableDeclaration() { |
- begin(); |
- } |
- |
- protected void beginWhileStatement() { |
- begin(); |
- } |
- |
- /** |
- * Terminates a grammatical structure, saving the source location in the |
- * supplied AST node. |
- * |
- * @param <T> type of the AST node |
- * @param result the AST node to return, if any - if it implements |
- * {@link HasSourceInfo}, the source location is set based on the |
- * current position and the start of this grammatical structure |
- * @return the supplied AST node (may be null) |
- */ |
- protected <T> T done(T result) { |
- return ctx.done(result); |
- } |
- |
- /** |
- * Saves the current source location in the supplied AST node, used for |
- * subcomponents of the AST. This may only be called within an active |
- * {@link #begin()} call, which must still be terminated with either |
- * {@link #done(Object)} or {@link #rollback()}. |
- * |
- * @param <T> type of the AST node |
- * @param result the AST node to return - if it implements |
- * {@link HasSourceInfo}, the source location is set based on the |
- * current position and the start of this grammatical structure |
- * @return the supplied AST node |
- */ |
- protected <T> T doneWithoutConsuming(T result) { |
- return ctx.doneWithoutConsuming(result); |
- } |
- |
- /** |
- * Terminates an attempt to parse a grammatical structure, rolling back to the |
- * state as of the previous {@link #begin()} call and removing the saved |
- * state. |
- */ |
- protected void rollback() { |
- ctx.rollback(); |
- } |
- |
- /** |
- * This should only be called when the parser is looking ahead to decide how |
- * to parse something, and this will always be rolled back without any other {@link #begin()} |
- * statements being called. |
- */ |
- protected void startLookahead() { |
- begin(); |
- } |
- |
- /** |
- * Begin a grammatical structure, saving the current location to later set in |
- * an AST node. This may be followed by zero or more |
- * {@link #doneWithoutConsuming(Object)} calls, and is terminated by exactly |
- * one {@link #done(Object)} or {@link #rollback()} call. |
- */ |
- private void begin() { |
- assert guard.assertProgress(); |
- ctx.begin(); |
- } |
-} |