From 6bbc8ea95106e24fec86190009e70aaef4f2d95b Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 6 Jun 2014 12:07:32 +0400 Subject: [PATCH] Fix reporting errors on properties declared in constructors --- .../jetbrains/jet/asJava/duplicateJvmSignatureUtil.kt | 9 +++++++++ .../functionAndProperty/classPropertyInConstructor.kt | 3 +++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 3 files changed, 17 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/classPropertyInConstructor.kt diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/duplicateJvmSignatureUtil.kt b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/duplicateJvmSignatureUtil.kt index d83510f5cbd..55600ff8282 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/duplicateJvmSignatureUtil.kt +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/duplicateJvmSignatureUtil.kt @@ -29,6 +29,8 @@ import org.jetbrains.jet.lang.resolve.java.diagnostics.ConflictingJvmDeclaration import org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOriginKind.* import org.jetbrains.jet.lang.diagnostics.Errors.* import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory.* +import org.jetbrains.jet.lang.psi.JetParameter +import org.jetbrains.jet.lang.psi.JetClass public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics): Diagnostics? { fun doGetDiagnostics(): Diagnostics? { @@ -36,6 +38,13 @@ public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Dia if (element is JetPropertyAccessor) { parent = parent?.getParent() } + if (element is JetParameter && element.getValOrVarNode() != null) { + // property declared in constructor + val parentClass = parent?.getParent() as? JetClass + if (parentClass != null) { + return getDiagnosticsForNonLocalClass(parentClass) + } + } if (parent is JetFile) { if (element is JetClassOrObject) { diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/classPropertyInConstructor.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/classPropertyInConstructor.kt new file mode 100644 index 00000000000..363cc3b8728 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/classPropertyInConstructor.kt @@ -0,0 +1,3 @@ +class C(val x: Int) { + fun getX() = 1 +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index b67bcd0f543..175d17573ca 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2719,6 +2719,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/classObject.kt"); } + @TestMetadata("classPropertyInConstructor.kt") + public void testClassPropertyInConstructor() throws Exception { + doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/classPropertyInConstructor.kt"); + } + @TestMetadata("extensionFunctionAndNormalFunction.kt") public void testExtensionFunctionAndNormalFunction() throws Exception { doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/functionAndProperty/extensionFunctionAndNormalFunction.kt");