diff options
author | Tor Norbye <tnorbye@google.com> | 2013-06-14 07:28:55 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-06-14 07:28:55 -0700 |
commit | d9e4c285fa2c3c38c5b92cf30e77f27e243566a8 (patch) | |
tree | 354db2798801cc7730ba4a71ea9a151233309d3a /java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java | |
parent | 28d9ee094b1d352884aaf5b66b85b30335165c03 (diff) | |
download | idea-d9e4c285fa2c3c38c5b92cf30e77f27e243566a8.tar.gz |
Snapshot df6c5fa1206345df60a0c86fe8f67c5f7a6f478f from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: I1d62dfd281ca361774653165ce8da9fb93d51005
Diffstat (limited to 'java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java')
-rw-r--r-- | java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java b/java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java index f32bd37a11d9..57b01542ce5e 100644 --- a/java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java +++ b/java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java @@ -27,8 +27,9 @@ import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.tree.TokenSet; import com.intellij.psi.util.PsiUtilCore; -import com.intellij.spi.psi.SPIProviderElement; -import com.intellij.spi.psi.SPIProvidersElementList; +import com.intellij.spi.psi.SPIClassProviderReferenceElement; +import com.intellij.spi.psi.SPIClassProvidersElementList; +import com.intellij.spi.psi.SPIPackageOrClassReferenceElement; import com.intellij.spi.psi.SPIFile; import com.intellij.lang.spi.SPILanguage; import org.jetbrains.annotations.NotNull; @@ -94,10 +95,13 @@ public class SPIParserDefinition implements ParserDefinition { public PsiElement createElement(ASTNode node) { final IElementType elementType = node.getElementType(); if (elementType == SPIElementTypes.PROVIDERS_LIST) { - return new SPIProvidersElementList(node); + return new SPIClassProvidersElementList(node); } if (elementType == SPIElementTypes.PROVIDER) { - return new SPIProviderElement(node); + return new SPIClassProviderReferenceElement(node); + } + if (elementType == SPIElementTypes.PACK) { + return new SPIPackageOrClassReferenceElement(node); } return PsiUtilCore.NULL_PSI_ELEMENT; } @@ -111,12 +115,12 @@ public class SPIParserDefinition implements ParserDefinition { public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode left, ASTNode right) { return SpaceRequirements.MAY; } - + public static void parseProvider(PsiBuilder builder) { - if (builder.getTokenType() == JavaTokenType.IDENTIFIER) { + if (builder.getTokenType() == SPITokenType.IDENTIFIER) { final PsiBuilder.Marker prop = builder.mark(); - parseProviderChar(builder); + parseProviderChar(builder, builder.mark()); prop.done(SPIElementTypes.PROVIDER); } else { @@ -125,13 +129,17 @@ public class SPIParserDefinition implements ParserDefinition { } } - private static void parseProviderChar(final PsiBuilder builder) { - LOG.assertTrue(builder.getTokenType() == JavaTokenType.IDENTIFIER); + private static void parseProviderChar(final PsiBuilder builder, PsiBuilder.Marker pack) { builder.advanceLexer(); final IElementType tokenType = builder.getTokenType(); if (tokenType == JavaTokenType.DOT || tokenType == SPITokenType.DOLLAR) { + pack.done(SPIElementTypes.PACK); builder.advanceLexer(); - parseProviderChar(builder); + final IElementType initialTokenType = builder.getTokenType(); + if (initialTokenType == null) return; + parseProviderChar(builder, pack.precede()); + } else { + pack.drop(); } } } |