[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
@@ -8,17 +8,17 @@ abstract class A() {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>open var r: String<!>
get
abstract protected set
<!WRONG_MODIFIER_TARGET!>abstract<!> protected set
}
final interface T {}
<!WRONG_MODIFIER_TARGET!>final<!> interface T {}
class FinalClass() {
<!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> fun foo() {}
val i: Int = 1
open get(): Int = field
<!WRONG_MODIFIER_TARGET!>open<!> get(): Int = field
var j: Int = 1
open set(v: Int) {}
<!WRONG_MODIFIER_TARGET!>open<!> set(v: Int) {}
}
<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>public<!> class C
@@ -32,107 +32,107 @@ class LegalModifier(val a: Int, @annotated private var b: String, @annotated var
//Check illegal modifier in constructor parameters
class IllegalModifiers1(
<!INCOMPATIBLE_MODIFIERS!>in<!>
<!WRONG_MODIFIER_TARGET!>in<!>
<!INCOMPATIBLE_MODIFIERS!>out<!>
reified
enum
private
const
<!WRONG_MODIFIER_TARGET!>reified<!>
<!WRONG_MODIFIER_TARGET!>enum<!>
<!WRONG_MODIFIER_TARGET!>private<!>
<!WRONG_MODIFIER_TARGET!>const<!>
a: Int)
//Check multiple illegal modifiers in constructor
class IllegalModifiers2(<!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> a: Int)
class IllegalModifiers2(<!WRONG_MODIFIER_TARGET!>private<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> a: Int)
//Check annotations with illegal modifiers in constructor
class IllegalModifiers3(@annotated public abstract b: String)
class IllegalModifiers3(@annotated <!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>abstract<!> b: String)
//Check annotations and vararg with illegal modifiers in constructor
class IllegalModifiers4(val a: Int, @annotated("a text") protected vararg v: Int)
class IllegalModifiers4(val a: Int, @annotated("a text") <!WRONG_MODIFIER_TARGET!>protected<!> vararg v: Int)
//Check illegal modifiers for functions and catch block
abstract class IllegalModifiers5() {
//Check illegal modifier in function parameter
abstract fun foo(public a: Int, vararg v: String)
abstract fun foo(<!WRONG_MODIFIER_TARGET!>public<!> a: Int, vararg v: String)
//Check multiple illegal modifiers in function parameter
abstract fun bar(public abstract a: Int, vararg v: String)
abstract fun bar(<!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>abstract<!> a: Int, vararg v: String)
//Check annotations with illegal modifiers
abstract fun baz(@annotated("a text") public abstract a: Int)
abstract fun baz(@annotated("a text") <!WRONG_MODIFIER_TARGET!>public<!> <!WRONG_MODIFIER_TARGET!>abstract<!> a: Int)
private fun qux() {
//Check illegal modifier in catch block
try {} catch (<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> reified enum public e: Exception) {}
try {} catch (<!WRONG_MODIFIER_TARGET!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>reified<!> <!WRONG_MODIFIER_TARGET!>enum<!> <!WRONG_MODIFIER_TARGET!>public<!> e: Exception) {}
//Check multiple illegal modifiers in catch block
try {} catch (<!INCOMPATIBLE_MODIFIERS!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> reified enum abstract public e: Exception) {}
try {} catch (<!WRONG_MODIFIER_TARGET!>in<!> <!INCOMPATIBLE_MODIFIERS!>out<!> <!WRONG_MODIFIER_TARGET!>reified<!> <!WRONG_MODIFIER_TARGET!>enum<!> <!WRONG_MODIFIER_TARGET!>abstract<!> <!WRONG_MODIFIER_TARGET!>public<!> e: Exception) {}
//Check annotations with illegal modifiers
try {} catch (@annotated("a text") abstract public e: Exception) {}
try {} catch (@annotated("a text") <!WRONG_MODIFIER_TARGET!>abstract<!> <!WRONG_MODIFIER_TARGET!>public<!> e: Exception) {}
}
}
//Check illegal modifiers on anonymous initializers
abstract class IllegalModifiers6() {
public init {}
private init {}
protected init {}
vararg init {}
abstract init {}
open init {}
final init {}
<!WRONG_MODIFIER_TARGET!>public<!> init {}
<!WRONG_MODIFIER_TARGET!>private<!> init {}
<!WRONG_MODIFIER_TARGET!>protected<!> init {}
<!WRONG_MODIFIER_TARGET!>vararg<!> init {}
<!WRONG_MODIFIER_TARGET!>abstract<!> init {}
<!WRONG_MODIFIER_TARGET!>open<!> init {}
<!WRONG_MODIFIER_TARGET!>final<!> init {}
public @annotated init {}
<!WRONG_MODIFIER_TARGET!>public<!> @annotated init {}
private @IllegalModifiers6() init {}
<!WRONG_MODIFIER_TARGET!>private<!> @IllegalModifiers6() init {}
}
// strange inappropriate modifiers usages
override
<!INCOMPATIBLE_MODIFIERS!>out<!>
<!WRONG_MODIFIER_TARGET!>override<!>
<!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!>
vararg
reified
<!WRONG_MODIFIER_TARGET!>vararg<!>
<!WRONG_MODIFIER_TARGET!>reified<!>
class IllegalModifiers7() {
enum
inner
annotation
<!INCOMPATIBLE_MODIFIERS!>out<!>
<!WRONG_MODIFIER_TARGET!>enum<!>
<!WRONG_MODIFIER_TARGET!>inner<!>
<!WRONG_MODIFIER_TARGET!>annotation<!>
<!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!>
vararg
reified
<!WRONG_MODIFIER_TARGET!>vararg<!>
<!WRONG_MODIFIER_TARGET!>reified<!>
val x = 1
enum
inner
annotation
<!INCOMPATIBLE_MODIFIERS!>out<!>
<!WRONG_MODIFIER_TARGET!>enum<!>
<!WRONG_MODIFIER_TARGET!>inner<!>
<!WRONG_MODIFIER_TARGET!>annotation<!>
<!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!>
vararg
reified
const
<!WRONG_MODIFIER_TARGET!>vararg<!>
<!WRONG_MODIFIER_TARGET!>reified<!>
<!WRONG_MODIFIER_TARGET!>const<!>
fun foo() {}
}
// Secondary constructors
class IllegalModifiers8 {
<!INCOMPATIBLE_MODIFIERS!>abstract<!>
<!WRONG_MODIFIER_TARGET!>abstract<!>
enum
<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!>
inner
annotation
<!INCOMPATIBLE_MODIFIERS!>override<!>
<!INCOMPATIBLE_MODIFIERS!>out<!>
<!REDUNDANT_MODIFIER, WRONG_MODIFIER_TARGET!>open<!>
<!WRONG_MODIFIER_TARGET!>inner<!>
<!WRONG_MODIFIER_TARGET!>annotation<!>
<!WRONG_MODIFIER_TARGET!>override<!>
<!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!>
<!INCOMPATIBLE_MODIFIERS!>final<!>
vararg
reified
<!WRONG_MODIFIER_TARGET!>vararg<!>
<!WRONG_MODIFIER_TARGET!>reified<!>
<!INCOMPATIBLE_MODIFIERS!>const<!><!SYNTAX!><!>
constructor() {}
constructor(<!INCOMPATIBLE_MODIFIERS!>private<!> enum <!INCOMPATIBLE_MODIFIERS!>abstract<!> x: Int) {}
constructor(<!WRONG_MODIFIER_TARGET!>private<!> <!WRONG_MODIFIER_TARGET!>enum<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> x: Int) {}
}
class IllegalModifiers9 {
@@ -143,17 +143,17 @@ class IllegalModifiers9 {
// Illegal modifiers on primary constructor
class IllegalModifiers10
<!INCOMPATIBLE_MODIFIERS!>abstract<!>
enum
<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!>
inner
annotation
<!INCOMPATIBLE_MODIFIERS!>override<!>
<!INCOMPATIBLE_MODIFIERS!>out<!>
<!WRONG_MODIFIER_TARGET!>abstract<!>
<!WRONG_MODIFIER_TARGET!>enum<!>
<!REDUNDANT_MODIFIER, WRONG_MODIFIER_TARGET!>open<!>
<!WRONG_MODIFIER_TARGET!>inner<!>
<!WRONG_MODIFIER_TARGET!>annotation<!>
<!WRONG_MODIFIER_TARGET!>override<!>
<!WRONG_MODIFIER_TARGET!>out<!>
<!INCOMPATIBLE_MODIFIERS!>in<!>
<!INCOMPATIBLE_MODIFIERS!>final<!>
vararg
reified
<!WRONG_MODIFIER_TARGET!>vararg<!>
<!WRONG_MODIFIER_TARGET!>reified<!>
<!INCOMPATIBLE_MODIFIERS!>const<!> constructor()
class IllegalModifiers11 <!INCOMPATIBLE_MODIFIERS!>private<!> <!INCOMPATIBLE_MODIFIERS!>protected<!> constructor()
@@ -1,6 +0,0 @@
fun foo() {
public class A
private class B
protected class C
internal class D
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo() {
<!WRONG_MODIFIER_TARGET!>public<!> class A
<!WRONG_MODIFIER_TARGET!>private<!> class B
@@ -48,7 +48,7 @@ const val withExplicitDefaultGetter: Int = 1
<!CONST_VAL_WITH_GETTER!>get<!>
fun foo(): Int {
const val local: Int = 14
<!WRONG_MODIFIER_TARGET!>const<!> val local: Int = 14
return 15
}
@@ -1,55 +0,0 @@
companion class A {
companion object {
}
}
class B {
companion object
val c: Int = 1
}
class C {
companion object A {
}
}
class D {
companion object A {
companion object {
}
}
}
companion object G {
companion object
}
companion interface H {
companion object
}
class J {
companion object C {
companion object
}
}
companion enum class Enum {
E1,
E2;
companion object
}
companion fun main() {
}
companion var prop: Int = 1
companion get
companion set
class Z(companion val c: Int)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!WRONG_MODIFIER_TARGET!>companion<!> class A {
companion object {
@@ -19,34 +19,34 @@ class A : (vararg Int)->Unit {
get(): (vararg x: Int)->Unit = {}
}
val allProhibited: (<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>abstract<!>
annotation
companion
val allProhibited: (<!REDUNDANT_MODIFIER, WRONG_MODIFIER_TARGET!>abstract<!>
<!WRONG_MODIFIER_TARGET!>annotation<!>
<!WRONG_MODIFIER_TARGET!>companion<!>
<!INCOMPATIBLE_MODIFIERS!>const<!>
<!INCOMPATIBLE_MODIFIERS!>crossinline<!>
<!INCOMPATIBLE_MODIFIERS!>data<!>
enum
external
<!WRONG_MODIFIER_TARGET!>enum<!>
<!WRONG_MODIFIER_TARGET!>external<!>
<!INCOMPATIBLE_MODIFIERS!>final<!>
<!INCOMPATIBLE_MODIFIERS!>in<!>
<!WRONG_MODIFIER_TARGET!>in<!>
<!INCOMPATIBLE_MODIFIERS!>inline<!>
<!INCOMPATIBLE_MODIFIERS!>inner<!>
<!INCOMPATIBLE_MODIFIERS!>internal<!>
lateinit
<!WRONG_MODIFIER_TARGET!>internal<!>
<!WRONG_MODIFIER_TARGET!>lateinit<!>
<!INCOMPATIBLE_MODIFIERS!>noinline<!>
<!INCOMPATIBLE_MODIFIERS, REDUNDANT_MODIFIER!>open<!>
operator
<!WRONG_MODIFIER_TARGET!>operator<!>
<!INCOMPATIBLE_MODIFIERS!>out<!>
<!INCOMPATIBLE_MODIFIERS!>override<!>
<!INCOMPATIBLE_MODIFIERS!>private<!>
<!INCOMPATIBLE_MODIFIERS!>protected<!>
<!INCOMPATIBLE_MODIFIERS!>public<!>
reified
<!WRONG_MODIFIER_TARGET!>reified<!>
<!INCOMPATIBLE_MODIFIERS!>sealed<!>
tailrec
<!WRONG_MODIFIER_TARGET!>tailrec<!>
vararg
x: Int)->Unit = {}
val valProhibited: (val x: Int)->Unit = {}
val varProhibited: (var x: Int)->Unit = {}
val varProhibited: (var x: Int)->Unit = {}
@@ -1,10 +0,0 @@
open interface First
// Now inspection
abstract interface Second
// Now inspection
final enum class Third {
FOURTH,
FIFTH
}
// Now inspection
final object Sixth
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
<!REDUNDANT_MODIFIER_FOR_TARGET!>open<!> interface First
// Now inspection
abstract interface Second
@@ -11,7 +11,7 @@ class Bzz(public <!REPEATED_MODIFIER!>public<!> val q: Int = 1) {
public <!REPEATED_MODIFIER!>public<!> get() = 3
val z: Int
<!INCOMPATIBLE_MODIFIERS!>open<!> <!INCOMPATIBLE_MODIFIERS!>final<!> get() = 4
<!WRONG_MODIFIER_TARGET!>open<!> <!INCOMPATIBLE_MODIFIERS!>final<!> get() = 4
public <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) {
public <!REPEATED_MODIFIER!>public<!> val y: Int = 2
@@ -31,7 +31,7 @@ public <!REPEATED_MODIFIER!>public<!> val bar: Int = 1
public <!REPEATED_MODIFIER!>public<!> fun foo(): Int = 1
fun test() {
public <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) {
<!WRONG_MODIFIER_TARGET!>public<!> <!REPEATED_MODIFIER!>public<!> class B(public <!REPEATED_MODIFIER!>public<!> val z: Int = 1) {
public <!REPEATED_MODIFIER!>public<!> val y: Int = 2
public val x: Int