From 32c5f5f59da0597bc6e366cabe8d13f2cfab39fe Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Tue, 14 May 2013 12:21:14 +0400 Subject: [PATCH] EA-46019 - assert: PropertyCodegen.generatePropertyDelegateAccess: delegate type can be null when delegate expression is unresolved and back-end called from light class generation --- .../src/org/jetbrains/jet/codegen/PropertyCodegen.java | 6 +++++- idea/testData/javaFacade/ea46019.kt | 7 +++++++ .../jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 idea/testData/javaFacade/ea46019.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java index 7deeef9a3a0..10a7bee673e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -114,7 +115,10 @@ public class PropertyCodegen extends GenerationStateAware { modifiers |= ACC_VOLATILE; } JetType delegateType = bindingContext.get(BindingContext.EXPRESSION_TYPE, p.getDelegateExpression()); - assert delegateType != null : "Type of delegate should be recorded: " + p.getText(); + if (delegateType == null) { + // If delegate expression is unresolved reference + delegateType = ErrorUtils.createErrorType("Delegate type"); + } Type type = typeMapper.mapType(delegateType); return v.newField(p, modifiers, JvmAbi.getPropertyDelegateName(propertyDescriptor.getName()), type.getDescriptor(), null, null); diff --git a/idea/testData/javaFacade/ea46019.kt b/idea/testData/javaFacade/ea46019.kt new file mode 100644 index 00000000000..3ad65c81733 --- /dev/null +++ b/idea/testData/javaFacade/ea46019.kt @@ -0,0 +1,7 @@ +class SomeProp() { + fun get(t: Any, metadata: PropertyMetadataImpl) = 42 +} + +class Some() { + val renderer by SomeProp() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java b/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java index 19761039ba6..fbdae321873 100644 --- a/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/javaFacade/JetJavaFacadeTest.java @@ -87,6 +87,10 @@ public class JetJavaFacadeTest extends LightCodeInsightFixtureTestCase { doTestWrapClass(); } + public void testEa46019() { + doTestWrapClass(); + } + public void testEa38770() { myFixture.configureByFile(getTestName(true) + ".kt");