From 80e13d3f708e647658567e11d1abdebb203ca657 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 11 Feb 2015 10:48:36 +0300 Subject: [PATCH] Allow class initializer without primary constructor --- .../src/org/jetbrains/kotlin/resolve/BodyResolver.java | 2 +- .../classInitializersWithoutPrimary.kt | 4 ++++ .../classInitializersWithoutPrimary.txt | 8 ++++++++ .../kotlin/checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.kt create mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index 19b2f284e2d..0bea34a41af 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -364,7 +364,7 @@ public class BodyResolver { @NotNull ClassDescriptorWithResolutionScopes classDescriptor ) { JetScope scopeForInitializers = classDescriptor.getScopeForInitializerResolution(); - if (classDescriptor.getUnsubstitutedPrimaryConstructor() != null) { + if (!classDescriptor.getConstructors().isEmpty()) { expressionTypingServices.getType(scopeForInitializers, anonymousInitializer.getBody(), NO_EXPECTED_TYPE, c.getOuterDataFlowInfo(), trace); processModifiersOnInitializer(anonymousInitializer, scopeForInitializers); } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.kt new file mode 100644 index 00000000000..9a25b89fc60 --- /dev/null +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.kt @@ -0,0 +1,4 @@ +class A { + constructor() {} + init {} +} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.txt b/compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.txt new file mode 100644 index 00000000000..e26602fdb4d --- /dev/null +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.txt @@ -0,0 +1,8 @@ +package + +internal final class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 467a693d18a..21ed3380b49 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -10403,6 +10403,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("classInitializersWithoutPrimary.kt") + public void testClassInitializersWithoutPrimary() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/secondaryConstructors/classInitializersWithoutPrimary.kt"); + doTest(fileName); + } + @TestMetadata("constructorCallType.kt") public void testConstructorCallType() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/secondaryConstructors/constructorCallType.kt");