mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Support for AspectJ parser
This commit is contained in:
@@ -63,8 +63,8 @@ public class DeclarationParser {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiBuilder.Marker parseClassFromKeyword(final PsiBuilder builder, final PsiBuilder.Marker declaration,
|
||||
final boolean isAnnotation, final Context context) {
|
||||
public static PsiBuilder.Marker parseClassFromKeyword(final PsiBuilder builder, final PsiBuilder.Marker declaration,
|
||||
final boolean isAnnotation, final Context context) {
|
||||
final IElementType keywordTokenType = builder.getTokenType();
|
||||
assert ElementType.CLASS_KEYWORD_BIT_SET.contains(keywordTokenType) : keywordTokenType;
|
||||
builder.advanceLexer();
|
||||
@@ -364,13 +364,18 @@ public class DeclarationParser {
|
||||
|
||||
@NotNull
|
||||
private static Pair<PsiBuilder.Marker, Boolean> parseModifierList(final PsiBuilder builder) {
|
||||
return parseModifierList(builder, ElementType.MODIFIER_BIT_SET);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Pair<PsiBuilder.Marker, Boolean> parseModifierList(final PsiBuilder builder, final TokenSet modifiers) {
|
||||
final PsiBuilder.Marker modList = builder.mark();
|
||||
boolean isEmpty = true;
|
||||
|
||||
while (true) {
|
||||
final IElementType tokenType = builder.getTokenType();
|
||||
if (tokenType == null) break;
|
||||
if (ElementType.MODIFIER_BIT_SET.contains(tokenType)) {
|
||||
if (modifiers.contains(tokenType)) {
|
||||
builder.advanceLexer();
|
||||
isEmpty = false;
|
||||
}
|
||||
@@ -441,7 +446,7 @@ public class DeclarationParser {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static PsiBuilder.Marker parseParameterList(final PsiBuilder builder) {
|
||||
public static PsiBuilder.Marker parseParameterList(final PsiBuilder builder) {
|
||||
assert builder.getTokenType() == JavaTokenType.LPARENTH : builder.getTokenType();
|
||||
final PsiBuilder.Marker paramList = builder.mark();
|
||||
builder.advanceLexer();
|
||||
@@ -666,7 +671,7 @@ public class DeclarationParser {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static PsiBuilder.Marker parseAnnotation(final PsiBuilder builder) {
|
||||
public static PsiBuilder.Marker parseAnnotation(final PsiBuilder builder) {
|
||||
assert builder.getTokenType() == JavaTokenType.AT : builder.getTokenType();
|
||||
final PsiBuilder.Marker anno = builder.mark();
|
||||
builder.advanceLexer();
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.intellij.lang.java.parser;
|
||||
|
||||
import com.intellij.codeInsight.daemon.JavaErrorMessages;
|
||||
import com.intellij.lang.PsiBuilder;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.impl.source.tree.ElementType;
|
||||
import com.intellij.psi.impl.source.tree.JavaElementType;
|
||||
@@ -73,7 +74,7 @@ public class FileParser {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiBuilder.Marker parsePackageStatement(final PsiBuilder builder) {
|
||||
public static PsiBuilder.Marker parsePackageStatement(final PsiBuilder builder) {
|
||||
final PsiBuilder.Marker statement = builder.mark();
|
||||
|
||||
if (!expect(builder, JavaTokenType.PACKAGE_KEYWORD)) {
|
||||
@@ -99,13 +100,19 @@ public class FileParser {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static PsiBuilder.Marker parseImportList(final PsiBuilder builder) {
|
||||
private static Pair<PsiBuilder.Marker, Boolean> parseImportList(final PsiBuilder builder) {
|
||||
return parseImportList(builder, IMPORT_LIST_STOPPER_SET);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Pair<PsiBuilder.Marker, Boolean> parseImportList(final PsiBuilder builder, final TokenSet stoppers) {
|
||||
final PsiBuilder.Marker list = builder.mark();
|
||||
|
||||
if (builder.getTokenType() == JavaTokenType.IMPORT_KEYWORD) {
|
||||
final boolean isEmpty = builder.getTokenType() != JavaTokenType.IMPORT_KEYWORD;
|
||||
if (!isEmpty) {
|
||||
PsiBuilder.Marker invalidElements = null;
|
||||
while (!builder.eof()) {
|
||||
if (IMPORT_LIST_STOPPER_SET.contains(builder.getTokenType())) break;
|
||||
if (stoppers.contains(builder.getTokenType())) break;
|
||||
|
||||
final PsiBuilder.Marker statement = parseImportStatement(builder);
|
||||
if (statement != null) {
|
||||
@@ -128,7 +135,7 @@ public class FileParser {
|
||||
}
|
||||
|
||||
list.done(JavaElementType.IMPORT_LIST);
|
||||
return list;
|
||||
return Pair.create(list, isEmpty);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -97,30 +97,21 @@ public class JavaParserUtil {
|
||||
}
|
||||
|
||||
public static PsiBuilder braceMatchingBuilder(final PsiBuilder builder) {
|
||||
return new PsiBuilderAdapter(builder) {
|
||||
private int braceCount = 1;
|
||||
private int lastOffset = -1;
|
||||
final PsiBuilder.Marker pos = builder.mark();
|
||||
|
||||
@Override
|
||||
public IElementType getTokenType() {
|
||||
final IElementType tokenType = super.getTokenType();
|
||||
if (getCurrentOffset() != lastOffset) {
|
||||
if (tokenType == JavaTokenType.LBRACE) {
|
||||
braceCount++;
|
||||
}
|
||||
else if (tokenType == JavaTokenType.RBRACE) {
|
||||
braceCount--;
|
||||
}
|
||||
lastOffset = getCurrentOffset();
|
||||
}
|
||||
return (braceCount == 0 ? null : tokenType);
|
||||
}
|
||||
int braceCount = 1;
|
||||
while (!builder.eof()) {
|
||||
final IElementType tokenType = builder.getTokenType();
|
||||
if (tokenType == JavaTokenType.LBRACE) braceCount++;
|
||||
else if (tokenType == JavaTokenType.RBRACE) braceCount--;
|
||||
if (braceCount == 0) break;
|
||||
builder.advanceLexer();
|
||||
}
|
||||
final int stopAt = builder.getCurrentOffset();
|
||||
|
||||
@Override
|
||||
public boolean eof() {
|
||||
return braceCount == 0 || super.eof();
|
||||
}
|
||||
};
|
||||
pos.rollbackTo();
|
||||
|
||||
return stoppingBuilder(builder, stopAt);
|
||||
}
|
||||
|
||||
public static PsiBuilder stoppingBuilder(final PsiBuilder builder, final int stopAt) {
|
||||
|
||||
@@ -114,7 +114,7 @@ public class PsiBuilderUtil {
|
||||
*/
|
||||
public static void drop(final PsiBuilder.Marker... markers) {
|
||||
for (PsiBuilder.Marker marker : markers) {
|
||||
marker.drop();
|
||||
if (marker != null) marker.drop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user