diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java index 88286cccff4..2b5256fa10b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder; import org.jetbrains.kotlin.name.ClassId; -import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetFile; @@ -45,7 +44,6 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage; import org.jetbrains.kotlin.resolve.jvm.AsmTypes; -import org.jetbrains.kotlin.resolve.jvm.JvmClassName; import org.jetbrains.kotlin.serialization.ProtoBuf; import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor; import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf; @@ -61,7 +59,8 @@ import java.io.StringWriter; import java.util.Arrays; import java.util.ListIterator; -import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.isTrait; public class InlineCodegenUtil { public static final int API = Opcodes.ASM5; @@ -365,22 +364,10 @@ public class InlineCodegenUtil { return new MethodNode(API, 0, "fake", "()V", null, null); } - private static boolean isLastGoto(@NotNull AbstractInsnNode insnNode, @NotNull AbstractInsnNode stopAt) { - if (insnNode.getOpcode() == Opcodes.GOTO) { - insnNode = insnNode.getNext(); - while (insnNode != stopAt && isLineNumberOrLabel(insnNode)) { - insnNode = insnNode.getNext(); - } - return stopAt == insnNode; - } - return false; - } - static boolean isLineNumberOrLabel(@Nullable AbstractInsnNode node) { return node instanceof LineNumberNode || node instanceof LabelNode; } - @NotNull public static LabelNode firstLabelInChain(@NotNull LabelNode node) { LabelNode curNode = node; diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt index 86478452b3f..720d0768d92 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt @@ -255,19 +255,14 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult return myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, className.replace('/', '.')) } - override fun createPrepareRequests(classPrepareRequestor: ClassPrepareRequestor, sourcePosition: SourcePosition): MutableList { - if (sourcePosition.getFile() !is JetFile) { + override fun createPrepareRequests(requestor: ClassPrepareRequestor, position: SourcePosition): List { + if (position.getFile() !is JetFile) { throw NoDataException.INSTANCE } - val classNames = classNameForPositionAndInlinedOnes(sourcePosition) - if (classNames.isEmpty()) { - return Collections.emptyList() + + return classNameForPositionAndInlinedOnes(position).map { + className -> myDebugProcess.getRequestsManager().createClassPrepareRequest(requestor, className.replace('/', '.')) } - val requests = arrayListOf() - for (className in classNames) { - requests.add(myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, className.replace('/', '.'))) - } - return requests } TestOnly @@ -436,36 +431,36 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult } private fun findInlinedCalls(element: PsiElement?, jetFile: PsiFile?): List { + if (element == null || jetFile !is JetFile) { + return emptyList() + } + return runReadAction { - var result = emptyList() - if (element != null && jetFile is JetFile) { - val isInLibrary = LibraryUtil.findLibraryEntry(jetFile.getVirtualFile(), jetFile.getProject()) != null - val typeMapper = if (!isInLibrary) prepareTypeMapper(jetFile) else createTypeMapperForLibraryFile(element, jetFile) - val psiElement = getInternalClassNameForElement(element, typeMapper, jetFile, isInLibrary).element; + val result = arrayListOf() + val isInLibrary = LibraryUtil.findLibraryEntry(jetFile.getVirtualFile(), jetFile.getProject()) != null + val typeMapper = if (!isInLibrary) prepareTypeMapper(jetFile) else createTypeMapperForLibraryFile(element, jetFile) + val psiElement = getInternalClassNameForElement(element, typeMapper, jetFile, isInLibrary).element; - if (psiElement is JetNamedFunction) { - val descriptor = typeMapper.getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, psiElement) - if (descriptor is SimpleFunctionDescriptor && descriptor.getInlineStrategy().isInline()) { + if (psiElement is JetNamedFunction) { + val descriptor = typeMapper.getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, psiElement) - val project = myDebugProcess.getProject() - val usagesSearchTarget = FindUsagesOptions(project).toSearchTarget(psiElement, true) + if (descriptor is SimpleFunctionDescriptor && descriptor.getInlineStrategy().isInline()) { + val project = myDebugProcess.getProject() + val usagesSearchTarget = FindUsagesOptions(project).toSearchTarget(psiElement, true) - result = arrayListOf() - val usagesSearchRequest = DefaultSearchHelper(true).newRequest(usagesSearchTarget) - usagesSearchRequest.search().forEach { - val psiElement = it.getElement() - if (psiElement is JetElement) { - //TODO recursive search - val name = classNameForPosition(psiElement) - if (name != null) { - (result as MutableList).add(name) - } + val usagesSearchRequest = DefaultSearchHelper(true).newRequest(usagesSearchTarget) + usagesSearchRequest.search().forEach { + val psiElement = it.getElement() + if (psiElement is JetElement) { + //TODO recursive search + val name = classNameForPosition(psiElement) + if (name != null) { + result.add(name) } } } } } - result } }