From 2a39071b50713687c370f89216e5eb64ef4a30fa Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Fri, 7 Sep 2018 10:01:44 +0200 Subject: [PATCH] ignore exceptions during parsing due to compilation or type resolve problems --- .../annotations/AnnotationHierarchies.java | 28 +++++++++++-------- .../AnnotationHierarchyAwareLookup.java | 2 -- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchies.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchies.java index e08738be7..dec401162 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchies.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchies.java @@ -20,6 +20,7 @@ import java.util.stream.Stream; import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.IAnnotationBinding; import org.eclipse.jdt.core.dom.ITypeBinding; +import org.eclipse.jdt.internal.compiler.problem.AbortCompilation; import org.springframework.ide.vscode.commons.util.CollectorUtil; import com.google.common.collect.ImmutableList; @@ -34,28 +35,31 @@ import com.google.common.collect.ImmutableList; */ public abstract class AnnotationHierarchies { - private AnnotationHierarchies() { - } - protected static boolean ignoreAnnotation(String fqname) { return fqname.startsWith("java."); //mostly intended to capture java.lang.annotation.* types. But really it should be //safe to ignore any type defined by the JRE since it can't possibly be inheriting from a spring annotation. }; public static Collection getDirectSuperAnnotations(ITypeBinding typeBinding) { - IAnnotationBinding[] annotations = typeBinding.getAnnotations(); - if (annotations!=null && annotations.length!=0) { - ImmutableList.Builder superAnnotations = ImmutableList.builder(); - for (IAnnotationBinding ab : annotations) { - ITypeBinding sa = ab.getAnnotationType(); - if (sa!=null) { - if (!ignoreAnnotation(sa.getQualifiedName())) { - superAnnotations.add(sa); + try { + IAnnotationBinding[] annotations = typeBinding.getAnnotations(); + if (annotations != null && annotations.length != 0) { + ImmutableList.Builder superAnnotations = ImmutableList.builder(); + for (IAnnotationBinding ab : annotations) { + ITypeBinding sa = ab.getAnnotationType(); + if (sa != null) { + if (!ignoreAnnotation(sa.getQualifiedName())) { + superAnnotations.add(sa); + } } } + return superAnnotations.build(); } - return superAnnotations.build(); } + catch (AbortCompilation e) { + // ignore this, it is most likely caused by broken source code, a broken classpath, or some optional dependencies not being on the classpath + } + return ImmutableList.of(); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchyAwareLookup.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchyAwareLookup.java index 83e9843d5..3bc139a67 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchyAwareLookup.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationHierarchyAwareLookup.java @@ -33,8 +33,6 @@ import com.google.common.collect.ImmutableList; */ public class AnnotationHierarchyAwareLookup { - private static final boolean DEBUG = false; - private static class Binding { T value; boolean isOverriding;