[FIR] Fix handling of WRONG_MODIFIER_TARGET

Implement DEPRECATED_MODIFIER, DEPRECATED_MODIFIER_FOR_TARGET, REDUNDANT_MODIFIER_FOR_TARGET
This commit is contained in:
Ivan Kochurkin
2021-08-04 20:20:38 +03:00
committed by TeamCityServer
parent e85940a1ac
commit cd6384eb20
114 changed files with 504 additions and 1033 deletions
@@ -93,7 +93,7 @@ class Foo {
private val packagePrivateProperty = object : MyClass(), MyTrait {}
protected val packageProtectedProperty = object : MyClass(), MyTrait {}
<!WRONG_MODIFIER_TARGET!>protected<!> val packageProtectedProperty = object : MyClass(), MyTrait {}
val packageInternalProperty = object : MyClass(), MyTrait {}
@@ -101,7 +101,7 @@ internal val packageInternal2Property = object : MyClass(), MyTrait {}
public val packagePublicProperty = object : MyClass(), MyTrait {}
protected fun packageProtectedFunction() = object : MyClass(), MyTrait {}
<!WRONG_MODIFIER_TARGET!>protected<!> fun packageProtectedFunction() = object : MyClass(), MyTrait {}
fun packageInternalFunction() = object : MyClass(), MyTrait {}
@@ -1,19 +0,0 @@
// !DIAGNOSTICS: -MANY_COMPANION_OBJECTS -REDECLARATION -DUPLICATE_CLASS_NAMES
// KT-3464 Front-end shouldn't allow override modifier in class declaration
override class A {
override companion object {}
open companion object {}
abstract companion object {}
final companion object {}
}
override object B1 {}
open object B2 {}
abstract object B3 {}
final object B4 {}
override enum class C {}
override interface D {}
override annotation class E
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -MANY_COMPANION_OBJECTS -REDECLARATION -DUPLICATE_CLASS_NAMES
// KT-3464 Front-end shouldn't allow override modifier in class declaration
@@ -5,8 +5,8 @@ class T {
}
fun foo() {
public val i = 11
abstract val <!VARIABLE_WITH_NO_TYPE_NO_INITIALIZER!>j<!>
override fun T.baz() = 2
private fun bar() = 2
<!WRONG_MODIFIER_TARGET!>public<!> val i = 11
<!WRONG_MODIFIER_TARGET!>abstract<!> val <!VARIABLE_WITH_NO_TYPE_NO_INITIALIZER!>j<!>
<!WRONG_MODIFIER_TARGET!>override<!> fun T.baz() = 2
<!WRONG_MODIFIER_TARGET!>private<!> fun bar() = 2
}
@@ -4,10 +4,10 @@ class T {
fun baz() = 1
}
override fun zzz() {}
<!WRONG_MODIFIER_TARGET!>override<!> fun zzz() {}
fun foo(t: T) {
override fun T.baz() = 2
<!WRONG_MODIFIER_TARGET!>override<!> fun T.baz() = 2
// was "Visibility is unknown yet exception"
t.baz()
@@ -7,7 +7,7 @@ fun test() {
val <T> a0 = 0
val <T : __UNRESOLVED__> a1 = ""
val <T : String> a2 = 0
const val <T> a3 = 0
<!WRONG_MODIFIER_TARGET!>const<!> val <T> a3 = 0
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0
val <T> a5 by Delegate<Int>()
val <T> a6 by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
@@ -7,7 +7,7 @@ fun test() {
val <T> a0 = 0
val <T : __UNRESOLVED__> a1 = ""
val <T : String> a2 = 0
const val <T> a3 = 0
<!WRONG_MODIFIER_TARGET!>const<!> val <T> a3 = 0
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0
val <T> a5 by Delegate<Int>()
val <T> a6 by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
@@ -1,12 +0,0 @@
package d
abstract val a : Int = 1
override val c : Int = 1
final fun foo() = 2
abstract fun baz() = 2
class T {}
override fun T.bar() = 2
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package d
<!WRONG_MODIFIER_TARGET!>abstract<!> val a : Int = 1
@@ -1,10 +1,10 @@
package d
override val f : ()-> Int = { 12 }
<!WRONG_MODIFIER_TARGET!>override<!> val f : ()-> Int = { 12 }
fun test() {
f()
}
var g: Int = 1
protected set(i: Int) {}
protected set(i: Int) {}
@@ -1,18 +0,0 @@
interface A {
sealed fun foo()
sealed var bar: Unit
}
interface B {
abstract fun foo()
abstract var bar: Unit
}
interface C : A, B
abstract class D(sealed var x: Int) {
abstract var y: Unit
sealed set
}
abstract class E : D(42)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface A {
<!WRONG_MODIFIER_TARGET!>sealed<!> fun foo()
<!WRONG_MODIFIER_TARGET!>sealed<!> var bar: Unit
@@ -1,175 +0,0 @@
open class MyClass {
fun f1() {}
}
class Foo {
protected val protectedProperty = object : MyClass() {}
public val publicProperty = object : MyClass() {}
protected val protected2Property : MyClass = object : MyClass() {fun invisible() {}}
public val public2Property : MyClass = object : MyClass() {fun invisible() {}}
private val privateProperty = object : MyClass() {fun visible() {}}
internal val internalProperty = object : MyClass() { fun invisible() {}}
fun testProperties() {
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
protected fun protected2Function(): MyClass = object : MyClass() {fun visible() {}}
public fun public2Function(): MyClass = object : MyClass() {fun visible() {}}
private fun privateFunction() = object : MyClass() {fun visible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
class FooInner {
public val publicProperty = object : MyClass() {}
protected val protectedProperty = object : MyClass() {}
protected val protected2Property : MyClass = object : MyClass() {fun invisible() {}}
public val public2Property : MyClass = object : MyClass() {fun invisible() {}}
private val privateProperty = object : MyClass() {fun visible() {}}
internal val internalProperty = object : MyClass() { fun invisible() {}}
fun testProperties() {
privateProperty.f1()
internalProperty.f1()
protected2Property.f1()
public2Property.f1()
privateProperty.visible()
protected2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
internalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
protected fun protected2Function(): MyClass = object : MyClass() {fun visible() {}}
public fun public2Function(): MyClass = object : MyClass() {fun visible() {}}
private fun privateFunction() = object : MyClass() {fun visible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
protected2Function().f1()
privateFunction().visible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
protected2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
}
fun foo() {
val localVar = object : MyClass() {}
localVar.f1()
fun foo2() = object : MyClass() {}
foo2().f1()
}
}
protected val packageProtectedProperty = object : MyClass() {}
public val packagePublicProperty = object : MyClass() {}
public val packagePublic2Property : MyClass = object : MyClass() {fun invisible() {}}
private val packagePrivateProperty = object : MyClass() {fun invisible() {}}
internal val packageInternalProperty = object : MyClass() {fun invisible() {}}
fun testProperties() {
packagePrivateProperty.f1()
packageInternalProperty.f1()
packagePublic2Property.f1()
packagePrivateProperty.invisible()
packageInternalProperty.<!UNRESOLVED_REFERENCE!>invisible<!>()
packagePublic2Property.<!UNRESOLVED_REFERENCE!>invisible<!>()
}
private fun privateFunction() = object : MyClass() {fun invisible() {}}
protected fun protectedFunction() = object : MyClass() {}
public fun publicFunction() = object : MyClass() {}
public fun public2Function() : MyClass = object : MyClass() {fun invisible() {}}
internal fun internalFunction() = object : MyClass() {fun invisible() {}}
fun testFunctions() {
privateFunction().f1()
internalFunction().f1()
public2Function().f1()
privateFunction().invisible()
internalFunction().<!UNRESOLVED_REFERENCE!>invisible<!>()
public2Function().<!UNRESOLVED_REFERENCE!>invisible<!>()
}
fun fooPackage() {
val packageLocalVar = object : MyClass() {fun visible() {}}
packageLocalVar.f1()
packageLocalVar.visible()
fun fooPackageLocal() = object : MyClass() {fun visible() {}}
fooPackageLocal().f1()
fooPackageLocal().visible()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
open class MyClass {
fun f1() {}
}