Fix exception during step into inline function in library

This commit is contained in:
Natalia Ukhorskaya
2015-05-22 17:18:34 +03:00
parent 2538ebe407
commit 1cfed000c4
6 changed files with 46 additions and 3 deletions
@@ -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
@@ -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