Minor: Log and create attachment on AssertionError in KotlinSignature line markers
This commit is contained in:
+45
-14
@@ -20,17 +20,23 @@ import com.intellij.codeHighlighting.Pass;
|
|||||||
import com.intellij.codeInsight.daemon.GutterIconNavigationHandler;
|
import com.intellij.codeInsight.daemon.GutterIconNavigationHandler;
|
||||||
import com.intellij.codeInsight.daemon.LineMarkerInfo;
|
import com.intellij.codeInsight.daemon.LineMarkerInfo;
|
||||||
import com.intellij.codeInsight.daemon.LineMarkerProvider;
|
import com.intellij.codeInsight.daemon.LineMarkerProvider;
|
||||||
|
import com.intellij.diagnostic.AttachmentFactory;
|
||||||
|
import com.intellij.diagnostic.LogMessageEx;
|
||||||
import com.intellij.icons.AllIcons;
|
import com.intellij.icons.AllIcons;
|
||||||
import com.intellij.ide.DataManager;
|
import com.intellij.ide.DataManager;
|
||||||
import com.intellij.ide.util.PropertiesComponent;
|
import com.intellij.ide.util.PropertiesComponent;
|
||||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||||
|
import com.intellij.openapi.diagnostic.Attachment;
|
||||||
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
import com.intellij.openapi.module.ModuleUtilCore;
|
import com.intellij.openapi.module.ModuleUtilCore;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
|
import com.intellij.util.ExceptionUtil;
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.ui.UIUtil;
|
import com.intellij.util.ui.UIUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -53,6 +59,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
||||||
private static final String SHOW_MARKERS_PROPERTY = "kotlin.signature.markers.enabled";
|
private static final String SHOW_MARKERS_PROPERTY = "kotlin.signature.markers.enabled";
|
||||||
|
private static final Logger LOG = Logger.getInstance(KotlinSignatureInJavaMarkerProvider.class);
|
||||||
|
|
||||||
private static final GutterIconNavigationHandler<PsiModifierListOwner> NAVIGATION_HANDLER = new GutterIconNavigationHandler<PsiModifierListOwner>() {
|
private static final GutterIconNavigationHandler<PsiModifierListOwner> NAVIGATION_HANDLER = new GutterIconNavigationHandler<PsiModifierListOwner>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -90,26 +97,50 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (PsiElement element : elements) {
|
markElements(elements, result, firstElement.getContainingFile());
|
||||||
PsiModifierListOwner annotationOwner = KotlinSignatureUtil.getAnalyzableAnnotationOwner(element);
|
}
|
||||||
if (annotationOwner == null) {
|
|
||||||
continue;
|
private static void markElements(
|
||||||
|
@NotNull List<PsiElement> elements,
|
||||||
|
@NotNull Collection<LineMarkerInfo> result,
|
||||||
|
@NotNull PsiFile psiFile
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
for (PsiElement element : elements) {
|
||||||
|
markElement(element, result);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (AssertionError error) {
|
||||||
|
VirtualFile virtualFile = psiFile.getVirtualFile();
|
||||||
|
Attachment[] attachments = virtualFile != null
|
||||||
|
? new Attachment[] {AttachmentFactory.createAttachment(virtualFile)}
|
||||||
|
: new Attachment[] {};
|
||||||
|
LOG.error(LogMessageEx.createEvent(
|
||||||
|
"Exception while collecting KotlinSignature markers", ExceptionUtil.getThrowableText(error), attachments
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JavaResolveExtension resolveExtension = JavaResolveExtension.INSTANCE$;
|
private static void markElement(@NotNull PsiElement element, @NotNull Collection<LineMarkerInfo> result) {
|
||||||
BindingContext bindingContext = resolveExtension.getContext(project, annotationOwner);
|
Project project = element.getProject();
|
||||||
JavaDescriptorResolver javaDescriptorResolver = resolveExtension.getResolver(project, annotationOwner);
|
PsiModifierListOwner annotationOwner = KotlinSignatureUtil.getAnalyzableAnnotationOwner(element);
|
||||||
|
if (annotationOwner == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DeclarationDescriptor memberDescriptor = getDescriptorForMember(javaDescriptorResolver, annotationOwner);
|
JavaResolveExtension resolveExtension = JavaResolveExtension.INSTANCE$;
|
||||||
|
BindingContext bindingContext = resolveExtension.getContext(project, annotationOwner);
|
||||||
|
JavaDescriptorResolver javaDescriptorResolver = resolveExtension.getResolver(project, annotationOwner);
|
||||||
|
|
||||||
if (memberDescriptor == null) continue;
|
DeclarationDescriptor memberDescriptor = getDescriptorForMember(javaDescriptorResolver, annotationOwner);
|
||||||
|
|
||||||
List<String> errors = bindingContext.get(JavaBindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, memberDescriptor);
|
if (memberDescriptor == null) return;
|
||||||
boolean hasSignatureAnnotation = KotlinSignatureUtil.findKotlinSignatureAnnotation(annotationOwner) != null;
|
|
||||||
|
|
||||||
if (errors != null || hasSignatureAnnotation) {
|
List<String> errors = bindingContext.get(JavaBindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, memberDescriptor);
|
||||||
result.add(new MyLineMarkerInfo((PsiModifierListOwner) element, errors, hasSignatureAnnotation));
|
boolean hasSignatureAnnotation = KotlinSignatureUtil.findKotlinSignatureAnnotation(annotationOwner) != null;
|
||||||
}
|
|
||||||
|
if (errors != null || hasSignatureAnnotation) {
|
||||||
|
result.add(new MyLineMarkerInfo((PsiModifierListOwner) element, errors, hasSignatureAnnotation));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user