mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-125378 SQL: Implement keyword-based operators completion
This commit is contained in:
@@ -112,9 +112,9 @@ public class GeneratedParserUtilBase {
|
||||
return TokenSet.create(tokenTypes_);
|
||||
}
|
||||
|
||||
public static boolean consumeTokens(PsiBuilder builder_, int pin_, IElementType... tokens_) {
|
||||
private static boolean consumeTokens(PsiBuilder builder_, boolean smart, int pin_, IElementType... tokens_) {
|
||||
ErrorState state = ErrorState.get(builder_);
|
||||
if (state.completionState != null && state.predicateSign) {
|
||||
if (state.completionState != null && state.predicateCount == 0) {
|
||||
addCompletionVariant(builder_, state.completionState, tokens_);
|
||||
}
|
||||
// suppress single token completion
|
||||
@@ -124,7 +124,7 @@ public class GeneratedParserUtilBase {
|
||||
boolean pinned_ = false;
|
||||
for (int i = 0, tokensLength = tokens_.length; i < tokensLength; i++) {
|
||||
if (pin_ > 0 && i == pin_) pinned_ = result_;
|
||||
if ((result_ || pinned_) && !consumeToken(builder_, tokens_[i])) {
|
||||
if ((result_ || pinned_) && !consumeInner(builder_, smart, i, tokens_)) {
|
||||
result_ = false;
|
||||
if (pin_ < 0 || pinned_) report_error_(builder_, state, false);
|
||||
}
|
||||
@@ -133,6 +133,19 @@ public class GeneratedParserUtilBase {
|
||||
return pinned_ || result_;
|
||||
}
|
||||
|
||||
private static boolean consumeInner(PsiBuilder builder_, boolean smart, int i, IElementType[] tokens_) {
|
||||
if (smart) return i == 0 ? consumeTokenFast(builder_, tokens_[i]) : consumeToken(builder_, tokens_[i]);
|
||||
return consumeToken(builder_, tokens_[i]);
|
||||
}
|
||||
|
||||
public static boolean consumeTokens(PsiBuilder builder_, int pin_, IElementType... tokens_) {
|
||||
return consumeTokens(builder_, false, pin_, tokens_);
|
||||
}
|
||||
|
||||
public static boolean consumeTokensSmart(PsiBuilder builder_, int pin_, IElementType... tokens_) {
|
||||
return consumeTokens(builder_, true, pin_, tokens_);
|
||||
}
|
||||
|
||||
public static boolean parseTokens(PsiBuilder builder_, int pin_, IElementType... tokens_) {
|
||||
PsiBuilder.Marker marker_ = builder_.mark();
|
||||
boolean result_ = consumeTokens(builder_, pin_, tokens_);
|
||||
@@ -145,6 +158,20 @@ public class GeneratedParserUtilBase {
|
||||
return result_;
|
||||
}
|
||||
|
||||
public static boolean consumeTokenSmart(PsiBuilder builder_, IElementType token) {
|
||||
builder_.eof(); // skip whitespaces
|
||||
ErrorState state = ErrorState.get(builder_);
|
||||
CompletionState completionState = state.completionState;
|
||||
if (completionState != null && state.predicateCount == 0) {
|
||||
addCompletionVariant(builder_, completionState, token);
|
||||
}
|
||||
return consumeTokenFast(builder_, token);
|
||||
}
|
||||
|
||||
public static boolean consumeTokenSmart(PsiBuilder builder_, String token) {
|
||||
return consumeTokenFast(builder_, token);
|
||||
}
|
||||
|
||||
public static boolean consumeToken(PsiBuilder builder_, IElementType token) {
|
||||
if (nextTokenIsInner(builder_, token, true)) {
|
||||
builder_.advanceLexer();
|
||||
|
||||
Reference in New Issue
Block a user