Skip to content

Commit 71b430c

Browse files
Debugger: cannot evaluate expression with raw types
#KT-11831 Fixed
1 parent c8e295c commit 71b430c

File tree

13 files changed

+44
-23
lines changed

13 files changed

+44
-23
lines changed

idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ import org.jetbrains.kotlin.resolve.AnalyzingUtils
7171
import org.jetbrains.kotlin.resolve.BindingContext
7272
import org.jetbrains.kotlin.resolve.BindingTrace
7373
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
74-
import org.jetbrains.kotlin.types.Flexibility
7574
import org.jetbrains.org.objectweb.asm.*
7675
import org.jetbrains.org.objectweb.asm.Opcodes.ASM5
7776
import org.jetbrains.org.objectweb.asm.Type
@@ -454,7 +453,7 @@ class KotlinEvaluator(val codeFragment: KtCodeFragment, val sourcePosition: Sour
454453
}
455454

456455
val filesToAnalyze = if (contextFile == null) listOf(this) else listOf(this, contextFile)
457-
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacade(filesToAnalyze + createFlexibleTypesFile())
456+
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacade(filesToAnalyze)
458457
val analysisResult = resolutionFacade.analyzeFullyAndGetResult(filesToAnalyze)
459458

460459
if (analysisResult.isError()) {
@@ -527,16 +526,6 @@ private fun createFileForDebugger(codeFragment: KtCodeFragment,
527526
return jetFile
528527
}
529528

530-
private fun PsiElement.createFlexibleTypesFile(): KtFile {
531-
return createKtFile(
532-
"FLEXIBLE_TYPES.kt",
533-
"""
534-
package ${Flexibility.FLEXIBLE_TYPE_CLASSIFIER.packageFqName}
535-
public class ${Flexibility.FLEXIBLE_TYPE_CLASSIFIER.relativeClassName}<L, U>
536-
"""
537-
)
538-
}
539-
540529
private fun PsiElement.createKtFile(fileName: String, fileText: String): KtFile {
541530
// Not using KtPsiFactory because we need a virtual file attached to the JetFile
542531
val virtualFile = LightVirtualFile(fileName, KotlinLanguage.INSTANCE, fileText)

idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ fun getFunctionForExtractedFragment(
104104
}
105105

106106
val generatorOptions = ExtractionGeneratorOptions(inTempFile = true,
107-
flexibleTypesAllowed = true,
108107
dummyName = GENERATED_FUNCTION_NAME,
109108
allowExpressionBody = false)
110109
return ExtractionGeneratorConfiguration(validationResult.descriptor, generatorOptions).generateDeclaration()

idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractableCodeDescriptor.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,6 @@ val propertyTargets: List<ExtractionTarget> = listOf(ExtractionTarget.PROPERTY_W
468468
data class ExtractionGeneratorOptions(
469469
val inTempFile: Boolean = false,
470470
val target: ExtractionTarget = ExtractionTarget.FUNCTION,
471-
val flexibleTypesAllowed: Boolean = false,
472471
val dummyName: String? = null,
473472
val allowExpressionBody: Boolean = true,
474473
val delayInitialOccurrenceReplacement: Boolean = false

idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,7 @@ private fun buildSignature(config: ExtractionGeneratorConfiguration, renderer: D
111111
fun ExtractionGeneratorConfiguration.getSignaturePreview(renderer: DescriptorRenderer) = buildSignature(this, renderer).asString()
112112

113113
fun ExtractionGeneratorConfiguration.getDeclarationPattern(
114-
descriptorRenderer: DescriptorRenderer = if (generatorOptions.flexibleTypesAllowed)
115-
DescriptorRenderer.FLEXIBLE_TYPES_FOR_CODE
116-
else IdeDescriptorRenderers.SOURCE_CODE
114+
descriptorRenderer: DescriptorRenderer = IdeDescriptorRenderers.SOURCE_CODE
117115
): String {
118116
val extractionTarget = generatorOptions.target
119117
if (!extractionTarget.isAvailable(descriptor)) {

idea/testData/debugger/tinyApp/outs/checkNotNull.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ LineBreakpoint created at checkNotNull.kt:8
22
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! checkNotNull.CheckNotNullKt
33
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
44
checkNotNull.kt:8
5-
MyJavaClass.java:12
5+
MyJavaClass.java:13
66
checkNotNull.kt:8
77
checkNotNull.kt:9
88
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'

idea/testData/debugger/tinyApp/outs/javaFun.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ LineBreakpoint created at javaFun.kt:8
22
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! javaFun.JavaFunKt
33
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
44
javaFun.kt:8
5-
MyJavaClass.java:7
5+
MyJavaClass.java:8
66
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
77

88
Process finished with exit code 0
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
LineBreakpoint created at rawTypeskt11831.kt:7
2+
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! rawTypeskt11831.RawTypeskt11831Kt
3+
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
4+
rawTypeskt11831.kt:7
5+
Compile bytecode for foo
6+
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
7+
8+
Process finished with exit code 0

idea/testData/debugger/tinyApp/outs/samAdapter.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socke
44
samAdapter.kt:5
55
samAdapter.kt:6
66
samAdapter.kt:10
7-
MyJavaClass.java:20
7+
MyJavaClass.java:21
88
samAdapter.kt:6
9-
MyJavaClass.java:20
9+
MyJavaClass.java:21
1010
samAdapter.kt:10
1111
samAdapter.kt:6
1212
samAdapter.kt:7

idea/testData/debugger/tinyApp/outs/smartStepIntoInterfaceImpl.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ smartStepIntoInterfaceImpl.kt:36
2828
smartStepIntoInterfaceImpl.kt:130
2929
smartStepIntoInterfaceImpl.kt:41
3030
smartStepIntoInterfaceImpl.kt:138
31-
MyJavaClass.java:16
31+
MyJavaClass.java:17
3232
smartStepIntoInterfaceImpl.kt:143
3333
smartStepIntoInterfaceImpl.kt:59
3434
smartStepIntoInterfaceImpl.kt:148

idea/testData/debugger/tinyApp/outs/stepIntoSpecificKotlinClasses.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ LineBreakpoint created at stepIntoSpecificKotlinClasses.kt:8
22
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! stepIntoSpecificKotlinClasses.StepIntoSpecificKotlinClassesKt
33
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
44
stepIntoSpecificKotlinClasses.kt:8
5-
MyJavaClass.java:12
5+
MyJavaClass.java:13
66
stepIntoSpecificKotlinClasses.kt:8
77
Intrinsics.!EXT!
88
Intrinsics.!EXT!
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package rawTypeskt11831
2+
3+
fun main(args: Array<String>) {
4+
val raw = forTests.MyJavaClass.RawADerived()
5+
val foo = raw.foo(emptyList<String>())
6+
//Breakpoint!
7+
val a = foo
8+
}
9+
10+
// EXPRESSION: foo
11+
// RESULT: 1: I

idea/testData/debugger/tinyApp/src/forTests/MyJavaClass.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package forTests;
22

33
import org.jetbrains.annotations.NotNull;
4+
import java.util.List;
45

56
public class MyJavaClass {
67
public void testFun() {
@@ -38,4 +39,14 @@ public BaseClass getInnerClassValue() {
3839
public static class InnerClass extends BaseClass {
3940
public final int i = 1;
4041
}
42+
43+
public static class RawA<T> {
44+
public int foo(List<T> p) {
45+
return 1;
46+
}
47+
}
48+
49+
public static class RawADerived extends RawA {
50+
51+
}
4152
}

idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,12 @@ public void testProtectedMember() throws Exception {
301301
doSingleBreakpointTest(fileName);
302302
}
303303

304+
@TestMetadata("rawTypeskt11831.kt")
305+
public void testRawTypeskt11831() throws Exception {
306+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/rawTypeskt11831.kt");
307+
doSingleBreakpointTest(fileName);
308+
}
309+
304310
@TestMetadata("simple.kt")
305311
public void testSimple() throws Exception {
306312
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/simple.kt");

0 commit comments

Comments
 (0)