[Low Level FIR] do not search for declarations from kotlin. package in source modules

This commit is contained in:
Ilya Kirillov
2022-09-23 20:10:20 +02:00
parent a7408f32b0
commit 556b7894d5
62 changed files with 84 additions and 6 deletions
@@ -73,7 +73,8 @@ internal class LLFirNonUnderContentRootSessionFactory(private val project: Proje
this,
components,
project.createDeclarationProvider(contentScope),
project.createPackageProvider(contentScope)
project.createPackageProvider(contentScope),
cabContainKotlinPackage = true,
)
register(FirProvider::class, provider)
@@ -29,6 +29,7 @@ internal class LLFirProvider(
private val moduleComponents: LLFirModuleResolveComponents,
private val declarationProvider: KotlinDeclarationProvider,
packageProvider: KotlinPackageProvider,
cabContainKotlinPackage: Boolean,
) : FirProvider() {
override val symbolProvider: FirSymbolProvider = SymbolProvider()
@@ -37,6 +38,7 @@ internal class LLFirProvider(
moduleComponents.firFileBuilder,
declarationProvider,
packageProvider,
cabContainKotlinPackage,
)
override val isPhasedFirAllowed: Boolean get() = true
@@ -5,11 +5,12 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
import com.google.common.collect.Sets
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirElementFinder
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.createCache
import org.jetbrains.kotlin.fir.caches.firCachesFactory
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.fir.caches.getValue
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
@@ -25,14 +26,17 @@ import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtFile
internal class LLFirProviderHelper(
firSession: FirSession,
private val firFileBuilder: LLFirFileBuilder,
private val declarationProvider: KotlinDeclarationProvider,
private val packageProvider: KotlinPackageProvider,
canContainKotlinPackage: Boolean,
) {
private val allowKotlinPackage = canContainKotlinPackage ||
firSession.languageVersionSettings.getFlag(AnalysisFlags.allowKotlinPackage)
private val classifierByClassId = firSession.firCachesFactory.createCache<ClassId, FirClassLikeDeclaration?> { classId ->
val ktClass = declarationProvider.getClassLikeDeclarationByClassId(classId)
?: return@createCache null
@@ -62,10 +66,12 @@ internal class LLFirProviderHelper(
fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? {
if (classId.isLocal) return null
if (!allowKotlinPackage && classId.isKotlinPackage()) return null
return classifierByClassId.getValue(classId)
}
fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): List<FirCallableSymbol<*>> {
if (!allowKotlinPackage && packageFqName.isKotlinPackage()) return emptyList()
val callableId = CallableId(packageFqName, name)
return callablesByCallableId.getValue(callableId)
}
@@ -86,6 +92,11 @@ internal class LLFirProviderHelper(
}
}
fun getPackage(fqName: FqName): FqName? =
fqName.takeIf(packageProvider::doKotlinPackageExists)
fun getPackage(fqName: FqName): FqName? {
if (!allowKotlinPackage && fqName.isKotlinPackage()) return null
return fqName.takeIf(packageProvider::doKotlinPackageExists)
}
}
private fun ClassId.isKotlinPackage(): Boolean = startsWith(StandardNames.BUILT_INS_PACKAGE_NAME)
private fun FqName.isKotlinPackage(): Boolean = startsWith(StandardNames.BUILT_INS_PACKAGE_NAME)
@@ -98,6 +98,7 @@ internal object LLFirSessionFactory {
components,
project.createDeclarationProvider(contentScope),
project.createPackageProvider(contentScope),
cabContainKotlinPackage = true,
)
register(FirProvider::class, provider)
@@ -202,6 +203,7 @@ internal object LLFirSessionFactory {
components,
project.createDeclarationProvider(contentScope),
project.createPackageProvider(contentScope),
cabContainKotlinPackage = true,
)
register(FirProvider::class, provider)
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION
package kotlin
@@ -1,3 +1,4 @@
// ALLOW_KOTLIN_PACKAGE
package kotlin
@Deprecated("")
@@ -1,3 +1,4 @@
// ALLOW_KOTLIN_PACKAGE
package kotlin
@Deprecated("")
@@ -1,5 +1,7 @@
// FIR_IDENTICAL
// !API_VERSION: 1.4
// ALLOW_KOTLIN_PACKAGE
package kotlin
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !API_VERSION: 1.4
// ALLOW_KOTLIN_PACKAGE
package kotlin
@@ -1,3 +1,5 @@
// ALLOW_KOTLIN_PACKAGE
package kotlin
@Deprecated("foo test")
@@ -1,3 +1,5 @@
// ALLOW_KOTLIN_PACKAGE
package kotlin
@Deprecated("foo test")
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !API_VERSION: 1.4
package kotlin
@@ -1,5 +1,7 @@
// FIR_IDENTICAL
// SKIP_TXT
// ALLOW_KOTLIN_PACKAGE
// MODULE: m1-common
// FILE: common.kt
@@ -1,4 +1,5 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ALLOW_KOTLIN_PACKAGE
// FILE: annotation.kt
@@ -1,4 +1,5 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ALLOW_KOTLIN_PACKAGE
// FILE: annotation.kt
@@ -1,6 +1,7 @@
// FIR_IDENTICAL
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -3,6 +3,7 @@
// !API_VERSION: 1.4
// !LANGUAGE: -InlineClasses
// !DIAGNOSTICS: -UNUSED_PARAMETER
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -2,6 +2,7 @@
// !SKIP_JAVAC
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_VARIABLE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_VARIABLE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_VARIABLE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_VARIABLE
package kotlin.jvm
@@ -2,6 +2,7 @@
// !SKIP_JAVAC
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_VARIABLE
package kotlin.jvm
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !SKIP_JAVAC
// ALLOW_KOTLIN_PACKAGE
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses
@@ -1,6 +1,7 @@
// FIR_IDENTICAL
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,6 +1,7 @@
// FIR_IDENTICAL
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !SKIP_JAVAC
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
package kotlin.jvm
@@ -2,6 +2,7 @@
// !SKIP_JAVAC
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !SKIP_JAVAC
// SKIP_TXT
// !LANGUAGE: +InlineClasses
@@ -2,6 +2,7 @@
// !SKIP_JAVAC
// SKIP_TXT
// !LANGUAGE: +InlineClasses, -GenericInlineClassParameter
// ALLOW_KOTLIN_PACKAGE
package kotlin.jvm
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE, -UNUSED_ANONYMOUS_PARAMETER
package kotlin.jvm
@@ -1,5 +1,6 @@
// !SKIP_JAVAC
// !LANGUAGE: +InlineClasses
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE, -UNUSED_ANONYMOUS_PARAMETER
package kotlin.jvm
@@ -1,3 +1,4 @@
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
// FILE: test.kt
@@ -1,3 +1,4 @@
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
// FILE: test.kt
@@ -1,3 +1,4 @@
// ALLOW_KOTLIN_PACKAGE
// SKIP_TXT
// FILE: test.kt
@@ -1,3 +1,4 @@
// ALLOW_KOTLIN_PACKAGE
// SKIP_TXT
// FILE: test.kt
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION
// ISSUE: KT-11265
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION -OPT_IN_USAGE -EXPERIMENTAL_UNSIGNED_LITERALS
// ISSUE: KT-11265
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION -OPT_IN_USAGE -EXPERIMENTAL_UNSIGNED_LITERALS
// ISSUE: KT-11265
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION -OPT_IN_USAGE -EXPERIMENTAL_UNSIGNED_LITERALS
// ISSUE: KT-11265
@@ -1,4 +1,5 @@
// !LANGUAGE: -OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION
// ISSUE: KT-11265
@@ -1,4 +1,5 @@
// !LANGUAGE: -OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION
// ISSUE: KT-11265
@@ -1,4 +1,5 @@
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION
// ISSUE: KT-11265
@@ -1,4 +1,5 @@
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION
// ISSUE: KT-11265
@@ -1,4 +1,5 @@
// FIR_IDENTICAL
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION
// ISSUE: KT-11265
@@ -1,5 +1,6 @@
// FIR_IDENTICAL
// !LANGUAGE: +OverloadResolutionByLambdaReturnType
// ALLOW_KOTLIN_PACKAGE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_EXPRESSION -OPT_IN_USAGE -EXPERIMENTAL_UNSIGNED_LITERALS
// ISSUE: KT-11265