@@ -360,131 +360,114 @@ public class KotlinPositionManager(private val myDebugProcess: DebugProcess) : M
360
360
myTypeMappers.put(key, value)
361
361
}
362
362
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)) {
399
369
return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
400
370
}
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)
407
389
}
390
+ }
408
391
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
+ }
413
396
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)
415
402
}
416
- element is KtNamedFunction -> {
417
- if (isInlinedLambda(element, typeMapper.bindingContext)) {
418
- return getInternalClassNameForElement(element.parent, typeMapper, file, isInLibrary)
419
- }
420
403
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)
429
411
}
430
412
}
431
-
432
- return PositionedElement (NoResolveFileClassesProvider .getFileClassInternalName(file), element)
433
413
}
434
414
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
+ }
441
417
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)
444
424
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
447
427
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
+ }
453
430
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
+ }
457
436
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
460
440
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)
463
443
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
467
446
468
- return typeMapper.mapClass(classDescriptor).internalName
447
+ if (ktClass is KtClass && ktClass.isInterface()) {
448
+ return typeMapper.mapDefaultImpls(classDescriptor).internalName
469
449
}
470
450
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
+ }
474
453
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()
480
457
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
+ }
484
463
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 )
486
466
}
487
467
468
+ private fun createKeyForTypeMapper (file : KtFile ) = NoResolveFileClassesProvider .getFileClassInternalName(file)
469
+
470
+
488
471
private fun findInlinedCalls (element : PsiElement ? , jetFile : PsiFile ? ): List <String > {
489
472
if (element == null || jetFile !is KtFile ) {
490
473
return emptyList()
@@ -518,4 +501,22 @@ public class KotlinPositionManager(private val myDebugProcess: DebugProcess) : M
518
501
}
519
502
520
503
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
+ }
521
522
}
0 commit comments