KTIJ-664 [SealedClassInheritorsProvider]: IDE-specific implementation

This commit is contained in:
Andrei Klunnyi
2020-12-10 15:09:16 +01:00
parent f02b73103b
commit 3af0257b38
17 changed files with 181 additions and 24 deletions
+14
View File
@@ -0,0 +1,14 @@
// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+FreedomForSealedClasses
package sealed
sealed class SealedDeclarationClass {
class AClass: SealedDeclarationClass()
}
sealed interface SealedDeclarationInterface {
class A: SealedDeclarationInterface
}
class B: SealedDeclarationInterface
class BClass: SealedDeclarationClass()
+35
View File
@@ -0,0 +1,35 @@
// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+FreedomForSealedClasses
package sealed
class C: SealedDeclarationInterface {}
class CClass: SealedDeclarationClass() {}
class D: SealedDeclarationInterface {
class E: SealedDeclarationInterface {
class F: SealedDeclarationInterface
}
}
class DClass: SealedDeclarationClass() {
class EClass: SealedDeclarationClass() {
class FClass: SealedDeclarationClass()
}
}
fun checkWhenNone(value: SealedDeclarationInterface): Int = <error descr="[NO_ELSE_IN_WHEN] 'when' expression must be exhaustive, add necessary 'is A', 'is B', 'is C', 'is D', 'is E', 'is F' branches or 'else' branch instead">when</error> (<warning descr="[UNUSED_EXPRESSION] The expression is unused">value</warning>) {
}
fun checkWhenNone(value: SealedDeclarationClass): Int = <error descr="[NO_ELSE_IN_WHEN] 'when' expression must be exhaustive, add necessary 'is AClass', 'is BClass', 'is CClass', 'is DClass', 'is EClass', 'is FClass' branches or 'else' branch instead">when</error> (<warning descr="[UNUSED_EXPRESSION] The expression is unused">value</warning>) {
}
fun checkWhenOneMissing(value: SealedDeclarationInterface): Int = <error descr="[NO_ELSE_IN_WHEN] 'when' expression must be exhaustive, add necessary 'is D', 'is E', 'is F' branches or 'else' branch instead">when</error> (value) {
is SealedDeclarationInterface.A -> 1
is B -> 2
is C -> 3
}
fun checkWhenOneMissing(value: SealedDeclarationClass): Int = <error descr="[NO_ELSE_IN_WHEN] 'when' expression must be exhaustive, add necessary 'is DClass', 'is EClass', 'is FClass' branches or 'else' branch instead">when</error> (value) {
is SealedDeclarationClass.AClass -> 1
is BClass -> 2
is CClass -> 3
}
@@ -0,0 +1,7 @@
// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+FreedomForSealedClasses
package sealed.otherpackage
import sealed.SealedDeclarationInterface
import sealed.SealedDeclarationClass
class D: <error descr="[SEALED_INHERITOR_IN_DIFFERENT_PACKAGE] Inheritor of sealed class or interface declared in package sealed but it must be in package {2} where base class is declared">SealedDeclarationInterface</error>
class DClass: <error descr="[SEALED_INHERITOR_IN_DIFFERENT_PACKAGE] Inheritor of sealed class or interface declared in package sealed but it must be in package {2} where base class is declared">SealedDeclarationClass</error>()