Fix exception during step into inline function in library
This commit is contained in:
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde;
|
|||||||
import org.jetbrains.kotlin.idea.debugger.DebuggerPackage;
|
import org.jetbrains.kotlin.idea.debugger.DebuggerPackage;
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
|
||||||
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.CompositeBindingContext;
|
import org.jetbrains.kotlin.resolve.CompositeBindingContext;
|
||||||
@@ -78,7 +79,15 @@ public class DebuggerUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isPackagePartClassName(className)) {
|
if (!isPackagePartClassName(className)) {
|
||||||
return filesWithExactName.iterator().next();
|
for (JetFile file : filesWithExactName) {
|
||||||
|
boolean hasTopLevelMembers = KotlinPackage.any(file.getDeclarations(), new Function1<JetDeclaration, Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean invoke(JetDeclaration declaration) {
|
||||||
|
return !(declaration instanceof JetClassOrObject);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (hasTopLevelMembers) return file;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JetFile file = getFileForPackagePartPrefixedName(filesWithExactName, className.getInternalName());
|
JetFile file = getFileForPackagePartPrefixedName(filesWithExactName, className.getInternalName());
|
||||||
@@ -110,8 +119,11 @@ public class DebuggerUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isPackagePartClassName(JvmClassName className) {
|
private static boolean isPackagePartClassName(JvmClassName className) {
|
||||||
String packageName = className.getPackageFqName().asString().replaceAll("\\.", "/");
|
FqName packageFqName = PackageClassUtils.getPackageClassFqName(className.getPackageFqName());
|
||||||
return className.getInternalName().startsWith(packageName + "/" + PackageClassUtils.getPackageClassName(className.getPackageFqName()));
|
String packageName = packageFqName.asString().replaceAll("\\.", "/");
|
||||||
|
|
||||||
|
String internalName = className.getInternalName();
|
||||||
|
return !internalName.equals(packageName) && internalName.startsWith(packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package customLib.functionInLibrary
|
||||||
|
|
||||||
|
public inline fun simpleFun2() {
|
||||||
|
val a = 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package customLib.functionInLibrary
|
||||||
|
|
||||||
|
public inline fun simpleFun() {
|
||||||
|
nextFun()
|
||||||
|
}
|
||||||
|
|
||||||
|
public inline fun nextFun() {
|
||||||
|
val a = 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
LineBreakpoint created at functionInLibrary.kt:3
|
||||||
|
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! stepIntoStdlibInlineFun2step.StepIntoStdlibInlineFun2stepPackage
|
||||||
|
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||||
|
stepIntoStdlibInlineFun2step.kt:4
|
||||||
|
functionInLibrary.kt:4
|
||||||
|
functionInLibrary.kt:8
|
||||||
|
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package stepIntoStdlibInlineFun2step
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
customLib.functionInLibrary.simpleFun()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ADDITIONAL_BREAKPOINT: functionInLibrary.kt:public inline fun simpleFun()
|
||||||
|
// STEP_INTO: 2
|
||||||
Reference in New Issue
Block a user