From 954003872d854f6084866486172116eaca8d332f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 13 Sep 2012 15:44:27 +0400 Subject: [PATCH] Do not generate erroneous classes in SIGNATURES mode Add an assertion that this never happens in other modes. (fixes EA-37034) --- .../src/org/jetbrains/jet/codegen/ClassCodegen.java | 10 ++++++++++ idea/testData/javaFacade/ea37034.kt | 5 +++++ .../jet/plugin/javaFacade/JetJavaFacadeTest.java | 4 ++++ 3 files changed, 19 insertions(+) create mode 100644 idea/testData/javaFacade/ea37034.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java index cf5a08ebaf2..b996608ca10 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java @@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.types.ErrorUtils; import java.util.Map; @@ -40,6 +41,15 @@ public class ClassCodegen extends GenerationStateAware { public void generate(CodegenContext context, JetClassOrObject aClass) { ClassDescriptor descriptor = state.getBindingContext().get(BindingContext.CLASS, aClass); + + if (descriptor == null || ErrorUtils.isError(descriptor) || descriptor.getName().equals(JetPsiUtil.NO_NAME_PROVIDED)) { + if (state.getClassBuilderMode() != ClassBuilderMode.SIGNATURES) { + throw new IllegalStateException( + "Generating bad descriptor in ClassBuilderMode = " + state.getClassBuilderMode() + ": " + descriptor); + } + return; + } + ClassBuilder classBuilder = state.getFactory().forClassImplementation(descriptor); final CodegenContext contextForInners = context.intoClass(descriptor, OwnerKind.IMPLEMENTATION, state); diff --git a/idea/testData/javaFacade/ea37034.kt b/idea/testData/javaFacade/ea37034.kt new file mode 100644 index 00000000000..793c0d13994 --- /dev/null +++ b/idea/testData/javaFacade/ea37034.kt @@ -0,0 +1,5 @@ +package beans + +class . + +open class A diff --git a/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java b/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java index 3e6f6a52891..8dc7bb4bcf5 100644 --- a/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java @@ -78,6 +78,10 @@ public class JetJavaFacadeTest extends LightCodeInsightFixtureTestCase { doTestWrapClass(); } + public void testEa37034() { + doTestWrapClass(); + } + public void testInnerClass() throws Exception { myFixture.configureByFile(getTestName(true) + ".kt");