diff --git a/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilder.java b/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilder.java index 741ade36ccf1..9a7d826f720a 100644 --- a/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilder.java +++ b/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,31 +15,30 @@ */ package com.intellij.lang.pratt; +import com.intellij.lang.ITokenTypeRemapper; import com.intellij.lexer.Lexer; import com.intellij.psi.tree.IElementType; -import com.intellij.lang.ITokenTypeRemapper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.LinkedList; +import java.util.List; import java.util.ListIterator; /** * @author peter */ public abstract class PrattBuilder { - public abstract Lexer getLexer(); public abstract void setTokenTypeRemapper(@Nullable ITokenTypeRemapper remapper); public abstract MutableMarker mark(); - public PrattBuilderFacade createChildBuilder(int priority, @Nullable String expectedMessage) { + public PrattBuilder createChildBuilder(int priority, @Nullable String expectedMessage) { return createChildBuilder(priority).expecting(expectedMessage); } - public PrattBuilderFacade createChildBuilder(int priority) { + public PrattBuilder createChildBuilder(int priority) { return createChildBuilder().withLowestPriority(priority); } @@ -48,7 +47,7 @@ public abstract class PrattBuilder { return createChildBuilder(priority, expectedMessage).parse(); } - protected abstract PrattBuilderFacade createChildBuilder(); + protected abstract PrattBuilder createChildBuilder(); public boolean assertToken(final PrattTokenType type) { if (checkToken(type)) { @@ -95,15 +94,22 @@ public abstract class PrattBuilder { public abstract void reduce(@NotNull IElementType type); public ListIterator getBackResultIterator() { - final LinkedList resultTypes = getResultTypes(); + final List resultTypes = getResultTypes(); return resultTypes.listIterator(resultTypes.size()); } - public abstract LinkedList getResultTypes(); + public abstract List getResultTypes(); public abstract PrattBuilder getParent(); public abstract int getPriority(); public abstract int getCurrentOffset(); + + public abstract PrattBuilder expecting(@Nullable String expectedMessage); + + public abstract PrattBuilder withLowestPriority(int priority); + + @Nullable + public abstract IElementType parse(); } diff --git a/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderFacade.java b/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderFacade.java deleted file mode 100644 index 0a753e9a4d30..000000000000 --- a/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderFacade.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.lang.pratt; - -import com.intellij.psi.tree.IElementType; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.NotNull; - -import java.util.LinkedList; - -/** - * @author peter - */ -public interface PrattBuilderFacade { - PrattBuilderFacade expecting(@Nullable String expectedMessage); - - PrattBuilderFacade withLowestPriority(int priority); - - @Nullable - IElementType parse(); - - @NotNull - LinkedList getResultTypes(); - -} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderImpl.java b/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderImpl.java index 387556161f61..13235e2d2895 100644 --- a/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderImpl.java +++ b/platform/lang-impl/src/com/intellij/lang/pratt/PrattBuilderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,9 @@ */ package com.intellij.lang.pratt; +import com.intellij.lang.ITokenTypeRemapper; import com.intellij.lang.LangBundle; import com.intellij.lang.PsiBuilder; -import com.intellij.lang.ITokenTypeRemapper; import com.intellij.lang.impl.PsiBuilderImpl; import com.intellij.lexer.Lexer; import com.intellij.openapi.util.Trinity; @@ -26,11 +26,12 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.LinkedList; +import java.util.List; /** * @author peter */ -public class PrattBuilderImpl extends PrattBuilder implements PrattBuilderFacade { +public class PrattBuilderImpl extends PrattBuilder { private final PrattBuilder myParentBuilder; private final PsiBuilder myBuilder; private final LinkedList myLeftSiblings = new LinkedList(); @@ -44,16 +45,16 @@ public class PrattBuilderImpl extends PrattBuilder implements PrattBuilderFacade myParentBuilder = parent; } - public static PrattBuilderImpl createBuilder(final PsiBuilder builder) { + public static PrattBuilder createBuilder(final PsiBuilder builder) { return new PrattBuilderImpl(builder, null); } - public PrattBuilderFacade expecting(final String expectedMessage) { + public PrattBuilder expecting(final String expectedMessage) { myExpectedMessage = expectedMessage; return this; } - public PrattBuilderFacade withLowestPriority(final int priority) { + public PrattBuilder withLowestPriority(final int priority) { myPriority = priority; return this; } @@ -76,7 +77,7 @@ public class PrattBuilderImpl extends PrattBuilder implements PrattBuilderFacade return myLeftSiblings.size() != 1 ? null : myLeftSiblings.getLast(); } - protected PrattBuilderFacade createChildBuilder() { + protected PrattBuilder createChildBuilder() { assert myParsingStarted; return new PrattBuilderImpl(myBuilder, this) { protected void doParse() { @@ -150,7 +151,7 @@ public class PrattBuilderImpl extends PrattBuilder implements PrattBuilderFacade } @NotNull - public LinkedList getResultTypes() { + public List getResultTypes() { checkParsed(); return myLeftSiblings; } diff --git a/platform/lang-impl/src/com/intellij/lang/pratt/PrattParser.java b/platform/lang-impl/src/com/intellij/lang/pratt/PrattParser.java index f826bfa9e280..29b9e3d467b4 100644 --- a/platform/lang-impl/src/com/intellij/lang/pratt/PrattParser.java +++ b/platform/lang-impl/src/com/intellij/lang/pratt/PrattParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,16 +27,14 @@ import org.jetbrains.annotations.NotNull; public abstract class PrattParser implements PsiParser { @NotNull public final ASTNode parse(final IElementType root, final PsiBuilder builder) { - //builder.setDebugMode(true); - - final PrattBuilderImpl prattBuilder = PrattBuilderImpl.createBuilder(builder); + final PrattBuilder prattBuilder = PrattBuilderImpl.createBuilder(builder); final MutableMarker marker = prattBuilder.mark(); parse(prattBuilder); marker.finish(root); return builder.getTreeBuilt(); } - protected void parse(final PrattBuilderImpl builder) { + protected void parse(final PrattBuilder builder) { builder.parse(); while (!builder.isEof()) builder.advance(); } diff --git a/platform/lang-impl/src/com/intellij/lang/pratt/PrattRegistry.java b/platform/lang-impl/src/com/intellij/lang/pratt/PrattRegistry.java index 39f057fca22c..0cc3d60b4e8f 100644 --- a/platform/lang-impl/src/com/intellij/lang/pratt/PrattRegistry.java +++ b/platform/lang-impl/src/com/intellij/lang/pratt/PrattRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,9 +18,10 @@ package com.intellij.lang.pratt; import com.intellij.openapi.util.Trinity; import com.intellij.psi.tree.IElementType; import com.intellij.util.containers.MultiMap; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; -import java.util.Collections; /** * @author peter @@ -28,17 +29,16 @@ import java.util.Collections; public class PrattRegistry { private static final MultiMap> ourMap = new MultiMap>(); - public static void registerParser(IElementType type, int priority, TokenParser parser) { + public static void registerParser(@NotNull final IElementType type, final int priority, final TokenParser parser) { registerParser(type, priority, PathPattern.path(), parser); } - public static void registerParser(final IElementType type, final int priority, final PathPattern pattern, final TokenParser parser) { + public static void registerParser(@NotNull final IElementType type, final int priority, final PathPattern pattern, final TokenParser parser) { ourMap.putValue(type, new Trinity(priority, pattern, parser)); } - public static Collection> getParsers(IElementType type) { - final Collection> trinities = ourMap.get(type); - return trinities == null ? Collections.>emptyList() : trinities; + @NotNull + public static Collection> getParsers(@Nullable final IElementType type) { + return ourMap.get(type); } - }