diff --git a/src/main/java/io/openliberty/tools/intellij/lsp4jakarta/lsp4ij/annotations/AnnotationDiagnosticsCollector.java b/src/main/java/io/openliberty/tools/intellij/lsp4jakarta/lsp4ij/annotations/AnnotationDiagnosticsCollector.java index addd3d825..4128267bf 100644 --- a/src/main/java/io/openliberty/tools/intellij/lsp4jakarta/lsp4ij/annotations/AnnotationDiagnosticsCollector.java +++ b/src/main/java/io/openliberty/tools/intellij/lsp4jakarta/lsp4ij/annotations/AnnotationDiagnosticsCollector.java @@ -46,6 +46,13 @@ */ public class AnnotationDiagnosticsCollector extends AbstractDiagnosticsCollector { + private static final String[] VALID_ANNOTATIONS = { AnnotationConstants.GENERATED_FQ_NAME }; + private static final String[] VALID_TYPE_ANNOTATIONS = { AnnotationConstants.GENERATED_FQ_NAME, + AnnotationConstants.RESOURCE_FQ_NAME }; + private static final String[] VALID_METHOD_ANNOTATIONS = { AnnotationConstants.GENERATED_FQ_NAME, + AnnotationConstants.POST_CONSTRUCT_FQ_NAME, AnnotationConstants.PRE_DESTROY_FQ_NAME, + AnnotationConstants.RESOURCE_FQ_NAME }; + public AnnotationDiagnosticsCollector() { super(); } @@ -59,57 +66,31 @@ protected String getDiagnosticSource() { public void collectDiagnostics(PsiJavaFile unit, List diagnostics) { if (unit != null) { ArrayList> annotatables = new ArrayList>(); - String[] validAnnotations = { AnnotationConstants.GENERATED_FQ_NAME }; - String[] validTypeAnnotations = { AnnotationConstants.GENERATED_FQ_NAME, - AnnotationConstants.RESOURCE_FQ_NAME }; - String[] validMethodAnnotations = { AnnotationConstants.GENERATED_FQ_NAME, - AnnotationConstants.POST_CONSTRUCT_FQ_NAME, AnnotationConstants.PRE_DESTROY_FQ_NAME, - AnnotationConstants.RESOURCE_FQ_NAME }; PsiPackage psiPackage = JavaPsiFacade.getInstance(unit.getProject()) .findPackage(unit.getPackageName()); if (psiPackage != null) { - PsiAnnotation[] pkgAnnotations = psiPackage.getAnnotations(); - for (PsiAnnotation annotation : pkgAnnotations) { - if (isValidAnnotation(annotation.getQualifiedName(), validAnnotations)) - annotatables.add(new Tuple.Two<>(annotation, psiPackage)); - } + processAnnotations(psiPackage, annotatables, VALID_ANNOTATIONS); } PsiClass[] types = unit.getClasses(); for (PsiClass type : types) { // Type - PsiAnnotation[] annotations = type.getAnnotations(); - for (PsiAnnotation annotation : annotations) { - if (isValidAnnotation(annotation.getQualifiedName(), validTypeAnnotations)) - annotatables.add(new Tuple.Two<>(annotation, type)); - } + processAnnotations(type, annotatables, VALID_TYPE_ANNOTATIONS); // Method PsiMethod[] methods = type.getMethods(); for (PsiMethod method : methods) { - annotations = method.getAnnotations(); - for (PsiAnnotation annotation : annotations) { - if (isValidAnnotation(annotation.getQualifiedName(), validMethodAnnotations)) - annotatables.add(new Tuple.Two<>(annotation, method)); - } + processAnnotations(method, annotatables, VALID_METHOD_ANNOTATIONS); // method parameters PsiParameter[] parameters = method.getParameterList().getParameters(); for (PsiParameter parameter : parameters) { - annotations = parameter.getAnnotations(); - for (PsiAnnotation annotation : annotations) { - if (isValidAnnotation(annotation.getQualifiedName(), validAnnotations)) - annotatables.add(new Tuple.Two<>(annotation, parameter)); - } + processAnnotations(parameter, annotatables, VALID_ANNOTATIONS); } } // Field PsiField[] fields = type.getFields(); for (PsiField field : fields) { - annotations = field.getAnnotations(); - for (PsiAnnotation annotation : annotations) { - if (isValidAnnotation(annotation.getQualifiedName(), validTypeAnnotations)) - annotatables.add(new Tuple.Two<>(annotation, field)); - } + processAnnotations(field, annotatables, VALID_TYPE_ANNOTATIONS); } } @@ -224,6 +205,16 @@ public void collectDiagnostics(PsiJavaFile unit, List diagnostics) { } } + private void processAnnotations(PsiJvmModifiersOwner psiModifierOwner, + ArrayList> annotatables, + String[] validAnnotations) { + PsiAnnotation[] annotations = psiModifierOwner.getAnnotations(); + for (PsiAnnotation annotation : annotations) { + if (isValidAnnotation(annotation.getQualifiedName(), validAnnotations)) + annotatables.add(new Tuple.Two<>(annotation, psiModifierOwner)); + } + } + private static boolean isValidAnnotation(String annotationName, String[] validAnnotations) { if (annotationName != null) { for (String fqName : validAnnotations) {