[FIR]: sealed hierarchy processor for IDE

From now on sealed declarations get resolved with the help of
FirIdeSealedHierarchyProcessor. This change entails correct IDE side
check for sealed when exhaustiveness.
This commit is contained in:
Andrei Klunnyi
2021-02-27 19:32:00 +01:00
parent 98b2c00083
commit 09f9489619
76 changed files with 389 additions and 117 deletions
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiMethod
// OPTIONS: usages
public class J {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiMethod
// OPTIONS: usages
public class J {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: derivedClasses
public class <caret>A {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: derivedClasses
public class <caret>A {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: derivedClasses
public class <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: derivedInterfaces
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: derivedInterfaces
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiClass
// OPTIONS: implementingClasses
public interface <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: com.intellij.psi.PsiMethod
// OPTIONS: overrides
public class A {
@@ -1,4 +1,4 @@
[JKMethodOverrides.0.java] Unclassified usage 11 public void foo() {
[JKMethodOverrides.0.java] Unclassified usage 12 public void foo() {
[JKMethodOverrides.1.kt] Unclassified usage 14 public override fun foo() {
[JKMethodOverrides.1.kt] Unclassified usage 2 public override fun foo() {
[JKMethodOverrides.1.kt] Unclassified usage 8 public override fun foo() {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[javaDerivedClassUsages2.0.kt] Unclassified usage 11 open class C: Y {
[javaDerivedClassUsages2.0.kt] Unclassified usage 7 open class A: X {
[javaDerivedClassUsages2.0.kt] Unclassified usage 12 open class C: Y {
[javaDerivedClassUsages2.0.kt] Unclassified usage 8 open class A: X {
[javaDerivedClassUsages2.1.java] Unclassified usage 1 class B extends A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
interface X {
@@ -1,2 +1,2 @@
[javaDerivedInterfaceUsages1.0.kt] Unclassified usage 15 interface Z: A {
[javaDerivedInterfaceUsages1.0.kt] Unclassified usage 16 interface Z: A {
[javaDerivedInterfaceUsages1.1.java] Unclassified usage 9 interface U extends Z {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
interface <caret>X {
@@ -1,3 +1,3 @@
[javaDerivedInterfaceUsages2.0.kt] Unclassified usage 15 interface Z: A {
[javaDerivedInterfaceUsages2.0.kt] Unclassified usage 16 interface Z: A {
[javaDerivedInterfaceUsages2.1.java] Unclassified usage 5 interface Y extends X {
[javaDerivedInterfaceUsages2.1.java] Unclassified usage 9 interface U extends Z {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
open class <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
open class <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
open class <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
interface X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
open class <caret>A {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
interface X {
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
fun foo() {
@@ -1,3 +1,3 @@
Unclassified usage 11 val c = object: A() {}
Unclassified usage 13 val d = object: T {}
Unclassified usage 6 val b = object: A() {}
Unclassified usage 12 val c = object: A() {}
Unclassified usage 14 val d = object: T {}
Unclassified usage 7 val b = object: A() {}
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
fun foo() {
@@ -1,3 +1,3 @@
Unclassified usage 11 class C: A()
Unclassified usage 13 class D: T
Unclassified usage 6 class B: A()
Unclassified usage 12 class C: A()
Unclassified usage 14 class D: T
Unclassified usage 7 class B: A()
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
fun foo() {
@@ -1,3 +1,3 @@
Unclassified usage 11 object C: A()
Unclassified usage 13 object D: T
Unclassified usage 6 object B: A()
Unclassified usage 12 object C: A()
Unclassified usage 14 object D: T
Unclassified usage 7 object B: A()
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
fun foo() {
@@ -1,2 +1,2 @@
Unclassified usage 6 interface T: A
Unclassified usage 9 interface U: T
Unclassified usage 10 interface U: T
Unclassified usage 7 interface T: A
@@ -1,3 +1,4 @@
// FIR_IGNORE
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,4 +1,4 @@
[kotlinTraitDerivedAnonymousObjects.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedAnonymousObjects.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedAnonymousObjects.1.kt] Unclassified usage 12 val x = object : X {
[kotlinTraitDerivedAnonymousObjects.1.kt] Unclassified usage 9 doSomething(object : A() {}, object: X {})
[kotlinTraitDerivedAnonymousObjects.1.kt] Unclassified usage 9 doSomething(object : A() {}, object: X {})
[kotlinTraitDerivedAnonymousObjects.1.kt] Unclassified usage 9 doSomething(object : A() {}, object: X {})
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedClasses.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedClasses.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedClasses.1.kt] Unclassified usage 3 open class B: A() {
[kotlinTraitDerivedClasses.1.kt] Unclassified usage 7 open class C: Y {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedInnerClasses.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedInnerClasses.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedInnerClasses.1.kt] Unclassified usage 4 open class B: A() {
[kotlinTraitDerivedInnerClasses.1.kt] Unclassified usage 8 open class C: Y {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedInnerObjects.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedInnerObjects.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedInnerObjects.1.kt] Unclassified usage 4 object O1: A() {
[kotlinTraitDerivedInnerObjects.1.kt] Unclassified usage 9 object O2: X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedLocalClasses.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedLocalClasses.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedLocalClasses.1.kt] Unclassified usage 5 open class B: A() {
[kotlinTraitDerivedLocalClasses.1.kt] Unclassified usage 9 open class C: Y {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedLocalObjects.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedLocalObjects.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedLocalObjects.1.kt] Unclassified usage 10 object O2: X {
[kotlinTraitDerivedLocalObjects.1.kt] Unclassified usage 5 object O1: A() {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
interface <caret>X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedClasses
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedObjects.0.kt] Unclassified usage 7 open class A: X {
[kotlinTraitDerivedObjects.0.kt] Unclassified usage 8 open class A: X {
[kotlinTraitDerivedObjects.1.kt] Unclassified usage 3 object O1: A() {
[kotlinTraitDerivedObjects.1.kt] Unclassified usage 7 object O2: X {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass
// OPTIONS: derivedInterfaces
interface <caret>X {
@@ -1,3 +1,3 @@
[kotlinTraitDerivedTraits.0.kt] Unclassified usage 11 interface Y: X {
[kotlinTraitDerivedTraits.0.kt] Unclassified usage 12 interface Y: X {
[kotlinTraitDerivedTraits.1.kt] Unclassified usage 11 interface Z: A {
[kotlinTraitDerivedTraits.1.kt] Unclassified usage 15 interface U: Z {