[FE 1.0] Report a more precise diagnostic when parameter modifiers (vararg) are changed in actualization
^KT-62747 Fixed
This commit is contained in:
+6
@@ -448,6 +448,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
|
|||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeSetterVisibilityInOverride.kt");
|
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeSetterVisibilityInOverride.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("changeVarargModifierInOverride.kt")
|
||||||
|
public void testChangeVarargModifierInOverride() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("changeVisibilityInOverride.kt")
|
@TestMetadata("changeVisibilityInOverride.kt")
|
||||||
public void testChangeVisibilityInOverride() throws Exception {
|
public void testChangeVisibilityInOverride() throws Exception {
|
||||||
|
|||||||
+6
@@ -448,6 +448,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
|
|||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeSetterVisibilityInOverride.kt");
|
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeSetterVisibilityInOverride.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("changeVarargModifierInOverride.kt")
|
||||||
|
public void testChangeVarargModifierInOverride() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("changeVisibilityInOverride.kt")
|
@TestMetadata("changeVisibilityInOverride.kt")
|
||||||
public void testChangeVisibilityInOverride() throws Exception {
|
public void testChangeVisibilityInOverride() throws Exception {
|
||||||
|
|||||||
@@ -856,6 +856,8 @@ public interface Errors {
|
|||||||
PROPERTY_KIND_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, VAL_OR_VAR_NODE);
|
PROPERTY_KIND_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, VAL_OR_VAR_NODE);
|
||||||
DiagnosticFactory1<KtCallableDeclaration, K1ExpectActualMemberDiff<CallableMemberDescriptor, ClassDescriptor>>
|
DiagnosticFactory1<KtCallableDeclaration, K1ExpectActualMemberDiff<CallableMemberDescriptor, ClassDescriptor>>
|
||||||
LATEINIT_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, LATEINIT_MODIFIER);
|
LATEINIT_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, LATEINIT_MODIFIER);
|
||||||
|
DiagnosticFactory1<KtCallableDeclaration, K1ExpectActualMemberDiff<CallableMemberDescriptor, ClassDescriptor>>
|
||||||
|
VARARG_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, LATEINIT_MODIFIER);
|
||||||
DiagnosticFactory1<KtCallableDeclaration, K1ExpectActualMemberDiff<CallableMemberDescriptor, ClassDescriptor>>
|
DiagnosticFactory1<KtCallableDeclaration, K1ExpectActualMemberDiff<CallableMemberDescriptor, ClassDescriptor>>
|
||||||
TYPE_PARAMETER_NAMES_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, TYPE_PARAMETERS_OR_DECLARATION_SIGNATURE);
|
TYPE_PARAMETER_NAMES_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING = DiagnosticFactory1.create(WARNING, TYPE_PARAMETERS_OR_DECLARATION_SIGNATURE);
|
||||||
|
|
||||||
|
|||||||
+3
@@ -424,6 +424,9 @@ public class DefaultErrorMessages {
|
|||||||
MAP.put(LATEINIT_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING,
|
MAP.put(LATEINIT_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING,
|
||||||
"{0}. This warning will become an error in future releases. Also see https://youtrack.jetbrains.com/issue/KT-22841 for more details",
|
"{0}. This warning will become an error in future releases. Also see https://youtrack.jetbrains.com/issue/KT-22841 for more details",
|
||||||
ExpectActualScopeDiffRenderer.INSTANCE);
|
ExpectActualScopeDiffRenderer.INSTANCE);
|
||||||
|
MAP.put(VARARG_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING,
|
||||||
|
"{0}. This warning will become an error in future releases. Also see https://youtrack.jetbrains.com/issue/KT-22841 for more details",
|
||||||
|
ExpectActualScopeDiffRenderer.INSTANCE);
|
||||||
MAP.put(SETTER_VISIBILITY_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING,
|
MAP.put(SETTER_VISIBILITY_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING,
|
||||||
"{0}. This warning will become an error in future releases. Also see https://youtrack.jetbrains.com/issue/KT-22841 for more details",
|
"{0}. This warning will become an error in future releases. Also see https://youtrack.jetbrains.com/issue/KT-22841 for more details",
|
||||||
ExpectActualScopeDiffRenderer.INSTANCE);
|
ExpectActualScopeDiffRenderer.INSTANCE);
|
||||||
|
|||||||
+2
@@ -223,6 +223,8 @@ private fun BindingTrace.reportIfPossible(diff: K1ExpectActualMemberDiff<Callabl
|
|||||||
Errors.PROPERTY_KIND_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
Errors.PROPERTY_KIND_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
||||||
K1ExpectActualMemberDiff.Kind.LateinitChangedInOverride ->
|
K1ExpectActualMemberDiff.Kind.LateinitChangedInOverride ->
|
||||||
Errors.LATEINIT_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
Errors.LATEINIT_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
||||||
|
K1ExpectActualMemberDiff.Kind.VarargChangedInOverride ->
|
||||||
|
Errors.VARARG_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
||||||
K1ExpectActualMemberDiff.Kind.TypeParameterNamesChangedInOverride ->
|
K1ExpectActualMemberDiff.Kind.TypeParameterNamesChangedInOverride ->
|
||||||
Errors.TYPE_PARAMETER_NAMES_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
Errors.TYPE_PARAMETER_NAMES_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING.on(psi, diff)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -45,6 +45,10 @@ data class K1ExpectActualMemberDiff<out M, out C>(val kind: Kind, val actualMemb
|
|||||||
"{0}: the property modifiers (lateinit) of this member must be the same in the expect class and the actual class. " +
|
"{0}: the property modifiers (lateinit) of this member must be the same in the expect class and the actual class. " +
|
||||||
"This error happens because the expect class ''{1}'' is non-final"
|
"This error happens because the expect class ''{1}'' is non-final"
|
||||||
),
|
),
|
||||||
|
VarargChangedInOverride(
|
||||||
|
"{0}: the parameter modifiers (vararg) of this member must be the same in the expect class and the actual class. " +
|
||||||
|
"This error happens because the expect class ''{1}'' is non-final"
|
||||||
|
),
|
||||||
TypeParameterNamesChangedInOverride(
|
TypeParameterNamesChangedInOverride(
|
||||||
"{0}: the type parameter names of this member must be the same in the expect class and the actual class. " +
|
"{0}: the type parameter names of this member must be the same in the expect class and the actual class. " +
|
||||||
"This error happens because the expect class ''{1}'' is non-final"
|
"This error happens because the expect class ''{1}'' is non-final"
|
||||||
@@ -82,6 +86,6 @@ fun K1ExpectActualCompatibility.Incompatible<*>.toMemberDiffKind(): K1ExpectActu
|
|||||||
K1ExpectActualCompatibility.Incompatible.TypeParameterVariance -> null // Members are not allowed to have variance
|
K1ExpectActualCompatibility.Incompatible.TypeParameterVariance -> null // Members are not allowed to have variance
|
||||||
K1ExpectActualCompatibility.Incompatible.ValueParameterCrossinline -> null // inline fun can't be overridden
|
K1ExpectActualCompatibility.Incompatible.ValueParameterCrossinline -> null // inline fun can't be overridden
|
||||||
K1ExpectActualCompatibility.Incompatible.ValueParameterNoinline -> null // inline fun can't be overridden
|
K1ExpectActualCompatibility.Incompatible.ValueParameterNoinline -> null // inline fun can't be overridden
|
||||||
K1ExpectActualCompatibility.Incompatible.ValueParameterVararg -> K1ExpectActualMemberDiff.Kind.NonPrivateCallableAdded
|
K1ExpectActualCompatibility.Incompatible.ValueParameterVararg -> K1ExpectActualMemberDiff.Kind.VarargChangedInOverride
|
||||||
K1ExpectActualCompatibility.Incompatible.Visibility -> K1ExpectActualMemberDiff.Kind.VisibilityChangedInOverride
|
K1ExpectActualCompatibility.Incompatible.Visibility -> K1ExpectActualMemberDiff.Kind.VisibilityChangedInOverride
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
// MODULE: m1-common
|
||||||
|
// FILE: common.kt
|
||||||
|
|
||||||
|
open class Base {
|
||||||
|
<!INCOMPATIBLE_MATCHING{JVM}!>open fun foo(vararg bar: Int) {}<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Foo : Base {
|
||||||
|
}<!>
|
||||||
|
|
||||||
|
// MODULE: m2-jvm()()(m1-common)
|
||||||
|
// FILE: jvm.kt
|
||||||
|
|
||||||
|
actual open class Foo : Base() {
|
||||||
|
override fun foo(bar: IntArray) {}
|
||||||
|
}
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
// MODULE: m1-common
|
||||||
|
// FILE: common.kt
|
||||||
|
|
||||||
|
open class Base {
|
||||||
|
open fun foo(vararg bar: Int) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect open class Foo : Base {
|
||||||
|
}
|
||||||
|
|
||||||
|
// MODULE: m2-jvm()()(m1-common)
|
||||||
|
// FILE: jvm.kt
|
||||||
|
|
||||||
|
actual open <!ACTUAL_CLASSIFIER_MUST_HAVE_THE_SAME_MEMBERS_AS_NON_FINAL_EXPECT_CLASSIFIER_WARNING!>class Foo<!> : Base() {
|
||||||
|
override fun <!VARARG_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION_WARNING!>foo<!>(bar: IntArray) {}
|
||||||
|
}
|
||||||
Generated
+6
@@ -23695,6 +23695,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeSetterVisibilityInOverride.kt");
|
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeSetterVisibilityInOverride.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("changeVarargModifierInOverride.kt")
|
||||||
|
public void testChangeVarargModifierInOverride() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeVarargModifierInOverride.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("changeVisibilityInOverride.kt")
|
@TestMetadata("changeVisibilityInOverride.kt")
|
||||||
public void testChangeVisibilityInOverride() throws Exception {
|
public void testChangeVisibilityInOverride() throws Exception {
|
||||||
|
|||||||
+5
-1
@@ -45,6 +45,10 @@ data class ExpectActualMemberDiff<out M, out C>(val kind: Kind, val actualMember
|
|||||||
"{0}: the property modifiers (lateinit) of this member must be the same in the expect class and the actual class. " +
|
"{0}: the property modifiers (lateinit) of this member must be the same in the expect class and the actual class. " +
|
||||||
"This error happens because the expect class ''{1}'' is non-final"
|
"This error happens because the expect class ''{1}'' is non-final"
|
||||||
),
|
),
|
||||||
|
VarargChangedInOverride(
|
||||||
|
"{0}: the parameter modifiers (vararg) of this member must be the same in the expect class and the actual class. " +
|
||||||
|
"This error happens because the expect class ''{1}'' is non-final"
|
||||||
|
),
|
||||||
TypeParameterNamesChangedInOverride(
|
TypeParameterNamesChangedInOverride(
|
||||||
"{0}: the type parameter names of this member must be the same in the expect class and the actual class. " +
|
"{0}: the type parameter names of this member must be the same in the expect class and the actual class. " +
|
||||||
"This error happens because the expect class ''{1}'' is non-final"
|
"This error happens because the expect class ''{1}'' is non-final"
|
||||||
@@ -82,6 +86,6 @@ fun ExpectActualCompatibility.Incompatible<*>.toMemberDiffKind(): ExpectActualMe
|
|||||||
ExpectActualCompatibility.Incompatible.TypeParameterVariance -> null // Members are not allowed to have variance
|
ExpectActualCompatibility.Incompatible.TypeParameterVariance -> null // Members are not allowed to have variance
|
||||||
ExpectActualCompatibility.Incompatible.ValueParameterCrossinline -> null // inline fun can't be overridden
|
ExpectActualCompatibility.Incompatible.ValueParameterCrossinline -> null // inline fun can't be overridden
|
||||||
ExpectActualCompatibility.Incompatible.ValueParameterNoinline -> null // inline fun can't be overridden
|
ExpectActualCompatibility.Incompatible.ValueParameterNoinline -> null // inline fun can't be overridden
|
||||||
ExpectActualCompatibility.Incompatible.ValueParameterVararg -> ExpectActualMemberDiff.Kind.NonPrivateCallableAdded
|
ExpectActualCompatibility.Incompatible.ValueParameterVararg -> ExpectActualMemberDiff.Kind.VarargChangedInOverride
|
||||||
ExpectActualCompatibility.Incompatible.Visibility -> ExpectActualMemberDiff.Kind.VisibilityChangedInOverride
|
ExpectActualCompatibility.Incompatible.Visibility -> ExpectActualMemberDiff.Kind.VisibilityChangedInOverride
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user