From 4c583c5a612b04342cbb4452fe72c1c8f4822bf6 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 17 Nov 2017 17:02:47 +0300 Subject: [PATCH] Catch InvalidModuleException from getModality() in icon provider Related to KT-20986 --- .../kotlin/idea/KotlinDescriptorIconProvider.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinDescriptorIconProvider.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinDescriptorIconProvider.java index 6b796ed4c79..d5c6898e852 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinDescriptorIconProvider.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinDescriptorIconProvider.java @@ -77,6 +77,15 @@ public final class KotlinDescriptorIconProvider { return null; } + private static Modality getModalitySafe(@NotNull MemberDescriptor descriptor) { + try { + return descriptor.getModality(); + } + catch (InvalidModuleException ex) { + return Modality.FINAL; + } + } + private static Icon getBaseIcon(@NotNull DeclarationDescriptor descriptor) { if (descriptor instanceof PackageFragmentDescriptor || descriptor instanceof PackageViewDescriptor) { return PlatformIcons.PACKAGE_ICON; @@ -84,13 +93,13 @@ public final class KotlinDescriptorIconProvider { if (descriptor instanceof FunctionDescriptor) { FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor; if (functionDescriptor.getExtensionReceiverParameter() != null) { - return Modality.ABSTRACT == functionDescriptor.getModality() + return Modality.ABSTRACT == getModalitySafe(functionDescriptor) ? KotlinIcons.ABSTRACT_EXTENSION_FUNCTION : KotlinIcons.EXTENSION_FUNCTION; } if (descriptor.getContainingDeclaration() instanceof ClassDescriptor) { - return Modality.ABSTRACT == functionDescriptor.getModality() + return Modality.ABSTRACT == getModalitySafe(functionDescriptor) ? PlatformIcons.ABSTRACT_METHOD_ICON : PlatformIcons.METHOD_ICON; } @@ -112,7 +121,7 @@ public final class KotlinDescriptorIconProvider { case OBJECT: return KotlinIcons.OBJECT; case CLASS: - return Modality.ABSTRACT == classDescriptor.getModality() ? + return Modality.ABSTRACT == getModalitySafe(classDescriptor) ? KotlinIcons.ABSTRACT_CLASS : KotlinIcons.CLASS; default: