From f06a79d5345a3f7cf7a7f8e7084729b2986b89d5 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 25 Sep 2015 11:34:44 +0300 Subject: [PATCH] KNPE fixed in data class checker together with some ID warnings #KT-9296 Fixed #EA-73584 Fixed --- .../kotlin/resolve/DataClassAnnotationChecker.kt | 6 +++--- .../tests/dataClasses/dataClassNoName.kt | 9 +++++++++ .../tests/dataClasses/dataClassNoName.txt | 15 +++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt create mode 100644 compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt index bc114b429e5..979a162523c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassAnnotationChecker.kt @@ -33,13 +33,13 @@ public class DataClassAnnotationChecker : DeclarationChecker { if (declaration !is JetClassOrObject) return if (KotlinBuiltIns.isData(descriptor)) { - if (descriptor.getUnsubstitutedPrimaryConstructor() == null && descriptor.getConstructors().isNotEmpty()) { - diagnosticHolder.report(Errors.PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS.on(declaration.getNameIdentifier())); + if (descriptor.unsubstitutedPrimaryConstructor == null && descriptor.constructors.isNotEmpty()) { + declaration.nameIdentifier?.let { diagnosticHolder.report(Errors.PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS.on(it)) } } val primaryConstructor = declaration.getPrimaryConstructor() val parameters = primaryConstructor?.valueParameters ?: emptyList() if (parameters.isEmpty()) { - diagnosticHolder.report(Errors.DATA_CLASS_WITHOUT_PARAMETERS.on(declaration.nameIdentifier!!)) + 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/dataClassNoName.kt b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt new file mode 100644 index 00000000000..463e44ee0c2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt @@ -0,0 +1,9 @@ +// See EA-73584 +data class { + +} + +// See KT-9296 +data interface { + +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.txt b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.txt new file mode 100644 index 00000000000..63169e5a31b --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.txt @@ -0,0 +1,15 @@ +package + +@kotlin.data() public final class { + public constructor () + public final /*synthesized*/ fun copy(): + 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 +} + +@kotlin.data() public interface { + 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 997356462f3..d0dfd4e0df1 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -3342,6 +3342,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("dataClassNoName.kt") + public void testDataClassNoName() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dataClasses/dataClassNoName.kt"); + doTest(fileName); + } + @TestMetadata("dataClassVarargParam.kt") public void testDataClassVarargParam() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/dataClasses/dataClassVarargParam.kt");