之后我想通了一个PsiElement已经包含像"FooTokenType.NAME, FooTokenType.TITLE or FooTokenType.END expected, got 'IntellijIdeaRulezzz'"
这样的通用错误描述我已经以非常实用的方式管理了自动完成:
public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet resultSet) {
PsiElement element = parameters.getPosition().getParent();
String genericErrorDescription = ((PsiErrorElementImpl) element).getErrorDescription();
errorDescription = errorDescription.substring(0, errorDescription.indexOf(" expected, got "));
errorDescription = errorDescription.replaceAll("FooTokenType\\.", "");
String[] suggestedTokens = errorDescription.split("(,)|(or)");
for (String suggestedToken : suggestedTokens) {
resultSet.addElement(LookupElementBuilder.create(suggestedToken));
}
}
这会导致预期的行为。我希望这有助于其他人,请让我知道是否有更好的解决方案。