summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-06-14 07:28:55 -0700
committerTor Norbye <tnorbye@google.com>2013-06-14 07:28:55 -0700
commitd9e4c285fa2c3c38c5b92cf30e77f27e243566a8 (patch)
tree354db2798801cc7730ba4a71ea9a151233309d3a /java/java-impl/src/com/intellij/spi/parsing/SPIParserDefinition.java
parent28d9ee094b1d352884aaf5b66b85b30335165c03 (diff)
downloadidea-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.java28
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();
}
}
}