From dd436744261fa382534914427f71d0846fd40407 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 13 Nov 2015 18:12:42 +0300 Subject: [PATCH] Data class must have at least one argument is reported on constructor parameter list now, if any #KT-9999 Fixed --- .../kotlin/resolve/DataClassAnnotationChecker.kt | 4 +++- .../diagnostics/tests/dataClasses/emptyConstructor.kt | 2 +- .../tests/secondaryConstructors/dataClasses.kt | 2 ++ .../tests/secondaryConstructors/dataClasses.txt | 8 ++++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt index 0e6183b7a6b..aedb3fdc2eb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt @@ -41,7 +41,9 @@ public class DataClassAnnotationChecker : DeclarationChecker { val primaryConstructor = declaration.getPrimaryConstructor() val parameters = primaryConstructor?.valueParameters ?: emptyList() if (parameters.isEmpty()) { - declaration.nameIdentifier?.let { diagnosticHolder.report(Errors.DATA_CLASS_WITHOUT_PARAMETERS.on(it)) } + (primaryConstructor?.valueParameterList ?: declaration.nameIdentifier)?.let { + diagnosticHolder.report(Errors.DATA_CLASS_WITHOUT_PARAMETERS.on(it)) + } } for (parameter in parameters) { if (parameter.isVarArg) { diff --git a/compiler/testData/diagnostics/tests/dataClasses/emptyConstructor.kt b/compiler/testData/diagnostics/tests/dataClasses/emptyConstructor.kt index 19d78815006..e19599657f7 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/emptyConstructor.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/emptyConstructor.kt @@ -1,4 +1,4 @@ -data class A() +data class A() fun foo(a: A) { a.component1() diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.kt index e15c8607ba5..0fd72e3965a 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.kt @@ -10,3 +10,5 @@ data class A2(val y: String, val z: Int) { data class A3 { constructor() } + +data class A4 internal constructor() diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.txt b/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.txt index ba29337c040..c5737d52ea5 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.txt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/dataClasses.txt @@ -30,3 +30,11 @@ public final data class A3 { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + +public final data class A4 { + internal constructor A4() + public final /*synthesized*/ fun copy(): A4 + 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 +}