Skip to content

Commit e8aef7d

Browse files
Minor: move methods from companion object
1 parent 3678bda commit e8aef7d

File tree

1 file changed

+100
-99
lines changed

1 file changed

+100
-99
lines changed

idea/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt

Lines changed: 100 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -360,131 +360,114 @@ public class KotlinPositionManager(private val myDebugProcess: DebugProcess) : M
360360
myTypeMappers.put(key, value)
361361
}
362362

363-
companion object {
364-
public fun createTypeMapper(file: KtFile): JetTypeMapper {
365-
val project = file.project
366-
367-
val analysisResult = file.analyzeFullyAndGetResult()
368-
analysisResult.throwIfError()
369-
370-
val state = GenerationState(
371-
project,
372-
ClassBuilderFactories.THROW_EXCEPTION,
373-
analysisResult.moduleDescriptor,
374-
analysisResult.bindingContext,
375-
listOf(file))
376-
state.beforeCompile()
377-
return state.typeMapper
378-
}
379-
380-
public fun getInternalClassNameForElement(notPositionedElement: PsiElement?, typeMapper: JetTypeMapper, file: KtFile, isInLibrary: Boolean): PositionedElement {
381-
val element = getElementToCalculateClassName(notPositionedElement)
382-
when {
383-
element is KtClassOrObject -> return PositionedElement(getJvmInternalNameForImpl(typeMapper, element), element)
384-
element is KtFunctionLiteral -> {
385-
if (isInlinedLambda(element, typeMapper.bindingContext)) {
386-
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
387-
}
388-
else {
389-
val asmType = CodegenBinding.asmTypeForAnonymousClass(typeMapper.bindingContext, element)
390-
return PositionedElement(asmType.internalName, element)
391-
}
392-
}
393-
element is KtAnonymousInitializer -> {
394-
val parent = getElementToCalculateClassName(element.parent)
395-
// Class-object initializer
396-
if (parent is KtObjectDeclaration && parent.isCompanion()) {
397-
return PositionedElement(getInternalClassNameForElement(parent.parent, typeMapper, file, isInLibrary).className, parent)
398-
}
363+
private fun getInternalClassNameForElement(notPositionedElement: PsiElement?, typeMapper: JetTypeMapper, file: KtFile, isInLibrary: Boolean): PositionedElement {
364+
val element = getElementToCalculateClassName(notPositionedElement)
365+
when {
366+
element is KtClassOrObject -> return PositionedElement(getJvmInternalNameForImpl(typeMapper, element), element)
367+
element is KtFunctionLiteral -> {
368+
if (isInlinedLambda(element, typeMapper.bindingContext)) {
399369
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
400370
}
401-
element is KtProperty && (!element.isTopLevel || !isInLibrary) -> {
402-
if (isInPropertyAccessor(notPositionedElement)) {
403-
val classOrObject = PsiTreeUtil.getParentOfType(element, KtClassOrObject::class.java)
404-
if (classOrObject != null) {
405-
return PositionedElement(getJvmInternalNameForImpl(typeMapper, classOrObject), element)
406-
}
371+
else {
372+
val asmType = CodegenBinding.asmTypeForAnonymousClass(typeMapper.bindingContext, element)
373+
return PositionedElement(asmType.internalName, element)
374+
}
375+
}
376+
element is KtAnonymousInitializer -> {
377+
val parent = getElementToCalculateClassName(element.parent)
378+
// Class-object initializer
379+
if (parent is KtObjectDeclaration && parent.isCompanion()) {
380+
return PositionedElement(getInternalClassNameForElement(parent.parent, typeMapper, file, isInLibrary).className, parent)
381+
}
382+
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
383+
}
384+
element is KtProperty && (!element.isTopLevel || !isInLibrary) -> {
385+
if (isInPropertyAccessor(notPositionedElement)) {
386+
val classOrObject = PsiTreeUtil.getParentOfType(element, KtClassOrObject::class.java)
387+
if (classOrObject != null) {
388+
return PositionedElement(getJvmInternalNameForImpl(typeMapper, classOrObject), element)
407389
}
390+
}
408391

409-
val descriptor = typeMapper.bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element)
410-
if (descriptor !is PropertyDescriptor) {
411-
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
412-
}
392+
val descriptor = typeMapper.bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element)
393+
if (descriptor !is PropertyDescriptor) {
394+
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
395+
}
413396

414-
return PositionedElement(getJvmInternalNameForPropertyOwner(typeMapper, descriptor), element)
397+
return PositionedElement(getJvmInternalNameForPropertyOwner(typeMapper, descriptor), element)
398+
}
399+
element is KtNamedFunction -> {
400+
if (isInlinedLambda(element, typeMapper.bindingContext)) {
401+
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
415402
}
416-
element is KtNamedFunction -> {
417-
if (isInlinedLambda(element, typeMapper.bindingContext)) {
418-
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
419-
}
420403

421-
val parent = getElementToCalculateClassName(element.parent)
422-
if (parent is KtClassOrObject) {
423-
return PositionedElement(getJvmInternalNameForImpl(typeMapper, parent), element)
424-
}
425-
else if (parent != null) {
426-
val asmType = CodegenBinding.asmTypeForAnonymousClass(typeMapper.bindingContext, element)
427-
return PositionedElement(asmType.internalName, element)
428-
}
404+
val parent = getElementToCalculateClassName(element.parent)
405+
if (parent is KtClassOrObject) {
406+
return PositionedElement(getJvmInternalNameForImpl(typeMapper, parent), element)
407+
}
408+
else if (parent != null) {
409+
val asmType = CodegenBinding.asmTypeForAnonymousClass(typeMapper.bindingContext, element)
410+
return PositionedElement(asmType.internalName, element)
429411
}
430412
}
431-
432-
return PositionedElement(NoResolveFileClassesProvider.getFileClassInternalName(file), element)
433413
}
434414

435-
private val TYPES_TO_CALCULATE_CLASSNAME: Array<Class<out KtElement>> =
436-
arrayOf(KtClassOrObject::class.java,
437-
KtFunctionLiteral::class.java,
438-
KtNamedFunction::class.java,
439-
KtProperty::class.java,
440-
KtAnonymousInitializer::class.java)
415+
return PositionedElement(NoResolveFileClassesProvider.getFileClassInternalName(file), element)
416+
}
441417

442-
private fun getElementToCalculateClassName(notPositionedElement: PsiElement?): KtElement? {
443-
if (notPositionedElement?.javaClass as Class<*> in TYPES_TO_CALCULATE_CLASSNAME) return notPositionedElement as KtElement
418+
private val TYPES_TO_CALCULATE_CLASSNAME: Array<Class<out KtElement>> =
419+
arrayOf(KtClassOrObject::class.java,
420+
KtFunctionLiteral::class.java,
421+
KtNamedFunction::class.java,
422+
KtProperty::class.java,
423+
KtAnonymousInitializer::class.java)
444424

445-
return PsiTreeUtil.getParentOfType(notPositionedElement, *TYPES_TO_CALCULATE_CLASSNAME)
446-
}
425+
private fun getElementToCalculateClassName(notPositionedElement: PsiElement?): KtElement? {
426+
if (notPositionedElement?.javaClass as Class<*> in TYPES_TO_CALCULATE_CLASSNAME) return notPositionedElement as KtElement
447427

448-
public fun getJvmInternalNameForPropertyOwner(typeMapper: JetTypeMapper, descriptor: PropertyDescriptor): String {
449-
return typeMapper.mapOwner(
450-
if (JvmAbi.isPropertyWithBackingFieldInOuterClass(descriptor)) descriptor.containingDeclaration else descriptor
451-
).internalName
452-
}
428+
return PsiTreeUtil.getParentOfType(notPositionedElement, *TYPES_TO_CALCULATE_CLASSNAME)
429+
}
453430

454-
private fun isInPropertyAccessor(element: PsiElement?) =
455-
element is KtPropertyAccessor ||
456-
PsiTreeUtil.getParentOfType(element, KtProperty::class.java, KtPropertyAccessor::class.java) is KtPropertyAccessor
431+
public fun getJvmInternalNameForPropertyOwner(typeMapper: JetTypeMapper, descriptor: PropertyDescriptor): String {
432+
return typeMapper.mapOwner(
433+
if (JvmAbi.isPropertyWithBackingFieldInOuterClass(descriptor)) descriptor.containingDeclaration else descriptor
434+
).internalName
435+
}
457436

458-
private fun getElementToCreateTypeMapperForLibraryFile(element: PsiElement?) =
459-
if (element is KtElement) element else PsiTreeUtil.getParentOfType(element, KtElement::class.java)
437+
private fun isInPropertyAccessor(element: PsiElement?) =
438+
element is KtPropertyAccessor ||
439+
PsiTreeUtil.getParentOfType(element, KtProperty::class.java, KtPropertyAccessor::class.java) is KtPropertyAccessor
460440

461-
private fun getJvmInternalNameForImpl(typeMapper: JetTypeMapper, ktClass: KtClassOrObject): String? {
462-
val classDescriptor = typeMapper.bindingContext.get<PsiElement, ClassDescriptor>(BindingContext.CLASS, ktClass) ?: return null
441+
private fun getElementToCreateTypeMapperForLibraryFile(element: PsiElement?) =
442+
if (element is KtElement) element else PsiTreeUtil.getParentOfType(element, KtElement::class.java)
463443

464-
if (ktClass is KtClass && ktClass.isInterface()) {
465-
return typeMapper.mapDefaultImpls(classDescriptor).internalName
466-
}
444+
private fun getJvmInternalNameForImpl(typeMapper: JetTypeMapper, ktClass: KtClassOrObject): String? {
445+
val classDescriptor = typeMapper.bindingContext.get<PsiElement, ClassDescriptor>(BindingContext.CLASS, ktClass) ?: return null
467446

468-
return typeMapper.mapClass(classDescriptor).internalName
447+
if (ktClass is KtClass && ktClass.isInterface()) {
448+
return typeMapper.mapDefaultImpls(classDescriptor).internalName
469449
}
470450

471-
private fun createTypeMapperForLibraryFile(notPositionedElement: PsiElement?, file: KtFile): JetTypeMapper {
472-
val element = getElementToCreateTypeMapperForLibraryFile(notPositionedElement)
473-
val analysisResult = element!!.analyzeAndGetResult()
451+
return typeMapper.mapClass(classDescriptor).internalName
452+
}
474453

475-
val state = GenerationState(file.project, ClassBuilderFactories.THROW_EXCEPTION,
476-
analysisResult.moduleDescriptor, analysisResult.bindingContext, listOf(file))
477-
state.beforeCompile()
478-
return state.typeMapper
479-
}
454+
private fun createTypeMapperForLibraryFile(notPositionedElement: PsiElement?, file: KtFile): JetTypeMapper {
455+
val element = getElementToCreateTypeMapperForLibraryFile(notPositionedElement)
456+
val analysisResult = element!!.analyzeAndGetResult()
480457

481-
public fun isInlinedLambda(functionLiteral: KtFunction, context: BindingContext): Boolean {
482-
return InlineUtil.isInlinedArgument(functionLiteral, context, false)
483-
}
458+
val state = GenerationState(file.project, ClassBuilderFactories.THROW_EXCEPTION,
459+
analysisResult.moduleDescriptor, analysisResult.bindingContext, listOf(file))
460+
state.beforeCompile()
461+
return state.typeMapper
462+
}
484463

485-
private fun createKeyForTypeMapper(file: KtFile) = NoResolveFileClassesProvider.getFileClassInternalName(file)
464+
public fun isInlinedLambda(functionLiteral: KtFunction, context: BindingContext): Boolean {
465+
return InlineUtil.isInlinedArgument(functionLiteral, context, false)
486466
}
487467

468+
private fun createKeyForTypeMapper(file: KtFile) = NoResolveFileClassesProvider.getFileClassInternalName(file)
469+
470+
488471
private fun findInlinedCalls(element: PsiElement?, jetFile: PsiFile?): List<String> {
489472
if (element == null || jetFile !is KtFile) {
490473
return emptyList()
@@ -518,4 +501,22 @@ public class KotlinPositionManager(private val myDebugProcess: DebugProcess) : M
518501
}
519502

520503
private fun ReferenceType.containsKotlinStrata() = availableStrata().contains("Kotlin")
504+
505+
companion object {
506+
public fun createTypeMapper(file: KtFile): JetTypeMapper {
507+
val project = file.project
508+
509+
val analysisResult = file.analyzeFullyAndGetResult()
510+
analysisResult.throwIfError()
511+
512+
val state = GenerationState(
513+
project,
514+
ClassBuilderFactories.THROW_EXCEPTION,
515+
analysisResult.moduleDescriptor,
516+
analysisResult.bindingContext,
517+
listOf(file))
518+
state.beforeCompile()
519+
return state.typeMapper
520+
}
521+
}
521522
}

0 commit comments

Comments
 (0)