diff --git a/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/KotlinUClass.kt b/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/KotlinUClass.kt index 884f4b1c5b8..e3c67ee04a8 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/KotlinUClass.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/KotlinUClass.kt @@ -17,14 +17,9 @@ package org.jetbrains.kotlin.uast import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.codegen.ClassBuilderMode -import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker -import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny -import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtObjectDeclaration @@ -74,10 +69,10 @@ class KotlinUClass( } override val internalName by lz { - val descriptor = resolveToDescriptor() ?: return@lz null - val typeMapper = KotlinTypeMapper(BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES, NoResolveFileClassesProvider, null, - IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME) - typeMapper.mapClass(descriptor).internalName + val generationState = psi.getGenerationState() + val descriptor = generationState.bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, psi] + as? ClassDescriptor ?: return@lz null + generationState.typeMapper.mapClass(descriptor).internalName } override fun getSuperClass(context: UastContext): UClass? { diff --git a/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/kotlinUFunctions.kt b/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/kotlinUFunctions.kt index 622e58573d1..a869bea3e7f 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/kotlinUFunctions.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/declarations/kotlinUFunctions.kt @@ -16,16 +16,11 @@ package org.jetbrains.kotlin.uast -import org.jetbrains.kotlin.codegen.ClassBuilderMode -import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker -import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -53,11 +48,10 @@ abstract class KotlinAbstractUFunction : KotlinAbstractUElement(), UFunction, Ps } override val bytecodeDescriptor by lz { - val bindingContext = psi.analyze(BodyResolveMode.PARTIAL) - val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, psi] as? FunctionDescriptor ?: return@lz null - val typeMapper = KotlinTypeMapper(BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES, NoResolveFileClassesProvider, null, - IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME) - typeMapper.mapAsmMethod(descriptor).descriptor + val generationState = psi.getGenerationState() + val descriptor = generationState.bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, psi] + as? FunctionDescriptor ?: return@lz null + generationState.typeMapper.mapAsmMethod(descriptor).descriptor } override fun hasModifier(modifier: UastModifier) = psi.hasModifier(modifier) diff --git a/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/internal/kotlinInternalUastUtils.kt b/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/internal/kotlinInternalUastUtils.kt index ddc1afbb2f5..408824e7936 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/internal/kotlinInternalUastUtils.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/kotlin/uast/internal/kotlinInternalUastUtils.kt @@ -110,4 +110,17 @@ internal fun DeclarationDescriptor.toSource() = try { null } -internal fun lz(initializer: () -> T) = lazy(LazyThreadSafetyMode.NONE, initializer) \ No newline at end of file +internal fun lz(initializer: () -> T) = lazy(LazyThreadSafetyMode.NONE, initializer) + +internal fun KtElement.getGenerationState(): GenerationState { + val analysisResult = this.analyzeAndGetResult() + val file = getContainingKtFile() + val state = GenerationState( + file.project, + ClassBuilderFactories.THROW_EXCEPTION, + analysisResult.moduleDescriptor, + analysisResult.bindingContext, + listOf(file)) + state.beforeCompile() + return state +} \ No newline at end of file