[Analysis API FE1.0] fix containing module for some cases
This commit is contained in:
@@ -40,9 +40,11 @@ sourceSets {
|
||||
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>> {
|
||||
kotlinOptions {
|
||||
freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
|
||||
freeCompilerArgs += "-Xcontext-receivers"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
projectTest(jUnitMode = JUnitMode.JUnit5) {
|
||||
dependsOn(":dist")
|
||||
workingDir = rootDir
|
||||
|
||||
+8
-11
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.platform
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
@@ -53,19 +54,15 @@ internal class KtFe10SymbolContainingDeclarationProvider(
|
||||
|
||||
// TODO this is a dummy and incorrect implementation just to satisfy some tests
|
||||
override fun getContainingModule(symbol: KtSymbol): KtModule {
|
||||
// Implicit lambda parameter doesn't have a source PSI.
|
||||
if ((symbol as? KtValueParameterSymbol)?.isImplicitLambdaParameter == true) {
|
||||
// Retrieve the module from its containing lambda instead.
|
||||
getContainingDeclaration(symbol)?.let { parentLambdaSymbol ->
|
||||
return getContainingModule(parentLambdaSymbol)
|
||||
}
|
||||
}
|
||||
return symbol.psi?.getKtModule(analysisSession.analysisContext.resolveSession.project)
|
||||
val psiForModule = symbol.getDescriptor()?.let { DescriptorToSourceUtils.getContainingFile(it) }
|
||||
?: symbol.psi
|
||||
|
||||
return psiForModule?.getKtModule(analysisSession.analysisContext.resolveSession.project)
|
||||
?: symbol.getDescriptor()?.getFakeContainingKtModule()
|
||||
?: TODO(symbol.toString())
|
||||
?: TODO(symbol::class.java.name)
|
||||
}
|
||||
|
||||
private fun DeclarationDescriptor.getFakeContainingKtModule(): KtModule {
|
||||
private fun DeclarationDescriptor.getFakeContainingKtModule(): KtModule? {
|
||||
return when (this) {
|
||||
is DescriptorWithContainerSource -> {
|
||||
val libraryPath = Paths.get((containerSource as JvmPackagePartSource).knownJvmBinaryClass?.containingLibrary!!)
|
||||
@@ -87,7 +84,7 @@ internal class KtFe10SymbolContainingDeclarationProvider(
|
||||
}
|
||||
}
|
||||
|
||||
else -> TODO(this.toString())
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -21,11 +21,12 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class KtFe10DescDefaultPropertySetterSymbol(
|
||||
internal class KtFe10DescDefaultPropertySetterSymbol(
|
||||
private val propertyDescriptor: PropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertySetterSymbol(), KtFe10Symbol {
|
||||
@@ -81,10 +82,13 @@ class KtFe10DescDefaultPropertySetterSymbol(
|
||||
}
|
||||
}
|
||||
|
||||
private class DefaultKtValueParameterSymbol(
|
||||
class DefaultKtValueParameterSymbol(
|
||||
private val propertyDescriptor: PropertyDescriptor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtValueParameterSymbol(), KtFe10Symbol {
|
||||
val descriptor: ValueParameterDescriptor?
|
||||
get() = propertyDescriptor.setter?.valueParameters?.singleOrNull()
|
||||
|
||||
override val hasDefaultValue: Boolean
|
||||
get() = withValidityAssertion { false }
|
||||
|
||||
|
||||
+4
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.KtFe10FileSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.KtFe10PackageSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.KtFe10PsiDefaultPropertyGetterSymbol
|
||||
@@ -135,6 +136,9 @@ internal fun KtSymbol.getDescriptor(): DeclarationDescriptor? {
|
||||
is KtFe10PsiDefaultSetterParameterSymbol -> descriptor
|
||||
is KtFe10PsiDefaultPropertySetterSymbol -> null
|
||||
is KtFe10DescDefaultPropertySetterSymbol -> null
|
||||
is KtFe10FileSymbol -> null
|
||||
is KtFe10DescDefaultPropertySetterSymbol.DefaultKtValueParameterSymbol -> descriptor
|
||||
is KtFe10PsiDefaultPropertySetterSymbol.DefaultKtValueParameterSymbol -> descriptor
|
||||
else -> unexpectedElementError("KtSymbol", this)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -104,9 +104,9 @@ internal class KtFe10PsiDefaultPropertySetterSymbol(
|
||||
return KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
|
||||
private class DefaultKtValueParameterSymbol(
|
||||
class DefaultKtValueParameterSymbol(
|
||||
private val propertyPsi: KtProperty,
|
||||
private val descriptor: ValueParameterDescriptor?,
|
||||
val descriptor: ValueParameterDescriptor?,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtValueParameterSymbol(), KtFe10Symbol {
|
||||
override val hasDefaultValue: Boolean
|
||||
|
||||
Reference in New Issue
Block a user