diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java index eee51bb64db..b8204f63196 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java @@ -120,7 +120,6 @@ public class PropertyCodegen { assert kind == OwnerKind.PACKAGE || kind == OwnerKind.IMPLEMENTATION || kind == OwnerKind.DEFAULT_IMPLS : "Generating property with a wrong kind (" + kind + "): " + descriptor; - assert declaration != null : "Declaration is null: " + descriptor + " (context=" + context + ")"; genBackingFieldAndAnnotations(declaration, descriptor, false); if (isAccessorNeeded(declaration, descriptor, getter)) { @@ -131,8 +130,10 @@ public class PropertyCodegen { } } - private void genBackingFieldAndAnnotations(@NotNull KtNamedDeclaration declaration, @NotNull PropertyDescriptor descriptor, boolean isParameter) { - boolean hasBackingField = hasBackingField(declaration, descriptor); + private void genBackingFieldAndAnnotations( + @Nullable KtNamedDeclaration declaration, @NotNull PropertyDescriptor descriptor, boolean isParameter + ) { + boolean hasBackingField = hasBackingField(descriptor); boolean hasDelegate = declaration instanceof KtProperty && ((KtProperty) declaration).hasDelegate(); AnnotationSplitter annotationSplitter = @@ -150,6 +151,7 @@ public class PropertyCodegen { if (isBackingFieldOwner) { Annotations fieldAnnotations = annotationSplitter.getAnnotationsForTarget(AnnotationUseSiteTarget.FIELD); Annotations delegateAnnotations = annotationSplitter.getAnnotationsForTarget(AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD); + assert declaration != null : "Declaration is null: " + descriptor + " (context=" + context + ")"; generateBackingField(declaration, descriptor, fieldAnnotations, delegateAnnotations); generateSyntheticMethodIfNeeded(descriptor, propertyAnnotations); } @@ -239,7 +241,7 @@ public class PropertyCodegen { mv.visitEnd(); } - private boolean hasBackingField(@NotNull KtNamedDeclaration p, @NotNull PropertyDescriptor descriptor) { + private boolean hasBackingField(@NotNull PropertyDescriptor descriptor) { return !isJvmInterface(descriptor.getContainingDeclaration()) && kind != OwnerKind.DEFAULT_IMPLS && !Boolean.FALSE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor)); diff --git a/compiler/testData/asJava/lightClasses/facades/MultiFile.java b/compiler/testData/asJava/lightClasses/facades/MultiFile.java new file mode 100644 index 00000000000..10fb647940d --- /dev/null +++ b/compiler/testData/asJava/lightClasses/facades/MultiFile.java @@ -0,0 +1,3 @@ +public final class MultiFile { + public static final int getFoo() { /* compiled code */ } +} diff --git a/compiler/testData/asJava/lightClasses/facades/MultiFile.kt b/compiler/testData/asJava/lightClasses/facades/MultiFile.kt new file mode 100644 index 00000000000..2267fe08d99 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/facades/MultiFile.kt @@ -0,0 +1,8 @@ +// test.MultiFile + +@file:JvmMultifileClass +@file:JvmName("MultiFile") + +package test + +val foo = 42 diff --git a/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java index e2036dc4f20..61caea12e2b 100644 --- a/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java @@ -88,6 +88,12 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT doTest(fileName); } + @TestMetadata("MultiFile.kt") + public void testMultiFile() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/facades/MultiFile.kt"); + doTest(fileName); + } + @TestMetadata("SingleFile.kt") public void testSingleFile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/facades/SingleFile.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java index eade9efd46a..5a653ca5959 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeCompiledLightClassTestGenerated.java @@ -76,6 +76,12 @@ public class IdeCompiledLightClassTestGenerated extends AbstractIdeCompiledLight KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses/facades"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } + @TestMetadata("MultiFile.kt") + public void testMultiFile() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/facades/MultiFile.kt"); + doTest(fileName); + } + @TestMetadata("SingleFile.kt") public void testSingleFile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/facades/SingleFile.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java index 99e82486754..2e0cff049a6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java @@ -61,6 +61,12 @@ public class IdeLightClassTestGenerated extends AbstractIdeLightClassTest { doTest(fileName); } + @TestMetadata("MultiFile.kt") + public void testMultiFile() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/facades/MultiFile.kt"); + doTest(fileName); + } + @TestMetadata("SingleFile.kt") public void testSingleFile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/facades/SingleFile.kt");