Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Inspection for Lombok annotations incorrectly highlights 'var'
  • Loading branch information
Lekanich authored and mplushnikov committed Oct 20, 2018
1 parent 531d024 commit 0438da4
Showing 1 changed file with 29 additions and 14 deletions.
Expand Up @@ -39,35 +39,50 @@
public class ValProcessor extends AbstractProcessor { public class ValProcessor extends AbstractProcessor {


private static final String LOMBOK_VAL_FQN = "lombok.val"; private static final String LOMBOK_VAL_FQN = "lombok.val";
private static final String LOMBOK_VAL_SHORT_NAME = "val";
private static final String LOMBOK_VAR_FQN = "lombok.var"; private static final String LOMBOK_VAR_FQN = "lombok.var";
private static final String LOMBOK_VAR_EXPERIMENTAL_FQN = "lombok.experimental.var"; private static final String LOMBOK_VAR_EXPERIMENTAL_FQN = "lombok.experimental.var";
private static final String LOMBOK_VAR_SHORT_NAME = "var";


public ValProcessor() { public ValProcessor() {
super(PsiElement.class, val.class, lombok.experimental.var.class, lombok.var.class); super(PsiElement.class, val.class, lombok.experimental.var.class, lombok.var.class);
} }


public static boolean isVal(@NotNull PsiLocalVariable psiLocalVariable) { public static boolean isVal(@NotNull PsiLocalVariable psiLocalVariable) {
return psiLocalVariable.getInitializer() != null && isSameName(psiLocalVariable.getTypeElement().getText()); return psiLocalVariable.getInitializer() != null && isSameName(resolveQualifiedName(psiLocalVariable.getTypeElement()));
} }


public static boolean isValOrVar(@NotNull PsiLocalVariable psiLocalVariable) { public static boolean isValOrVar(@NotNull PsiLocalVariable psiLocalVariable) {
return psiLocalVariable.getInitializer() != null && isValOrVar(psiLocalVariable.getTypeElement().getText()); return psiLocalVariable.getInitializer() != null && isValOrVar(psiLocalVariable.getTypeElement());
} }


private static boolean isSameName(String className) { private static boolean isSameName(@Nullable String className) {
return LOMBOK_VAL_SHORT_NAME.equals(className) || LOMBOK_VAL_FQN.equals(className); return LOMBOK_VAL_FQN.equals(className);
} }


private static boolean isVar(String className) { private static boolean isVar(@Nullable String className) {
return LOMBOK_VAR_SHORT_NAME.equals(className) || LOMBOK_VAR_FQN.equals(className) || LOMBOK_VAR_EXPERIMENTAL_FQN.equals(className); return LOMBOK_VAR_FQN.equals(className) || LOMBOK_VAR_EXPERIMENTAL_FQN.equals(className);
} }


private static boolean isValOrVar(String className) { private static boolean isValOrVar(@Nullable PsiTypeElement typeElement) {
String className = resolveQualifiedName(typeElement);
return isSameName(className) || isVar(className); return isSameName(className) || isVar(className);
} }


@Nullable
private static String resolveQualifiedName(@Nullable PsiTypeElement typeElement)
{
if (typeElement == null) {
return null;
}

PsiJavaCodeReferenceElement reference = typeElement.getInnermostComponentReferenceElement();
if (reference == null)
{
return null;
}

return reference.getQualifiedName();
}

public boolean isEnabled(@NotNull Project project) { public boolean isEnabled(@NotNull Project project) {
return isEnabled(PropertiesComponent.getInstance(project)); return isEnabled(PropertiesComponent.getInstance(project));
} }
Expand All @@ -90,8 +105,8 @@ public Collection<LombokProblem> verifyAnnotation(@NotNull PsiAnnotation psiAnno
} }


public void verifyVariable(@NotNull final PsiLocalVariable psiLocalVariable, @NotNull final ProblemsHolder holder) { public void verifyVariable(@NotNull final PsiLocalVariable psiLocalVariable, @NotNull final ProblemsHolder holder) {
boolean isVal = isSameName(psiLocalVariable.getTypeElement().getText()); boolean isVal = isSameName(resolveQualifiedName(psiLocalVariable.getTypeElement()));
boolean isVar = isVar(psiLocalVariable.getTypeElement().getText()); boolean isVar = isVar(resolveQualifiedName(psiLocalVariable.getTypeElement()));
final String ann = isVal ? "val" : "var"; final String ann = isVal ? "val" : "var";
if (isVal || isVar) { if (isVal || isVar) {
final PsiExpression initializer = psiLocalVariable.getInitializer(); final PsiExpression initializer = psiLocalVariable.getInitializer();
Expand All @@ -112,8 +127,8 @@ public void verifyVariable(@NotNull final PsiLocalVariable psiLocalVariable, @No


public void verifyParameter(@NotNull final PsiParameter psiParameter, @NotNull final ProblemsHolder holder) { public void verifyParameter(@NotNull final PsiParameter psiParameter, @NotNull final ProblemsHolder holder) {
final PsiTypeElement typeElement = psiParameter.getTypeElement(); final PsiTypeElement typeElement = psiParameter.getTypeElement();
boolean isVal = null != typeElement && isSameName(typeElement.getText()); boolean isVal = null != typeElement && isSameName(resolveQualifiedName(typeElement));
boolean isVar = null != typeElement && isVar(typeElement.getText()); boolean isVar = null != typeElement && isVar(resolveQualifiedName(typeElement));
if (isVar || isVal) { if (isVar || isVal) {
PsiElement scope = psiParameter.getDeclarationScope(); PsiElement scope = psiParameter.getDeclarationScope();
boolean isForeachStatement = scope instanceof PsiForeachStatement; boolean isForeachStatement = scope instanceof PsiForeachStatement;
Expand All @@ -127,7 +142,7 @@ public void verifyParameter(@NotNull final PsiParameter psiParameter, @NotNull f
} }


private boolean isValOrVarForEach(@NotNull PsiParameter psiParameter) { private boolean isValOrVarForEach(@NotNull PsiParameter psiParameter) {
return psiParameter.getParent() instanceof PsiForeachStatement && isValOrVar(psiParameter.getTypeElement().getText()); return psiParameter.getParent() instanceof PsiForeachStatement && isValOrVar(psiParameter.getTypeElement());
} }


@Nullable @Nullable
Expand Down

0 comments on commit 0438da4

Please sign in to comment.