From 09f9489619b1fa30c71f07e95541d17b493bc522 Mon Sep 17 00:00:00 2001 From: Andrei Klunnyi Date: Sat, 27 Feb 2021 19:32:00 +0100 Subject: [PATCH] [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. --- .../FirAbstractPhaseTransformer.kt | 12 +-- ...rLegacySealedClassInheritorsTransformer.kt | 38 ------- .../transformers/FirTotalResolveProcessor.kt | 12 +-- .../resolve/transformers/ResolvePhaseUtils.kt | 24 +---- .../kotlin/generators/tests/GenerateTests.kt | 4 + .../api/FirIdeSealedHierarchyProcessor.kt | 101 ++++++++++++++++++ .../idea/fir/low/level/api/FirPhaseRunner.kt | 32 +++++- .../AnotherModuleSamePackageDeclarations.kt | 5 + .../directInheritors/expected.txt | 18 ++++ .../main/SamePackageDeclarations.kt | 5 + .../AnotherPackageDeclarations.kt | 7 ++ .../directInheritors/main/main.kt | 29 +++++ .../directInheritors/structure.json | 7 ++ .../AbstractFirMultiModuleLazyResolveTest.kt | 13 ++- .../api/AbstractFirMultiModuleResolveTest.kt | 15 ++- .../api/AbstractFirSealedInheritorsTest.kt | 39 +++++++ .../api/FirSealedInheritorsTestGenerated.java | 36 +++++++ .../api/fir/components/KtFirTypeProvider.kt | 2 +- .../jetbrains/kotlin/idea/util/psiUtils.kt | 15 +++ idea/resources-fir/META-INF/plugin.xml | 2 +- .../javaConstructorInDelegationCall.0.java | 1 + ...aDefaultConstructorInDelegationCall.0.java | 1 + .../JKClassDerivedAnonymousObjects.0.java | 1 + .../JKClassDerivedInnerClasses.0.java | 1 + .../JKClassDerivedInnerObjects.0.java | 1 + .../JKDerivedInterfaces.0.java | 1 + .../JKInterfaceDerivedAnonymousObjects.0.java | 1 + .../JKInterfaceDerivedClasses.0.java | 1 + .../JKInterfaceDerivedInnerClasses.0.java | 1 + .../JKInterfaceDerivedInnerObjects.0.java | 1 + .../JKInterfaceDerivedLocalClasses.0.java | 1 + .../JKInterfaceDerivedLocalObjects.0.java | 1 + .../JKInterfaceDerivedLocalTraits.0.java | 1 + .../JKInterfaceDerivedObjects.0.java | 1 + .../JKMethodOverrides.0.java | 1 + .../JKMethodOverrides.results.txt | 2 +- .../javaDerivedClassUsages2.0.kt | 1 + .../javaDerivedClassUsages2.results.txt | 4 +- .../javaDerivedInterfaceUsages1.0.kt | 1 + .../javaDerivedInterfaceUsages1.results.txt | 2 +- .../javaDerivedInterfaceUsages2.0.kt | 1 + .../javaDerivedInterfaceUsages2.results.txt | 2 +- .../kotlinClassDerivedAnonymousObjects.0.kt | 1 + .../kotlinClassDerivedClasses.0.kt | 1 + .../kotlinClassDerivedInnerClasses.0.kt | 1 + .../kotlinClassDerivedInnerObjects.0.kt | 1 + .../kotlinClassDerivedLocalClasses.0.kt | 1 + .../kotlinClassDerivedLocalObjects.0.kt | 1 + .../kotlinClassDerivedLocalTraits.0.kt | 1 + .../kotlinClassDerivedObjects.0.kt | 1 + .../kotlinClassDerivedTraits.0.kt | 1 + ...tlinLocalClassDerivedAnonymousObjects.0.kt | 1 + ...alClassDerivedAnonymousObjects.results.txt | 6 +- .../kotlinLocalClassDerivedLocalClasses.0.kt | 1 + ...nLocalClassDerivedLocalClasses.results.txt | 6 +- .../kotlinLocalClassDerivedLocalObjects.0.kt | 1 + ...nLocalClassDerivedLocalObjects.results.txt | 6 +- .../kotlinLocalClassDerivedLocalTraits.0.kt | 1 + ...inLocalClassDerivedLocalTraits.results.txt | 4 +- .../kotlinTraitDerivedAnonymousObjects.0.kt | 1 + ...inTraitDerivedAnonymousObjects.results.txt | 4 +- .../kotlinTraitDerivedClasses.0.kt | 1 + .../kotlinTraitDerivedClasses.results.txt | 2 +- .../kotlinTraitDerivedInnerClasses.0.kt | 1 + ...kotlinTraitDerivedInnerClasses.results.txt | 2 +- .../kotlinTraitDerivedInnerObjects.0.kt | 1 + ...kotlinTraitDerivedInnerObjects.results.txt | 2 +- .../kotlinTraitDerivedLocalClasses.0.kt | 1 + ...kotlinTraitDerivedLocalClasses.results.txt | 2 +- .../kotlinTraitDerivedLocalObjects.0.kt | 1 + ...kotlinTraitDerivedLocalObjects.results.txt | 2 +- .../kotlinTraitDerivedLocalTraits.0.kt | 1 + .../kotlinTraitDerivedObjects.0.kt | 1 + .../kotlinTraitDerivedObjects.results.txt | 2 +- .../kotlinTraitDerivedTraits.0.kt | 1 + .../kotlinTraitDerivedTraits.results.txt | 2 +- 76 files changed, 389 insertions(+), 117 deletions(-) delete mode 100644 compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirLegacySealedClassInheritorsTransformer.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeSealedHierarchyProcessor.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/anotherModule/AnotherModuleSamePackageDeclarations.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/expected.txt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/SamePackageDeclarations.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/anotherpackage/AnotherPackageDeclarations.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/main/main.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/resolveSealed/directInheritors/structure.json create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirSealedInheritorsTest.kt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirSealedInheritorsTestGenerated.java 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 e70e1ca8b07..4efc5247bf4 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 bc813056e6d..00000000000 --- 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 a385324ff3b..adda27981ae 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 a4e76d1a194..2ee9a1b9312 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 05a944a2e18..422cd867c35 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 00000000000..6357171a61e --- /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 12d3be6addb..31d66909665 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 00000000000..4e75fd12558 --- /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 00000000000..698f1d19a11 --- /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 00000000000..f6d4fc9d786 --- /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 00000000000..f39899b41e3 --- /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 00000000000..1010543c424 --- /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 00000000000..991c4e67b28 --- /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 5812a1e36ce..d7e46ba96d9 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 696a1cf2c59..607bf8b9d0a 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 00000000000..f0bc36f5037 --- /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 00000000000..23c2d47d918 --- /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 c109af8e63c..e31342c84d4 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 8c05e75bd25..adfc5b52bbc 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 69c6efe8e26..49cb90daf46 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 000b72c9223..82852a9ca89 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 5a59e680d7a..ee84a159fdc 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 eea2d7f95ba..41f1be47d5d 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 eea2d7f95ba..41f1be47d5d 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 eea2d7f95ba..41f1be47d5d 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 a031139d7c7..69214e8f2b2 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 2f1ebac5750..5efbcf237ac 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 699b54fd6c4..8a521db44e9 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 699b54fd6c4..b04b36c6e5e 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 2f1ebac5750..eb040cd9ce4 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 2f1ebac5750..eb040cd9ce4 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 2f1ebac5750..eb040cd9ce4 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 a031139d7c7..69214e8f2b2 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 2f1ebac5750..eb040cd9ce4 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 bfec0405291..f48099587b2 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 e178f75e6ec..7a5c76a0914 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 ddc6a3a7895..800285102fc 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 d3b1e8b6e4e..f309f88ec0e 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 329ec83922a..2b1a85b305f 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 b914320e2eb..a9aaad8a87c 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 7535b180c71..c3566d22ea3 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 db65a352c0b..7695f346de1 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 44715ee1616..13478cbb7ea 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 ce3dcde4298..eba4b02b4ff 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 ce3dcde4298..eba4b02b4ff 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 44715ee1616..9253eb253d6 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 ce3dcde4298..eba4b02b4ff 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 44715ee1616..9253eb253d6 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 a9c34385c06..270df5c6bf7 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 44715ee1616..9253eb253d6 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 a9c34385c06..270df5c6bf7 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 6d086a3ef0c..f22cf0e366f 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 b59f915604f..b1f31091730 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 7f58abd7602..1895e9a6f88 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 0b1dc6b1d15..951ffa46c73 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 8a38500969d..8235af552a0 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 e4e3b0916ad..5bc9c295061 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 257a823c5c7..23e00da6868 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 909840a4615..173f303885f 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 6674ba27a37..6cd84a1c8e1 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 2cea6909960..d0f5ea97dd0 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 f500eafe97c..480570ab7d7 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 0f1b045ff4c..05da530b88a 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 f500eafe97c..480570ab7d7 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 2dbbeb660f7..36bcbbb6215 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 f500eafe97c..480570ab7d7 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 f46863d1584..05a61375de3 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 f500eafe97c..480570ab7d7 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 990ef3e850e..7663e01ee84 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 6674ba27a37..254a1fece5b 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 cd812ff5447..0821e810871 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 07d39824ef9..2c703bea35c 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 f500eafe97c..480570ab7d7 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 7b6d2070362..425908b1fb8 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 96698320776..53594985670 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 a94ff5cbda5..a1aed90471b 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 {