From 835a0df13ac6e1bd97557197eb16cd9113b685c5 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 13 Feb 2015 16:09:10 +0300 Subject: [PATCH] Prohibit secondary constructors in traits --- .../org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.java | 7 ++++--- .../tests/secondaryConstructors/constructorInTrait.kt | 3 +++ .../tests/secondaryConstructors/constructorInTrait.txt | 7 +++++++ .../kotlin/checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.kt create mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.java index fa7671f850e..5747911e686 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyTopDownAnalyzer.java @@ -36,9 +36,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import static org.jetbrains.kotlin.diagnostics.Errors.MANY_DEFAULT_OBJECTS; -import static org.jetbrains.kotlin.diagnostics.Errors.SECONDARY_CONSTRUCTOR_IN_OBJECT; -import static org.jetbrains.kotlin.diagnostics.Errors.UNSUPPORTED; +import static org.jetbrains.kotlin.diagnostics.Errors.*; public class LazyTopDownAnalyzer { private BindingTrace trace; @@ -206,6 +204,9 @@ public class LazyTopDownAnalyzer { if (DescriptorUtils.isSingletonOrAnonymousObject(classDescriptor)) { trace.report(SECONDARY_CONSTRUCTOR_IN_OBJECT.on((JetSecondaryConstructor) jetDeclaration)); } + else if (classDescriptor.getKind() == ClassKind.TRAIT) { + trace.report(CONSTRUCTOR_IN_TRAIT.on(jetDeclaration)); + } } } } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.kt new file mode 100644 index 00000000000..ee001cd3ebd --- /dev/null +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.kt @@ -0,0 +1,3 @@ +trait A { + constructor() {} +} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.txt b/compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.txt new file mode 100644 index 00000000000..a7b766c263a --- /dev/null +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.txt @@ -0,0 +1,7 @@ +package + +internal trait 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 126edc8af46..e11d534275e 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -10421,6 +10421,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("constructorInTrait.kt") + public void testConstructorInTrait() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/secondaryConstructors/constructorInTrait.kt"); + doTest(fileName); + } + @TestMetadata("cyclicDelegationCalls.kt") public void testCyclicDelegationCalls() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/secondaryConstructors/cyclicDelegationCalls.kt");