Final in interfaces: deprecation ---> error + relevant test fixes
This commit is contained in:
@@ -104,12 +104,13 @@ public object ModifierCheckerCore {
|
|||||||
ENUM_CLASS, ENUM_ENTRY, FILE),
|
ENUM_CLASS, ENUM_ENTRY, FILE),
|
||||||
PRIVATE_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
|
PRIVATE_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
|
||||||
INTERFACE, ENUM_CLASS, ENUM_ENTRY, FILE),
|
INTERFACE, ENUM_CLASS, ENUM_ENTRY, FILE),
|
||||||
COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE)
|
COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE),
|
||||||
|
FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
|
||||||
|
ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, FILE)
|
||||||
)
|
)
|
||||||
|
|
||||||
val deprecatedParentTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>(
|
val deprecatedParentTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>(
|
||||||
// Deprecated in M15
|
// Deprecated in M15
|
||||||
FINAL_KEYWORD to EnumSet.of(INTERFACE),
|
|
||||||
PROTECTED_KEYWORD to EnumSet.of(OBJECT)
|
PROTECTED_KEYWORD to EnumSet.of(OBJECT)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
//KT-2382
|
|
||||||
|
|
||||||
interface T {
|
|
||||||
final fun foo() = "OK"
|
|
||||||
}
|
|
||||||
|
|
||||||
class S : T { }
|
|
||||||
|
|
||||||
fun box(): String = S().foo()
|
|
||||||
+1
-1
@@ -2,7 +2,7 @@ package test
|
|||||||
|
|
||||||
interface InlineTrait {
|
interface InlineTrait {
|
||||||
|
|
||||||
inline final fun finalInline(s: () -> String): String {
|
fun finalInline(s: () -> String): String {
|
||||||
return s()
|
return s()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
interface T {
|
interface T {
|
||||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> fun component1(): Int = 42
|
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> fun component1(): Int = 42
|
||||||
}
|
}
|
||||||
|
|
||||||
<!DATA_CLASS_OVERRIDE_CONFLICT!>data<!> class A(val x: Int) : T
|
<!DATA_CLASS_OVERRIDE_CONFLICT!>data<!> class A(val x: Int) : T
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
package a
|
package a
|
||||||
|
|
||||||
interface T {
|
interface T {
|
||||||
<!FINAL_FUNCTION_WITH_NO_BODY, DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> fun foo()
|
<!FINAL_FUNCTION_WITH_NO_BODY, WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> fun foo()
|
||||||
<!FINAL_PROPERTY_IN_INTERFACE, DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val b : Int
|
<!FINAL_PROPERTY_IN_INTERFACE, WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val b : Int
|
||||||
|
|
||||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> fun bar() {}
|
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> fun bar() {}
|
||||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val c : Int
|
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val c : Int
|
||||||
get() = 42
|
get() = 42
|
||||||
|
|
||||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val d = <!PROPERTY_INITIALIZER_IN_INTERFACE!>1<!>
|
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val d = <!PROPERTY_INITIALIZER_IN_INTERFACE!>1<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ interface My {
|
|||||||
<!INCOMPATIBLE_MODIFIERS!>private<!> <!ABSTRACT_MODIFIER_IN_INTERFACE, INCOMPATIBLE_MODIFIERS!>abstract<!> val xx: Int
|
<!INCOMPATIBLE_MODIFIERS!>private<!> <!ABSTRACT_MODIFIER_IN_INTERFACE, INCOMPATIBLE_MODIFIERS!>abstract<!> val xx: Int
|
||||||
private val xxx: Int
|
private val xxx: Int
|
||||||
get() = 0
|
get() = 0
|
||||||
<!FINAL_PROPERTY_IN_INTERFACE, DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val y: Int
|
<!FINAL_PROPERTY_IN_INTERFACE, WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val y: Int
|
||||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val yy: Int
|
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val yy: Int
|
||||||
get() = 1
|
get() = 1
|
||||||
<!PRIVATE_FUNCTION_WITH_NO_BODY!>private<!> fun foo(): Int
|
<!PRIVATE_FUNCTION_WITH_NO_BODY!>private<!> fun foo(): Int
|
||||||
// ok
|
// ok
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
// KT-2228
|
|
||||||
|
|
||||||
package test
|
|
||||||
|
|
||||||
interface A {
|
|
||||||
final fun f(): String = "test"
|
|
||||||
}
|
|
||||||
-6
@@ -7804,12 +7804,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("finalMethod.kt")
|
|
||||||
public void testFinalMethod() throws Exception {
|
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/traits/finalMethod.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("genericMethod.kt")
|
@TestMetadata("genericMethod.kt")
|
||||||
public void testGenericMethod() throws Exception {
|
public void testGenericMethod() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/traits/genericMethod.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/traits/genericMethod.kt");
|
||||||
|
|||||||
@@ -2710,12 +2710,6 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
|||||||
doTestCompiledKotlin(fileName);
|
doTestCompiledKotlin(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("TraitFinalFun.kt")
|
|
||||||
public void testTraitFinalFun() throws Exception {
|
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitFinalFun.kt");
|
|
||||||
doTestCompiledKotlin(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("TraitOpenFun.kt")
|
@TestMetadata("TraitOpenFun.kt")
|
||||||
public void testTraitOpenFun() throws Exception {
|
public void testTraitOpenFun() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||||
|
|||||||
-6
@@ -799,12 +799,6 @@ public class LoadKotlinWithTypeTableTestGenerated extends AbstractLoadKotlinWith
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("TraitFinalFun.kt")
|
|
||||||
public void testTraitFinalFun() throws Exception {
|
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitFinalFun.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("TraitOpenFun.kt")
|
@TestMetadata("TraitOpenFun.kt")
|
||||||
public void testTraitOpenFun() throws Exception {
|
public void testTraitOpenFun() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||||
|
|||||||
-6
@@ -801,12 +801,6 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("TraitFinalFun.kt")
|
|
||||||
public void testTraitFinalFun() throws Exception {
|
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitFinalFun.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("TraitOpenFun.kt")
|
@TestMetadata("TraitOpenFun.kt")
|
||||||
public void testTraitOpenFun() throws Exception {
|
public void testTraitOpenFun() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||||
|
|||||||
-13
@@ -1,13 +0,0 @@
|
|||||||
// "class org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix" "false"
|
|
||||||
// ERROR: This type is final, so it cannot be inherited from
|
|
||||||
// ERROR: Cannot access '<init>': it is 'private' in 'E'
|
|
||||||
// ERROR: 'ordinal' in 'E' is final and cannot be overridden
|
|
||||||
enum class E {}
|
|
||||||
interface X {
|
|
||||||
final val ordinal : Int
|
|
||||||
get() = 42
|
|
||||||
}
|
|
||||||
|
|
||||||
class A : E(), X {
|
|
||||||
override<caret> val ordinal : Int = 24;
|
|
||||||
}
|
|
||||||
@@ -5229,12 +5229,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("overridingWritableAndNotWritableFinalMembers.kt")
|
|
||||||
public void testOverridingWritableAndNotWritableFinalMembers() throws Exception {
|
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/overridingWritableAndNotWritableFinalMembers.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("parameterNameChangedAmbiguousRename.kt")
|
@TestMetadata("parameterNameChangedAmbiguousRename.kt")
|
||||||
public void testParameterNameChangedAmbiguousRename() throws Exception {
|
public void testParameterNameChangedAmbiguousRename() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/parameterNameChangedAmbiguousRename.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/parameterNameChangedAmbiguousRename.kt");
|
||||||
|
|||||||
@@ -799,12 +799,6 @@ public class ResolveByStubTestGenerated extends AbstractResolveByStubTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("TraitFinalFun.kt")
|
|
||||||
public void testTraitFinalFun() throws Exception {
|
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitFinalFun.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("TraitOpenFun.kt")
|
@TestMetadata("TraitOpenFun.kt")
|
||||||
public void testTraitOpenFun() throws Exception {
|
public void testTraitOpenFun() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ package foo
|
|||||||
|
|
||||||
import test.*
|
import test.*
|
||||||
|
|
||||||
// CHECK_CONTAINS_NO_CALLS: testFinalInline
|
|
||||||
// CHECK_CONTAINS_NO_CALLS: testFinalInline2
|
|
||||||
// CHECK_CONTAINS_NO_CALLS: testClassObject
|
// CHECK_CONTAINS_NO_CALLS: testClassObject
|
||||||
|
|
||||||
internal fun testFinalInline(): String {
|
internal fun testFinalInline(): String {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package test
|
|||||||
|
|
||||||
internal interface InlineTrait {
|
internal interface InlineTrait {
|
||||||
|
|
||||||
public inline final fun finalInline(s: () -> String): String {
|
public fun finalInline(s: () -> String): String {
|
||||||
return s()
|
return s()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user