From a960d2d78508c5977b10d035469137eae421ece1 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 16 Feb 2015 22:00:14 +0300 Subject: [PATCH] Fix "No descriptor for enum entry" exception EA-52557, EA-64887 --- .../binding/CodegenAnnotatingVisitor.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java index 4f0990a4c57..2881660f6b7 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java @@ -33,7 +33,6 @@ import org.jetbrains.kotlin.codegen.when.SwitchCodegenUtil; import org.jetbrains.kotlin.codegen.when.WhenByEnumsMapping; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl; -import org.jetbrains.kotlin.load.java.JvmAbi; import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.name.Name; @@ -191,19 +190,19 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { @Override public void visitEnumEntry(@NotNull JetEnumEntry enumEntry) { - ClassDescriptor descriptor = bindingContext.get(CLASS, enumEntry); - assert descriptor != null : - String.format("No descriptor for enum entry \n---\n%s\n---\n", JetPsiUtil.getElementTextWithContext(enumEntry)); - if (enumEntry.getDeclarations().isEmpty()) { for (JetDelegationSpecifier specifier : enumEntry.getDelegationSpecifiers()) { specifier.accept(this); } + return; } - else { - bindingTrace.record(ENUM_ENTRY_CLASS_NEED_SUBCLASS, descriptor); - super.visitEnumEntry(enumEntry); - } + + ClassDescriptor descriptor = bindingContext.get(CLASS, enumEntry); + // working around a problem with shallow analysis + if (descriptor == null) return; + + bindingTrace.record(ENUM_ENTRY_CLASS_NEED_SUBCLASS, descriptor); + super.visitEnumEntry(enumEntry); } @Override