From d3280252f9d858fa6fbea0899d6ad3ec5c86d7be Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 7 Aug 2018 14:32:44 +0300 Subject: [PATCH] Prohibit inline data classes `CONFLICTING_JVM_DECLARATIONS` diagnostics are reported because we're trying to generate functions from `Any` once for inline class and once for data class #KT-25760 Fixed --- .../org/jetbrains/kotlin/resolve/ModifiersChecker.kt | 3 ++- .../tests/inlineClasses/inlineClassDeclarationCheck.kt | 2 ++ .../inlineClasses/inlineClassDeclarationCheck.txt | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index 325933dedb2..8dd82d28a15 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -183,11 +183,12 @@ object ModifierCheckerCore { result += incompatibilityRegister(PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD) // Abstract + open + final + sealed: incompatible result += incompatibilityRegister(ABSTRACT_KEYWORD, OPEN_KEYWORD, FINAL_KEYWORD, SEALED_KEYWORD) - // data + open, data + inner, data + abstract, data + sealed + // data + open, data + inner, data + abstract, data + sealed, data + inline result += incompatibilityRegister(DATA_KEYWORD, OPEN_KEYWORD) result += incompatibilityRegister(DATA_KEYWORD, INNER_KEYWORD) result += incompatibilityRegister(DATA_KEYWORD, ABSTRACT_KEYWORD) result += incompatibilityRegister(DATA_KEYWORD, SEALED_KEYWORD) + result += incompatibilityRegister(DATA_KEYWORD, INLINE_KEYWORD) // open is redundant to abstract & override result += redundantRegister(ABSTRACT_KEYWORD, OPEN_KEYWORD) // abstract is redundant to sealed diff --git a/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.kt b/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.kt index 4af85c4f712..492c52e6a14 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.kt @@ -29,3 +29,5 @@ final inline class D0(val x: Int) open inline class D1(val x: Int) abstract inline class D2(val x: Int) sealed inline class D3(val x: Int) + +inline data class D4(val x: String) diff --git a/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.txt b/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.txt index c73c7d6c88b..1ff6b483611 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.txt +++ b/compiler/testData/diagnostics/tests/inlineClasses/inlineClassDeclarationCheck.txt @@ -154,3 +154,13 @@ public sealed inline class D3 { public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String } + +public final data inline class D4 { + public constructor D4(/*0*/ x: kotlin.String) + public final val x: kotlin.String + public final operator /*synthesized*/ fun component1(): kotlin.String + public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): D4 + public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String +}