diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt index e70e1ca8b07097d452d94d8e1b97d73507fc1f3b..4efc5247bf442d0fb64fc9e3bba0881a0e0a48f2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt @@ -46,14 +46,4 @@ abstract class FirAbstractPhaseTransformer( "File ${file.name} and transformer ${this::class} have inconsistent sessions" } } -} - -fun FirFile.runResolve(toPhase: FirResolvePhase, fromPhase: FirResolvePhase = FirResolvePhase.RAW_FIR) { - val scopeSession = ScopeSession() - var currentPhase = fromPhase - while (currentPhase < toPhase) { - currentPhase = currentPhase.next - val phaseProcessor = currentPhase.createTransformerBasedProcessorByPhase(session, scopeSession) - phaseProcessor.processFile(this) - } -} +} \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirLegacySealedClassInheritorsTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirLegacySealedClassInheritorsTransformer.kt deleted file mode 100644 index bc813056e6d73ed6085180251bb5a053cbcec4e8..0000000000000000000000000000000000000000 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirLegacySealedClassInheritorsTransformer.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir.resolve.transformers - -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirFile -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.compose -import org.jetbrains.kotlin.name.ClassId - -/* - * This processor is needed only for IDE until there won't be proper IDE implementation - * for detecting sealed inheritors in multiple files - */ -class FirLegacySealedClassInheritorsProcessor(session: FirSession, scopeSession: ScopeSession) : FirTransformerBasedResolveProcessor(session, scopeSession) { - override val transformer = FirLegacySealedClassInheritorsTransformer() -} - -class FirLegacySealedClassInheritorsTransformer : FirTransformer() { - override fun transformElement(element: E, data: Nothing?): CompositeTransformResult { - throw IllegalStateException("Should not be there") - } - - override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - val sealedClassInheritorsMap = mutableMapOf>() - file.accept(FirSealedClassInheritorsProcessor.InheritorsCollector, sealedClassInheritorsMap) - if (sealedClassInheritorsMap.isEmpty()) return file.compose() - return file.transform(FirSealedClassInheritorsProcessor.InheritorsTransformer(sealedClassInheritorsMap), null) - } -} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt index a385324ff3b2047790cc8ba2587f7a27fef5c0ff..adda27981ae506b5ccaf426ed4d6840ef22e7fe7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTotalResolveProcessor.kt @@ -41,17 +41,7 @@ fun createAllCompilerResolveProcessors( } } -fun createAllTransformerBasedResolveProcessors( - session: FirSession, - scopeSession: ScopeSession? = null, - pluginPhasesEnabled: Boolean = false, -): List { - return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) { - createTransformerBasedProcessorByPhase(session, it) - } -} - -private inline fun createAllResolveProcessors( +inline fun createAllResolveProcessors( scopeSession: ScopeSession? = null, pluginPhasesEnabled: Boolean, creator: FirResolvePhase.(ScopeSession) -> T diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt index a4e76d1a194994d10e1934d1d8d6a1a05f873f7f..2ee9a1b9312b5c561c1ed2e408648169ae7ea4cc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt @@ -40,29 +40,7 @@ fun FirResolvePhase.createCompilerProcessorByPhase( } } -fun FirResolvePhase.createTransformerBasedProcessorByPhase( - session: FirSession, - scopeSession: ScopeSession -): FirTransformerBasedResolveProcessor { - return when (this) { - RAW_FIR -> throw IllegalStateException("Raw FIR building phase does not have a transformer") - ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveProcessor(session, scopeSession) - CLASS_GENERATION -> FirDummyTransformerBasedProcessor(session, scopeSession) // TODO: remove - IMPORTS -> FirImportResolveProcessor(session, scopeSession) - SUPER_TYPES -> FirSupertypeResolverProcessor(session, scopeSession) - SEALED_CLASS_INHERITORS -> FirLegacySealedClassInheritorsProcessor(session, scopeSession) - TYPES -> FirTypeResolveProcessor(session, scopeSession) - ARGUMENTS_OF_PLUGIN_ANNOTATIONS -> FirAnnotationArgumentsResolveProcessor(session, scopeSession) - EXTENSION_STATUS_UPDATE -> FirTransformerBasedExtensionStatusProcessor(session, scopeSession) - STATUS -> FirStatusResolveProcessor(session, scopeSession) - CONTRACTS -> FirContractResolveProcessor(session, scopeSession) - NEW_MEMBERS_GENERATION -> FirDummyTransformerBasedProcessor(session, scopeSession) // TODO: remove - IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveProcessor(session, scopeSession) - BODY_RESOLVE -> FirBodyResolveProcessor(session, scopeSession) - } -} - -private class FirDummyTransformerBasedProcessor( +class FirDummyTransformerBasedProcessor( session: FirSession, scopeSession: ScopeSession ) : FirTransformerBasedResolveProcessor(session, scopeSession) { diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 05a944a2e187195f55f29a2f647d072e1f20b8a4..422cd867c35f99abfe01e2543a65eab8706379c9 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -79,6 +79,7 @@ import org.jetbrains.kotlin.idea.editor.backspaceHandler.AbstractBackspaceHandle import org.jetbrains.kotlin.idea.editor.quickDoc.AbstractQuickDocProviderTest import org.jetbrains.kotlin.idea.filters.AbstractKotlinExceptionFilterTest import org.jetbrains.kotlin.idea.fir.AbstractKtDeclarationAndFirDeclarationEqualityChecker +import org.jetbrains.kotlin.idea.fir.low.level.api.* import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirLazyDeclarationResolveTest import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirLazyResolveTest import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirMultiModuleLazyResolveTest @@ -1068,6 +1069,9 @@ fun main(args: Array) { testClass { model("multiModuleLazyResolve", recursive = false, extension = null) } + testClass { + model("resolveSealed", recursive = false, extension = null) + } testClass { model("lazyResolve") } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeSealedHierarchyProcessor.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeSealedHierarchyProcessor.kt new file mode 100644 index 0000000000000000000000000000000000000000..6357171a61ed727dd4df5bd99565d682ddb216e2 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeSealedHierarchyProcessor.kt @@ -0,0 +1,101 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.fir.low.level.api + +import com.intellij.openapi.module.Module +import com.intellij.psi.JavaDirectoryService +import com.intellij.psi.PsiPackage +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.search.PackageScope +import com.intellij.psi.search.SearchScope +import com.intellij.psi.search.searches.ClassInheritorsSearch +import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport +import org.jetbrains.kotlin.asJava.toLightClass +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.psi +import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.transformers.FirSealedClassInheritorsProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor +import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult +import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.compose +import org.jetbrains.kotlin.idea.util.classIdIfNonLocal +import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.psi.KtClass +import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade + + +class FirIdeSealedHierarchyProcessor(session: FirSession, scopeSession: ScopeSession) : + FirTransformerBasedResolveProcessor(session, scopeSession) { + + override val transformer: FirTransformer = SealedClassInheritorsTransformer + + + private object SealedClassInheritorsTransformer : FirTransformer() { + override fun transformElement(element: E, data: Nothing?): CompositeTransformResult { + throw IllegalStateException("Should not be there") + } + + override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { + val sealedClassInheritorsMap = mutableMapOf>() + file.accept(SealedInheritorsCollector, sealedClassInheritorsMap) + + if (sealedClassInheritorsMap.isEmpty()) return file.compose() + return file.transform(FirSealedClassInheritorsProcessor.InheritorsTransformer(sealedClassInheritorsMap), null) + } + } + + private object SealedInheritorsCollector : FirDefaultVisitor>>() { + + override fun visitElement(element: FirElement, data: MutableMap>) {} + + override fun visitFile(file: FirFile, data: MutableMap>) { + file.declarations.forEach { it.accept(this, data) } + } + + override fun visitRegularClass(regularClass: FirRegularClass, data: MutableMap>) { + if (!regularClass.isSealed) { + regularClass.acceptChildren(this, data) + return + } + + val sealedKtClass = regularClass.psi as? KtClass ?: return + val module = sealedKtClass.module ?: return + val containingPackage = regularClass.classId.packageFqName + + val psiPackage = KotlinJavaPsiFacade.getInstance(sealedKtClass.project) + .findPackage(containingPackage.asString(), GlobalSearchScope.moduleScope(module)) + ?: getPackageViaDirectoryService(sealedKtClass) + ?: return + + val kotlinAsJavaSupport = KotlinAsJavaSupport.getInstance(sealedKtClass.project) + val lightClass = sealedKtClass.toLightClass() ?: kotlinAsJavaSupport.getFakeLightClass(sealedKtClass) + + val searchScope: SearchScope = getSearchScope(module, psiPackage) + val searchParameters = ClassInheritorsSearch.SearchParameters(lightClass, searchScope, false, true, false) + val subclasses = ClassInheritorsSearch.search(searchParameters) + .mapNotNull { it.classIdIfNonLocal() } + .toMutableList() + + data[regularClass] = subclasses + } + + private fun getSearchScope(module: Module, psiPackage: PsiPackage): GlobalSearchScope { + val packageScope = PackageScope(psiPackage, false, false) + // MPP multiple common modules are not supported!! + return module.moduleScope.intersectWith(packageScope) + } + } +} + +private fun getPackageViaDirectoryService(ktClass: KtClass): PsiPackage? { + val directory = ktClass.containingFile.containingDirectory ?: return null + return JavaDirectoryService.getInstance().getPackage(directory) +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt index 12d3be6addb08512739795a9197b7f7635fa8783..31d66909665a3b6c60800b7343bd3f1e84fc87f0 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt @@ -5,10 +5,17 @@ package org.jetbrains.kotlin.idea.fir.low.level.api +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.transformers.createTransformerBasedProcessorByPhase +import org.jetbrains.kotlin.fir.resolve.transformers.* +import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitTypeBodyResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.contracts.FirContractResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirAnnotationArgumentsResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirPluginAnnotationsResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirTransformerBasedExtensionStatusProcessor import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyBodiesCalculator import org.jetbrains.kotlin.idea.fir.low.level.api.util.executeWithoutPCE import java.util.concurrent.locks.ReentrantLock @@ -55,7 +62,6 @@ internal class FirPhaseRunner { } } - private fun runPhaseWithoutLock(firFile: FirFile, phase: FirResolvePhase, scopeSession: ScopeSession) { val phaseProcessor = phase.createTransformerBasedProcessorByPhase(firFile.session, scopeSession) executeWithoutPCE { @@ -64,3 +70,25 @@ internal class FirPhaseRunner { } } } + +internal fun FirResolvePhase.createTransformerBasedProcessorByPhase( + session: FirSession, + scopeSession: ScopeSession +): FirTransformerBasedResolveProcessor { + return when (this) { + FirResolvePhase.RAW_FIR -> throw IllegalStateException("Raw FIR building phase does not have a transformer") + FirResolvePhase.ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveProcessor(session, scopeSession) + FirResolvePhase.CLASS_GENERATION -> FirDummyTransformerBasedProcessor(session, scopeSession) // TODO: remove + FirResolvePhase.IMPORTS -> FirImportResolveProcessor(session, scopeSession) + FirResolvePhase.SUPER_TYPES -> FirSupertypeResolverProcessor(session, scopeSession) + FirResolvePhase.SEALED_CLASS_INHERITORS -> FirIdeSealedHierarchyProcessor(session, scopeSession) + FirResolvePhase.TYPES -> FirTypeResolveProcessor(session, scopeSession) + FirResolvePhase.ARGUMENTS_OF_PLUGIN_ANNOTATIONS -> FirAnnotationArgumentsResolveProcessor(session, scopeSession) + FirResolvePhase.EXTENSION_STATUS_UPDATE -> FirTransformerBasedExtensionStatusProcessor(session, scopeSession) + FirResolvePhase.STATUS -> FirStatusResolveProcessor(session, scopeSession) + FirResolvePhase.CONTRACTS -> FirContractResolveProcessor(session, scopeSession) + FirResolvePhase.NEW_MEMBERS_GENERATION -> FirDummyTransformerBasedProcessor(session, scopeSession) // TODO: remove + FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveProcessor(session, scopeSession) + FirResolvePhase.BODY_RESOLVE -> FirBodyResolveProcessor(session, scopeSession) + } +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/anotherModule/AnotherModuleSamePackageDeclarations.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/anotherModule/AnotherModuleSamePackageDeclarations.kt new file mode 100644 index 0000000000000000000000000000000000000000..4e75fd125584fe45d54af76666fd26e6f3aafbb5 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/anotherModule/AnotherModuleSamePackageDeclarations.kt @@ -0,0 +1,5 @@ +class ClassAnotherModuleInheritorA: SealedClass() +class ClassAnotherModuleInheritorB: SealedClass() + +class InterfaceAnotherModuleInheritorA: SealedInterface +class InterfaceAnotherModuleInheritorB: SealedInterface \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/expected.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/expected.txt new file mode 100644 index 0000000000000000000000000000000000000000..698f1d19a1165a5077fab52e043af3368cbe783d --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/expected.txt @@ -0,0 +1,18 @@ +ClassSameFileInheritorA +ClassSameFileInheritorB +ClassSameFileInheritorC +ClassSamePackageInheritorA +ClassSamePackageInheritorB +InterfaceSameFileInheritorA +InterfaceSameFileInheritorB +InterfaceSameFileInheritorC +InterfaceSamePackageInheritorA +InterfaceSamePackageInheritorB +NonSealedClass.NestedSealedInheritorA +NonSealedClass.NestedSealedInheritorB +SealedClass.NestedInheritorA +SealedClass.NestedInheritorA.NestedNestedInheritorA +SealedClass.NestedInheritorA.NestedNestedInheritorB +SealedInterface.NestedInheritorA +SealedInterface.NestedInheritorA.NestedNestedInheritorA +SealedInterface.NestedInheritorA.NestedNestedInheritorB \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/SamePackageDeclarations.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/SamePackageDeclarations.kt new file mode 100644 index 0000000000000000000000000000000000000000..f6d4fc9d78672456f1367d35d8901e705c881afb --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/SamePackageDeclarations.kt @@ -0,0 +1,5 @@ +class ClassSamePackageInheritorA: SealedClass() +class ClassSamePackageInheritorB: SealedClass() + +class InterfaceSamePackageInheritorA: SealedInterface +class InterfaceSamePackageInheritorB: SealedInterface diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/anotherpackage/AnotherPackageDeclarations.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/anotherpackage/AnotherPackageDeclarations.kt new file mode 100644 index 0000000000000000000000000000000000000000..f39899b41e3b185446c7cb231245050083bd653f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/anotherpackage/AnotherPackageDeclarations.kt @@ -0,0 +1,7 @@ +package anotherpackage + +class ClassAnotherPackageInheritorA: SealedClass() +class ClassAnotherPackageInheritorB: SealedClass() + +class InterfaceAnotherPackageInheritorA: SealedInterface +class InterfaceAnotherPackageInheritorB: SealedInterface \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/main.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/main.kt new file mode 100644 index 0000000000000000000000000000000000000000..1010543c424998a45fcc2c83b474504a99329014 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/main.kt @@ -0,0 +1,29 @@ +sealed class SealedClass { // (1): top level sealed class + class NestedInheritorA: SealedClass() { + class NestedNestedInheritorA: SealedClass() + object NestedNestedInheritorB: SealedClass() + } +} + +class ClassSameFileInheritorA: SealedClass() +class ClassSameFileInheritorB: SealedClass() +object ClassSameFileInheritorC: SealedClass() + +sealed interface SealedInterface { // (2): top level sealed interface + class NestedInheritorA: SealedInterface { + interface NestedNestedInheritorA: SealedInterface + object NestedNestedInheritorB: SealedInterface + } +} + +class InterfaceSameFileInheritorA: SealedInterface +class InterfaceSameFileInheritorB: SealedInterface +object InterfaceSameFileInheritorC: SealedInterface + + +class NonSealedClass { + sealed class NestedSealedClass // (3): nested sealed class + sealed interface NestedSealedInterface // (4): nested sealed interface + class NestedSealedInheritorA: NestedSealedClass() + class NestedSealedInheritorB: NestedSealedInterface +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/structure.json b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/structure.json new file mode 100644 index 0000000000000000000000000000000000000000..991c4e67b282a485a9ea37b57c5910f4253eb689 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/structure.json @@ -0,0 +1,7 @@ +{ + "modules" : [ + { "name": "main", "dependsOn": ["anotherModule"] }, + { "name": "anotherModule"} + ], + "fileToResolve": { "module": "main", "file": "main.kt" } +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt index 5812a1e36ce16e2c4e2b2a524ce4aab8dfe2f45f..d7e46ba96d9678f05bf1c8db981aef1e219db983 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt @@ -9,8 +9,10 @@ import com.google.gson.JsonElement import com.google.gson.JsonObject import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiManager +import org.jetbrains.kotlin.executeOnPooledThreadInReadAction +import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir +import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirOfType import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState import org.jetbrains.kotlin.idea.jsonUtils.getString import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest @@ -47,8 +49,9 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest() val fails = testStructure.fails try { - val fir = ktFileToAnalyse.getOrBuildFir(resolveState) - KotlinTestUtils.assertEqualsToFile(File("$path/expected.txt"), fir.render()) + val fir = executeOnPooledThreadInReadAction { ktFileToAnalyse.getOrBuildFirOfType(resolveState) } + ?: throw AssertionError("Can't build FirFile from ${ktFileToAnalyse.virtualFilePath}") + checkFirFile(fir, path) } catch (e: Throwable) { if (!fails) throw e return @@ -57,6 +60,10 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest() throw AssertionError("Looks like test is passing, please remove `\"fails\": true` from structure.json") } } + + protected open fun checkFirFile(firFile: FirFile, path: String) { + KotlinTestUtils.assertEqualsToFile(File("$path/expected.txt"), firFile.render()) + } } private data class FileToResolve(val moduleName: String, val relativeFilePath: String) { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt index 696a1cf2c59b58da6fba1ef3783b4bce001f943d..607bf8b9d0ac6e75627f91d95d362012f0f9fbb5 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt @@ -11,16 +11,17 @@ import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import com.intellij.psi.search.FileTypeIndex import org.jetbrains.kotlin.fir.FirRenderer +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.dependenciesWithoutSelf import org.jetbrains.kotlin.fir.java.* import org.jetbrains.kotlin.fir.psi +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl -import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor -import org.jetbrains.kotlin.fir.resolve.transformers.createAllTransformerBasedResolveProcessors +import org.jetbrains.kotlin.fir.resolve.transformers.* import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo @@ -155,5 +156,15 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() { // KotlinTestUtils.assertEqualsToFile(File("$dirPath/extraDump.java.txt"), javaFirDump) // } } + + private fun createAllTransformerBasedResolveProcessors( + session: FirSession, + scopeSession: ScopeSession? = null, + pluginPhasesEnabled: Boolean = false, + ): List { + return createAllResolveProcessors(scopeSession, pluginPhasesEnabled) { + createTransformerBasedProcessorByPhase(session, it) + } + } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirSealedInheritorsTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirSealedInheritorsTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..f0bc36f50376be8c84067372263f32082597febd --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirSealedInheritorsTest.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.fir.low.level.api + +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.util.KtTestUtil +import org.jetbrains.kotlin.types.typeUtil.closure +import org.jetbrains.kotlin.utils.addToStdlib.flatMapToNullable +import java.io.File + +/** + * The idea behind this test is to check that [FirIdeSealedHierarchyProcessor] finds all direct inheritors of sealed classes and interfaces. + * We use the fact that [SealedClassInheritorsKt#getSealedInheritors] property gets its value thanks to the class activity. + * + * Inheritors are collected for every sealed declaration of the 'fileToResolve' (see test data 'structure.json'). Resulting collection is + * compared with 'expected.txt'. + */ +abstract class AbstractFirSealedInheritorsTest : AbstractFirMultiModuleLazyResolveTest() { + override fun getTestDataPath(): String = + "${KtTestUtil.getHomeDirectory()}/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/" + + override fun checkFirFile(firFile: FirFile, path: String) { + val allClasses = firFile.listNestedClasses().closure { it.listNestedClasses() } + val inheritorNames = allClasses.flatMap { it.sealedInheritors ?: emptyList() }.map { it.asString() }.sorted() + KotlinTestUtils.assertEqualsToFile(File("$path/expected.txt"), inheritorNames.joinToString("\n")) + } +} + +private fun FirDeclaration.listNestedClasses(): List { + return when (this) { + is FirFile -> declarations.filterIsInstance() + is FirRegularClass -> declarations.filterIsInstance() + else -> emptyList() + } +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirSealedInheritorsTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirSealedInheritorsTestGenerated.java new file mode 100644 index 0000000000000000000000000000000000000000..23c2d47d9181a44fbafa903204078d69dc010860 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirSealedInheritorsTestGenerated.java @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.fir.low.level.api; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class FirSealedInheritorsTestGenerated extends AbstractFirSealedInheritorsTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInResolveSealed() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed"), Pattern.compile("^([^\\.]+)$"), null, false); + } + + @TestMetadata("directInheritors") + public void testDirectInheritors() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/"); + } +} diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt index c109af8e63ce3d643a386168a6966310aaf4c00e..e31342c84d4cb657f3117cb7bebb4a8b54eac7a6 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt @@ -42,7 +42,7 @@ internal class KtFirTypeProvider( override fun buildSelfClassType(symbol: KtClassOrObjectSymbol): KtType { require(symbol is KtFirClassOrObjectSymbol) - val type = symbol.firRef.withFir(FirResolvePhase.TYPES) { firClass -> + val type = symbol.firRef.withFir(FirResolvePhase.SUPER_TYPES) { firClass -> ConeClassLikeTypeImpl( firClass.symbol.toLookupTag(), firClass.typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), isNullable = false) }.toTypedArray(), diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt index 8c05e75bd2593b9d86fb208cbd6f97c556b49637..adfc5b52bbc9da7b9da41dea12a4b79986493288 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/psiUtils.kt @@ -5,11 +5,14 @@ package org.jetbrains.kotlin.idea.util +import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor +import com.intellij.psi.PsiJavaFile import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.util.parentOfType import com.intellij.psi.util.parentsOfType +import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.cfg.containingDeclarationForPseudocode import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -45,3 +48,15 @@ fun KtClassOrObject.classIdIfNonLocal(): ClassId? { return ClassId(packageName, FqName(classesNames.joinToString(separator = ".")), /*local=*/false) } +fun PsiClass.classIdIfNonLocal(): ClassId? { + if (this is KtLightClass) { + return this.kotlinOrigin?.classIdIfNonLocal() + } + val packageName = (containingFile as? PsiJavaFile)?.packageName ?: return null + val packageFqName = FqName(packageName) + + val classesNames = parentsOfType().map { it.name }.toList().asReversed() + if (classesNames.any { it == null }) return null + return ClassId(packageFqName, FqName(classesNames.joinToString(separator = ".")), false) +} + diff --git a/idea/resources-fir/META-INF/plugin.xml b/idea/resources-fir/META-INF/plugin.xml index 69c6efe8e263db3b8f0e09f41a7b1c899299a6cf..49cb90daf4671932807238a32ab512c3f14f7402 100644 --- a/idea/resources-fir/META-INF/plugin.xml +++ b/idea/resources-fir/META-INF/plugin.xml @@ -262,7 +262,7 @@ The Kotlin FIR plugin provides language support in IntelliJ IDEA and Android Stu - + diff --git a/idea/testData/findUsages/java/findConstructorUsages/javaConstructorInDelegationCall.0.java b/idea/testData/findUsages/java/findConstructorUsages/javaConstructorInDelegationCall.0.java index 000b72c9223260753dd3d8dc5683af5ff0bf810e..82852a9ca89882d1b80febed6190c688ef21cf98 100644 --- a/idea/testData/findUsages/java/findConstructorUsages/javaConstructorInDelegationCall.0.java +++ b/idea/testData/findUsages/java/findConstructorUsages/javaConstructorInDelegationCall.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiMethod // OPTIONS: usages public class J { diff --git a/idea/testData/findUsages/java/findConstructorUsages/javaDefaultConstructorInDelegationCall.0.java b/idea/testData/findUsages/java/findConstructorUsages/javaDefaultConstructorInDelegationCall.0.java index 5a59e680d7a6cff1d4c262749b941459b2af2e05..ee84a159fdc9535aad2b02bca105989a38372aad 100644 --- a/idea/testData/findUsages/java/findConstructorUsages/javaDefaultConstructorInDelegationCall.0.java +++ b/idea/testData/findUsages/java/findConstructorUsages/javaDefaultConstructorInDelegationCall.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiMethod // OPTIONS: usages public class J { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedAnonymousObjects.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedAnonymousObjects.0.java index eea2d7f95baacd265d4f323135483157638d739a..41f1be47d5d28778c4ab6477a7332d25d0d5ead8 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedAnonymousObjects.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedAnonymousObjects.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: derivedClasses public class A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerClasses.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerClasses.0.java index eea2d7f95baacd265d4f323135483157638d739a..41f1be47d5d28778c4ab6477a7332d25d0d5ead8 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerClasses.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerClasses.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: derivedClasses public class A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerObjects.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerObjects.0.java index eea2d7f95baacd265d4f323135483157638d739a..41f1be47d5d28778c4ab6477a7332d25d0d5ead8 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerObjects.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKClassDerivedInnerObjects.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: derivedClasses public class A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKDerivedInterfaces.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKDerivedInterfaces.0.java index a031139d7c7a7cb9a32ef5dc042110bcfd58a41c..69214e8f2b2f83fbfbb63cb9ad17a9aa47c17e22 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKDerivedInterfaces.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKDerivedInterfaces.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: derivedInterfaces public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedAnonymousObjects.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedAnonymousObjects.0.java index 2f1ebac5750b15be62e50913d4c19d433e53cb1f..5efbcf237ac5063bcb7a74f91734156d1df85387 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedAnonymousObjects.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedAnonymousObjects.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedClasses.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedClasses.0.java index 699b54fd6c442d925dab9fb7143f56fd75af9b1b..8a521db44e9ba2d4885c96b40e0afd9931c959d9 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedClasses.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedClasses.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerClasses.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerClasses.0.java index 699b54fd6c442d925dab9fb7143f56fd75af9b1b..b04b36c6e5e3ee6334871503cc0012195e88a8bd 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerClasses.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerClasses.0.java @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerObjects.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerObjects.0.java index 2f1ebac5750b15be62e50913d4c19d433e53cb1f..eb040cd9ce43684c7163beab05598854c5357e30 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerObjects.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedInnerObjects.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalClasses.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalClasses.0.java index 2f1ebac5750b15be62e50913d4c19d433e53cb1f..eb040cd9ce43684c7163beab05598854c5357e30 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalClasses.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalClasses.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalObjects.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalObjects.0.java index 2f1ebac5750b15be62e50913d4c19d433e53cb1f..eb040cd9ce43684c7163beab05598854c5357e30 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalObjects.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalObjects.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalTraits.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalTraits.0.java index a031139d7c7a7cb9a32ef5dc042110bcfd58a41c..69214e8f2b2f83fbfbb63cb9ad17a9aa47c17e22 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalTraits.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedLocalTraits.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: derivedInterfaces public interface A { diff --git a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedObjects.0.java b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedObjects.0.java index 2f1ebac5750b15be62e50913d4c19d433e53cb1f..eb040cd9ce43684c7163beab05598854c5357e30 100644 --- a/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedObjects.0.java +++ b/idea/testData/findUsages/java/findJavaClassUsages/JKInterfaceDerivedObjects.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiClass // OPTIONS: implementingClasses public interface A { diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.0.java b/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.0.java index bfec04052913ca571f159d43c18d2fa7c2c0a421..f48099587b222b31ae3ac0a748b4261074ce5eae 100644 --- a/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.0.java +++ b/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.0.java @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: com.intellij.psi.PsiMethod // OPTIONS: overrides public class A { diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.results.txt b/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.results.txt index e178f75e6ec97f99deb619c24655ec4c90d52605..7a5c76a0914d3e4e4c07806b73a09b30c7dcf03c 100644 --- a/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.results.txt +++ b/idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.results.txt @@ -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() { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.0.kt index ddc6a3a789531a39e3ee49d8073d4ec81d69f3ef..800285102fc08ff5dca025f2463d2459587a991f 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.results.txt index d3b1e8b6e4e01be8ac88ec02390624aba0e33d0b..f309f88ec0e9221bc51fe41a21c52ef9a3ceb888 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedClassUsages2.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.0.kt index 329ec83922aadfac82d3721995f39b850f469e26..2b1a85b305fd37798f9b517dd5ed386be0dd42e1 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.results.txt index b914320e2ebfb501cd329815130f79349a1dcc47..a9aaad8a87c9421c9b8bd7f48bbed56354d5d097 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages1.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.0.kt index 7535b180c715c162830e8a5c4f6f34e7c3936ee1..c3566d22ea3a31124e5f965b8245f4e22973b14f 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.results.txt index db65a352c0b96ca90d7beb01be00e8271e4da682..7695f346de14fe4fb7d8676b87262436704c76e1 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/javaDerivedInterfaceUsages2.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedAnonymousObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedAnonymousObjects.0.kt index 44715ee1616b7d067f715f9a5f3daaccbdbc17db..13478cbb7eaf08024014bd777ed1528e249ecab2 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedAnonymousObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedAnonymousObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses open class A { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedClasses.0.kt index ce3dcde429858c9b560ab49f4dcd8966c6ff6e13..eba4b02b4ff5fe22aad851c3224daace0ccc2312 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerClasses.0.kt index ce3dcde429858c9b560ab49f4dcd8966c6ff6e13..eba4b02b4ff5fe22aad851c3224daace0ccc2312 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerObjects.0.kt index 44715ee1616b7d067f715f9a5f3daaccbdbc17db..9253eb253d62785d61a4318dba2ff5fb3bcc37a3 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedInnerObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses open class A { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalClasses.0.kt index ce3dcde429858c9b560ab49f4dcd8966c6ff6e13..eba4b02b4ff5fe22aad851c3224daace0ccc2312 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalObjects.0.kt index 44715ee1616b7d067f715f9a5f3daaccbdbc17db..9253eb253d62785d61a4318dba2ff5fb3bcc37a3 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses open class A { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalTraits.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalTraits.0.kt index a9c34385c065c5ce134826fd195e20155abe34f5..270df5c6bf74d0c46c26d15424f38895324e6ad4 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalTraits.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedLocalTraits.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedObjects.0.kt index 44715ee1616b7d067f715f9a5f3daaccbdbc17db..9253eb253d62785d61a4318dba2ff5fb3bcc37a3 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses open class A { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedTraits.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedTraits.0.kt index a9c34385c065c5ce134826fd195e20155abe34f5..270df5c6bf74d0c46c26d15424f38895324e6ad4 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedTraits.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinClassDerivedTraits.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.0.kt index 6d086a3ef0cab3d2934222857bcfaeae096efafd..f22cf0e366fcb6b9976d89201591f36935d0598c 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses fun foo() { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.results.txt index b59f915604f8e01a060562e64d5e7f63c36b358d..b1f3109173020c19459b01cbcb3fbab94843ac03 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedAnonymousObjects.results.txt @@ -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() {} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.0.kt index 7f58abd760276eb641970e5344fe48183b5ed9be..1895e9a6f88693cf208da8a14962f8dc17f81239 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses fun foo() { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.results.txt index 0b1dc6b1d15d7e8663a041079e57c2958e7d56ac..951ffa46c738008ef30584e07603b5f34048badc 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalClasses.results.txt @@ -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() \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.0.kt index 8a38500969d010dedeeb0a3277f315090fe1bde5..8235af552a0699587005c4cc5e299b52428e80ec 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses fun foo() { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.results.txt index e4e3b0916ad7afe3ebdad4123f9f70a98e2f6dec..5bc9c2950616f852f5af6f0b801e7bc7c603c2d4 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalObjects.results.txt @@ -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() \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.0.kt index 257a823c5c7901d0d3072110ee724233dd468c57..23e00da6868cdc0404a32e4787e6753634a79504 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces fun foo() { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.results.txt index 909840a4615f319b2b9dd26a8d57edcb1265c0d8..173f303885f2bb2865efbdbab9aa55faede230a2 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinLocalClassDerivedLocalTraits.results.txt @@ -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 \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.0.kt index 6674ba27a372334b023fce174c375b65e2d9e9f6..6cd84a1c8e1852e1060db2f15568d2226a3bf6d1 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_IGNORE // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.results.txt index 2cea690996087d72801d5ec24496b81334289644..d0f5ea97dd059372f521593498162ee69857b3f0 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedAnonymousObjects.results.txt @@ -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 {}) \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.0.kt index f500eafe97c7938037e1381a1de70dfc210efa54..480570ab7d71fcb1243bab4bb75703dc80fc3f46 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.results.txt index 0f1b045ff4ca3f8b7017029618c6f09dbc6fecbf..05da530b88ad2c24a90cd86e8a54ffcf8c0659ee 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedClasses.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.0.kt index f500eafe97c7938037e1381a1de70dfc210efa54..480570ab7d71fcb1243bab4bb75703dc80fc3f46 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.results.txt index 2dbbeb660f737be2919b27d2c9b1cb9b2067bb7e..36bcbbb6215b7437a39f63af793883725e6d07f2 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerClasses.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.0.kt index f500eafe97c7938037e1381a1de70dfc210efa54..480570ab7d71fcb1243bab4bb75703dc80fc3f46 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.results.txt index f46863d1584a4ce134e0d483ac732251676631ab..05a61375de38f80d0cc1f57a1717b195fc27baa7 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedInnerObjects.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.0.kt index f500eafe97c7938037e1381a1de70dfc210efa54..480570ab7d71fcb1243bab4bb75703dc80fc3f46 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.results.txt index 990ef3e850ebbf332305bfdf60e73558ba6e3bf0..7663e01ee84f87589b412e4e552d4a94ed9f05dd 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalClasses.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.0.kt index 6674ba27a372334b023fce174c375b65e2d9e9f6..254a1fece5b7dec773208e18736e6b7d471693cf 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.results.txt index cd812ff544774771c7b0695b830a590cd0f4d1eb..0821e810871d661356f033623e617355a33731e7 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalObjects.results.txt @@ -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() { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalTraits.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalTraits.0.kt index 07d39824ef90d8130d0004de46ef090f3bf10e7b..2c703bea35ced3496e087de4b08f10b5bb1016b0 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalTraits.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedLocalTraits.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.0.kt index f500eafe97c7938037e1381a1de70dfc210efa54..480570ab7d71fcb1243bab4bb75703dc80fc3f46 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedClasses interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.results.txt index 7b6d20703626ee006aca9236bb5705614ccb165a..425908b1fb862b5d348aacb31a4205845abcda16 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedObjects.results.txt @@ -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 { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.0.kt index 96698320776191a7163cfcb3959f6b1177cd9c70..53594985670b2f9dbe3bc77a601bd9a4117851b1 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.0.kt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.0.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON // PSI_ELEMENT: org.jetbrains.kotlin.psi.KtClass // OPTIONS: derivedInterfaces interface X { diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.results.txt index a94ff5cbda5783c68bade55812e31a0fe4d05b27..a1aed90471b466d7bccdad2e5328f9bfffeb8128 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.results.txt @@ -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 {