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),
|
||||
PRIVATE_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, OBJECT, OBJECT_LITERAL,
|
||||
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>>(
|
||||
// Deprecated in M15
|
||||
FINAL_KEYWORD to EnumSet.of(INTERFACE),
|
||||
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 {
|
||||
|
||||
inline final fun finalInline(s: () -> String): String {
|
||||
fun finalInline(s: () -> String): String {
|
||||
return s()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
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
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
package a
|
||||
|
||||
interface T {
|
||||
<!FINAL_FUNCTION_WITH_NO_BODY, DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> fun foo()
|
||||
<!FINAL_PROPERTY_IN_INTERFACE, DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val b : Int
|
||||
<!FINAL_FUNCTION_WITH_NO_BODY, WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> fun foo()
|
||||
<!FINAL_PROPERTY_IN_INTERFACE, WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val b : Int
|
||||
|
||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> fun bar() {}
|
||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val c : Int
|
||||
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> fun bar() {}
|
||||
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val c : Int
|
||||
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 {
|
||||
|
||||
@@ -3,8 +3,8 @@ interface My {
|
||||
<!INCOMPATIBLE_MODIFIERS!>private<!> <!ABSTRACT_MODIFIER_IN_INTERFACE, INCOMPATIBLE_MODIFIERS!>abstract<!> val xx: Int
|
||||
private val xxx: Int
|
||||
get() = 0
|
||||
<!FINAL_PROPERTY_IN_INTERFACE, DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val y: Int
|
||||
<!DEPRECATED_MODIFIER_CONTAINING_DECLARATION!>final<!> val yy: Int
|
||||
<!FINAL_PROPERTY_IN_INTERFACE, WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val y: Int
|
||||
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>final<!> val yy: Int
|
||||
get() = 1
|
||||
<!PRIVATE_FUNCTION_WITH_NO_BODY!>private<!> fun foo(): Int
|
||||
// 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);
|
||||
}
|
||||
|
||||
@TestMetadata("finalMethod.kt")
|
||||
public void testFinalMethod() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/traits/finalMethod.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("genericMethod.kt")
|
||||
public void testGenericMethod() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/traits/genericMethod.kt");
|
||||
|
||||
@@ -2710,12 +2710,6 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
||||
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")
|
||||
public void testTraitOpenFun() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||
|
||||
-6
@@ -799,12 +799,6 @@ public class LoadKotlinWithTypeTableTestGenerated extends AbstractLoadKotlinWith
|
||||
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")
|
||||
public void testTraitOpenFun() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||
|
||||
-6
@@ -801,12 +801,6 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD
|
||||
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")
|
||||
public void testTraitOpenFun() throws Exception {
|
||||
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);
|
||||
}
|
||||
|
||||
@TestMetadata("overridingWritableAndNotWritableFinalMembers.kt")
|
||||
public void testOverridingWritableAndNotWritableFinalMembers() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/overridingWritableAndNotWritableFinalMembers.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("parameterNameChangedAmbiguousRename.kt")
|
||||
public void testParameterNameChangedAmbiguousRename() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/override/parameterNameChangedAmbiguousRename.kt");
|
||||
|
||||
@@ -799,12 +799,6 @@ public class ResolveByStubTestGenerated extends AbstractResolveByStubTest {
|
||||
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")
|
||||
public void testTraitOpenFun() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/classFun/TraitOpenFun.kt");
|
||||
|
||||
@@ -7,8 +7,6 @@ package foo
|
||||
|
||||
import test.*
|
||||
|
||||
// CHECK_CONTAINS_NO_CALLS: testFinalInline
|
||||
// CHECK_CONTAINS_NO_CALLS: testFinalInline2
|
||||
// CHECK_CONTAINS_NO_CALLS: testClassObject
|
||||
|
||||
internal fun testFinalInline(): String {
|
||||
|
||||
@@ -7,7 +7,7 @@ package test
|
||||
|
||||
internal interface InlineTrait {
|
||||
|
||||
public inline final fun finalInline(s: () -> String): String {
|
||||
public fun finalInline(s: () -> String): String {
|
||||
return s()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user