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.load.kotlin.PackageClassUtils;
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.*;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.CompositeBindingContext;
|
||||
@@ -78,7 +79,15 @@ public class DebuggerUtils {
|
||||
}
|
||||
|
||||
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());
|
||||
@@ -110,8 +119,11 @@ public class DebuggerUtils {
|
||||
}
|
||||
|
||||
private static boolean isPackagePartClassName(JvmClassName className) {
|
||||
String packageName = className.getPackageFqName().asString().replaceAll("\\.", "/");
|
||||
return className.getInternalName().startsWith(packageName + "/" + PackageClassUtils.getPackageClassName(className.getPackageFqName()));
|
||||
FqName packageFqName = PackageClassUtils.getPackageClassFqName(className.getPackageFqName());
|
||||
String packageName = packageFqName.asString().replaceAll("\\.", "/");
|
||||
|
||||
String internalName = className.getInternalName();
|
||||
return !internalName.equals(packageName) && internalName.startsWith(packageName);
|
||||
}
|
||||
|
||||
@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