FIR IDE: add type parameters support to scopes
This commit is contained in:
@@ -14,24 +14,24 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
interface KtScope : ValidityTokenOwner {
|
interface KtScope : ValidityTokenOwner {
|
||||||
// TODO check that names are accessible
|
// TODO check that names are accessible
|
||||||
// maybe return some kind of lazy set
|
// maybe return some kind of lazy set
|
||||||
fun getAllNames(): Set<Name> = withValidityAssertion { getCallableNames() + getClassLikeSymbolNames() }
|
fun getAllNames(): Set<Name> = withValidityAssertion { getCallableNames() + getClassifierNames() }
|
||||||
|
|
||||||
fun getCallableNames(): Set<Name>
|
fun getCallableNames(): Set<Name>
|
||||||
fun getClassLikeSymbolNames(): Set<Name>
|
fun getClassifierNames(): Set<Name>
|
||||||
|
|
||||||
|
|
||||||
fun getAllSymbols(): Sequence<KtSymbol> = withValidityAssertion {
|
fun getAllSymbols(): Sequence<KtSymbol> = withValidityAssertion {
|
||||||
sequence {
|
sequence {
|
||||||
yieldAll(getCallableSymbols())
|
yieldAll(getCallableSymbols())
|
||||||
yieldAll(getClassClassLikeSymbols())
|
yieldAll(getClassifierSymbols())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCallableSymbols(): Sequence<KtCallableSymbol>
|
fun getCallableSymbols(): Sequence<KtCallableSymbol>
|
||||||
fun getClassClassLikeSymbols(): Sequence<KtClassLikeSymbol>
|
fun getClassifierSymbols(): Sequence<KtClassifierSymbol>
|
||||||
|
|
||||||
fun containsName(name: Name): Boolean = withValidityAssertion {
|
fun containsName(name: Name): Boolean = withValidityAssertion {
|
||||||
name in getCallableNames() || name in getClassLikeSymbolNames()
|
name in getCallableNames() || name in getClassifierNames()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -9,8 +9,13 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
|
sealed class KtClassifierSymbol : KtSymbol, KtNamedSymbol
|
||||||
|
|
||||||
sealed class KtClassLikeSymbol : KtSymbol, KtNamedSymbol, KtSymbolWithKind {
|
abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol {
|
||||||
|
abstract override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol>
|
||||||
|
}
|
||||||
|
|
||||||
|
sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind {
|
||||||
abstract val classIdIfNonLocal: ClassId?
|
abstract val classIdIfNonLocal: ClassId?
|
||||||
|
|
||||||
abstract override fun createPointer(): KtSymbolPointer<KtClassLikeSymbol>
|
abstract override fun createPointer(): KtSymbolPointer<KtClassLikeSymbol>
|
||||||
|
|||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.frontend.api.symbols
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
|
||||||
|
|
||||||
abstract class KtTypeParameterSymbol : KtSymbol, KtNamedSymbol {
|
|
||||||
abstract override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol>
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+8
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
|||||||
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
@@ -108,6 +109,13 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
TODO(fir::class.toString())
|
TODO(fir::class.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun buildClassifierSymbol(firSymbol: FirClassifierSymbol<*>): KtClassifierSymbol = when (val fir = firSymbol.fir) {
|
||||||
|
is FirClassLikeDeclaration -> buildClassLikeSymbol(fir)
|
||||||
|
is FirTypeParameter -> buildTypeParameterSymbol(fir)
|
||||||
|
else ->
|
||||||
|
TODO(fir::class.toString())
|
||||||
|
}
|
||||||
|
|
||||||
fun buildClassSymbol(fir: FirRegularClass) = symbolsCache.cache(fir) { KtFirClassOrObjectSymbol(fir, resolveState, token, this) }
|
fun buildClassSymbol(fir: FirRegularClass) = symbolsCache.cache(fir) { KtFirClassOrObjectSymbol(fir, resolveState, token, this) }
|
||||||
|
|
||||||
// TODO it can be a constructor parameter, which may be split into parameter & property
|
// TODO it can be a constructor parameter, which may be split into parameter & property
|
||||||
|
|||||||
+5
-4
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -34,9 +35,9 @@ class KtFirCompositeScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion {
|
override fun getClassifierNames(): Set<Name> = withValidityAssertion {
|
||||||
buildSet {
|
buildSet {
|
||||||
subScopes.flatMapTo(this) { it.getClassLikeSymbolNames() }
|
subScopes.flatMapTo(this) { it.getClassifierNames() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,9 +53,9 @@ class KtFirCompositeScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassClassLikeSymbols(): Sequence<KtClassLikeSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
sequence {
|
sequence {
|
||||||
subScopes.forEach { yieldAll(it.getClassClassLikeSymbols()) }
|
subScopes.forEach { yieldAll(it.getClassifierSymbols()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-18
@@ -5,15 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
|
package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
|
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
@@ -21,6 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -32,7 +28,7 @@ internal abstract class KtFirDelegatingScope<S>(
|
|||||||
abstract val firScope: S
|
abstract val firScope: S
|
||||||
|
|
||||||
private val allNamesCached by cached {
|
private val allNamesCached by cached {
|
||||||
getCallableNames() + getClassLikeSymbolNames()
|
getCallableNames() + getClassifierNames()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAllNames(): Set<Name> = allNamesCached
|
override fun getAllNames(): Set<Name> = allNamesCached
|
||||||
@@ -41,7 +37,7 @@ internal abstract class KtFirDelegatingScope<S>(
|
|||||||
firScope.getCallableNames()
|
firScope.getCallableNames()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion {
|
override fun getClassifierNames(): Set<Name> = withValidityAssertion {
|
||||||
firScope.getClassifierNames()
|
firScope.getClassifierNames()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,8 +45,8 @@ internal abstract class KtFirDelegatingScope<S>(
|
|||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassClassLikeSymbols(): Sequence<KtClassLikeSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun containsName(name: Name): Boolean = withValidityAssertion {
|
override fun containsName(name: Name): Boolean = withValidityAssertion {
|
||||||
@@ -80,14 +76,13 @@ internal fun FirScope.getCallableSymbols(callableNames: Collection<Name>, builde
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun FirScope.getClassLikeSymbols(classLikeNames: Collection<Name>, builder: KtSymbolByFirBuilder) = sequence {
|
internal fun FirScope.getClassifierSymbols(classLikeNames: Collection<Name>, builder: KtSymbolByFirBuilder): Sequence<KtClassifierSymbol> =
|
||||||
classLikeNames.forEach { name ->
|
sequence {
|
||||||
val classLikeSymbols = mutableListOf<KtClassLikeSymbol>()
|
classLikeNames.forEach { name ->
|
||||||
processClassifiersByName(name) { firSymbol ->
|
val classifierSymbols = mutableListOf<KtClassifierSymbol>()
|
||||||
(firSymbol.fir as? FirClassLikeDeclaration<*>)?.let {
|
processClassifiersByName(name) { firSymbol ->
|
||||||
classLikeSymbols.add(builder.buildClassLikeSymbol(it))
|
classifierSymbols.add(builder.buildClassifierSymbol(firSymbol))
|
||||||
}
|
}
|
||||||
|
yieldAll(classifierSymbols)
|
||||||
}
|
}
|
||||||
yieldAll(classLikeSymbols)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
+4
-3
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.NonStarImport
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.NonStarImport
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -46,8 +47,8 @@ internal class KtFirNonStarImportingScope(
|
|||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassClassLikeSymbols(): Sequence<KtClassLikeSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -55,7 +56,7 @@ internal class KtFirNonStarImportingScope(
|
|||||||
imports.mapNotNullTo(hashSetOf()) { it.callableName }
|
imports.mapNotNullTo(hashSetOf()) { it.callableName }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion {
|
override fun getClassifierNames(): Set<Name> = withValidityAssertion {
|
||||||
imports.mapNotNullTo((hashSetOf())) { it.relativeClassName?.shortName() }
|
imports.mapNotNullTo((hashSetOf())) { it.relativeClassName?.shortName() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
|
||||||
@@ -39,7 +40,7 @@ internal class KtFirPackageScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion {
|
override fun getClassifierNames(): Set<Name> = withValidityAssertion {
|
||||||
KotlinTopLevelClassByPackageIndex.getInstance()[fqName.asString(), project, firScope.session.searchScope]
|
KotlinTopLevelClassByPackageIndex.getInstance()[fqName.asString(), project, firScope.session.searchScope]
|
||||||
.mapNotNullTo(hashSetOf()) { it.nameAsName }
|
.mapNotNullTo(hashSetOf()) { it.nameAsName }
|
||||||
}
|
}
|
||||||
@@ -48,7 +49,7 @@ internal class KtFirPackageScope(
|
|||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassClassLikeSymbols(): Sequence<KtClassLikeSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtStarImportingScope
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.StarImport
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.StarImport
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
|
||||||
@@ -55,8 +55,8 @@ internal class KtFirStarImportingScope(
|
|||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassClassLikeSymbols(): Sequence<KtClassLikeSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo cache?
|
// todo cache?
|
||||||
@@ -72,7 +72,7 @@ internal class KtFirStarImportingScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassLikeSymbolNames(): Set<Name> = withValidityAssertion {
|
override fun getClassifierNames(): Set<Name> = withValidityAssertion {
|
||||||
imports.flatMapTo(hashSetOf()) { import ->
|
imports.flatMapTo(hashSetOf()) { import ->
|
||||||
if (import.relativeClassName == null) {
|
if (import.relativeClassName == null) {
|
||||||
packageHelper.getPackageTopLevelClassifiers(import.packageFqName)
|
packageHelper.getPackageTopLevelClassifiers(import.packageFqName)
|
||||||
|
|||||||
Reference in New Issue
Block a user