Skip to content

Commit

Permalink
Debugger: cannot evaluate expression with raw types
Browse files Browse the repository at this point in the history
 #KT-11831 Fixed
  • Loading branch information
NataliaUkhorskaya committed Apr 15, 2016
1 parent 070ee10 commit d42823d
Show file tree
Hide file tree
Showing 16 changed files with 44 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,6 @@ abstract class DescriptorRenderer {
modifiers = DescriptorRendererModifier.ALL
}

@JvmField val FLEXIBLE_TYPES_FOR_CODE: DescriptorRenderer = withOptions {
flexibleTypesForCode = true
}

@JvmField val HTML: DescriptorRenderer = withOptions {
textFormat = RenderingFormat.HTML
modifiers = DescriptorRendererModifier.ALL
Expand Down Expand Up @@ -187,7 +183,6 @@ interface DescriptorRendererOptions {
var withoutSuperTypes: Boolean
var typeNormalizer: (KotlinType) -> KotlinType
var renderDefaultValues: Boolean
var flexibleTypesForCode: Boolean
var secondaryConstructorsAsPrimary: Boolean
var renderAccessors: Boolean
var renderDefaultAnnotationArguments: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,6 @@ internal class DescriptorRendererImpl(
if (debugMode) {
return renderFlexibleTypeWithBothBounds(type.flexibility().lowerBound, type.flexibility().upperBound)
}
else if (flexibleTypesForCode) {
val prefix = if (classifierNamePolicy == ClassifierNamePolicy.SHORT) "" else Flexibility.FLEXIBLE_TYPE_CLASSIFIER.packageFqName.asString() + "."
return prefix + Flexibility.FLEXIBLE_TYPE_CLASSIFIER.relativeClassName + lt() + renderNormalizedType(type.flexibility().lowerBound) + ", " + renderNormalizedType(type.flexibility().upperBound) + gt()
}
else {
return renderFlexibleType(type)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
override var withoutSuperTypes by property(false)
override var typeNormalizer by property<(KotlinType) -> KotlinType>({ it })
override var renderDefaultValues by property(true)
override var flexibleTypesForCode by property(false)
override var secondaryConstructorsAsPrimary by property(true)
override var overrideRenderingPolicy by property(OverrideRenderingPolicy.RENDER_OPEN)
override var valueParametersHandler: DescriptorRenderer.ValueParametersHandler by property(DescriptorRenderer.ValueParametersHandler.DEFAULT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ import org.jetbrains.kotlin.resolve.AnalyzingUtils
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.kotlin.types.Flexibility
import org.jetbrains.org.objectweb.asm.*
import org.jetbrains.org.objectweb.asm.Opcodes.ASM5
import org.jetbrains.org.objectweb.asm.Type
Expand Down Expand Up @@ -454,7 +453,7 @@ class KotlinEvaluator(val codeFragment: KtCodeFragment, val sourcePosition: Sour
}

val filesToAnalyze = if (contextFile == null) listOf(this) else listOf(this, contextFile)
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacade(filesToAnalyze + createFlexibleTypesFile())
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacade(filesToAnalyze)
val analysisResult = resolutionFacade.analyzeFullyAndGetResult(filesToAnalyze)

if (analysisResult.isError()) {
Expand Down Expand Up @@ -527,16 +526,6 @@ private fun createFileForDebugger(codeFragment: KtCodeFragment,
return jetFile
}

private fun PsiElement.createFlexibleTypesFile(): KtFile {
return createKtFile(
"FLEXIBLE_TYPES.kt",
"""
package ${Flexibility.FLEXIBLE_TYPE_CLASSIFIER.packageFqName}
public class ${Flexibility.FLEXIBLE_TYPE_CLASSIFIER.relativeClassName}<L, U>
"""
)
}

private fun PsiElement.createKtFile(fileName: String, fileText: String): KtFile {
// Not using KtPsiFactory because we need a virtual file attached to the JetFile
val virtualFile = LightVirtualFile(fileName, KotlinLanguage.INSTANCE, fileText)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ fun getFunctionForExtractedFragment(
}

val generatorOptions = ExtractionGeneratorOptions(inTempFile = true,
flexibleTypesAllowed = true,
dummyName = GENERATED_FUNCTION_NAME,
allowExpressionBody = false)
return ExtractionGeneratorConfiguration(validationResult.descriptor, generatorOptions).generateDeclaration()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,6 @@ val propertyTargets: List<ExtractionTarget> = listOf(ExtractionTarget.PROPERTY_W
data class ExtractionGeneratorOptions(
val inTempFile: Boolean = false,
val target: ExtractionTarget = ExtractionTarget.FUNCTION,
val flexibleTypesAllowed: Boolean = false,
val dummyName: String? = null,
val allowExpressionBody: Boolean = true,
val delayInitialOccurrenceReplacement: Boolean = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,7 @@ private fun buildSignature(config: ExtractionGeneratorConfiguration, renderer: D
fun ExtractionGeneratorConfiguration.getSignaturePreview(renderer: DescriptorRenderer) = buildSignature(this, renderer).asString()

fun ExtractionGeneratorConfiguration.getDeclarationPattern(
descriptorRenderer: DescriptorRenderer = if (generatorOptions.flexibleTypesAllowed)
DescriptorRenderer.FLEXIBLE_TYPES_FOR_CODE
else IdeDescriptorRenderers.SOURCE_CODE
descriptorRenderer: DescriptorRenderer = IdeDescriptorRenderers.SOURCE_CODE
): String {
val extractionTarget = generatorOptions.target
if (!extractionTarget.isAvailable(descriptor)) {
Expand Down
2 changes: 1 addition & 1 deletion idea/testData/debugger/tinyApp/outs/checkNotNull.out
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ LineBreakpoint created at checkNotNull.kt:8
!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
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
checkNotNull.kt:8
MyJavaClass.java:12
MyJavaClass.java:13
checkNotNull.kt:8
checkNotNull.kt:9
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
Expand Down
2 changes: 1 addition & 1 deletion idea/testData/debugger/tinyApp/outs/javaFun.out
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ LineBreakpoint created at javaFun.kt:8
!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
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
javaFun.kt:8
MyJavaClass.java:7
MyJavaClass.java:8
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'

Process finished with exit code 0
8 changes: 8 additions & 0 deletions idea/testData/debugger/tinyApp/outs/rawTypeskt11831.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
LineBreakpoint created at rawTypeskt11831.kt:7
!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
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
rawTypeskt11831.kt:7
Compile bytecode for foo
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'

Process finished with exit code 0
4 changes: 2 additions & 2 deletions idea/testData/debugger/tinyApp/outs/samAdapter.out
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socke
samAdapter.kt:5
samAdapter.kt:6
samAdapter.kt:10
MyJavaClass.java:20
MyJavaClass.java:21
samAdapter.kt:6
MyJavaClass.java:20
MyJavaClass.java:21
samAdapter.kt:10
samAdapter.kt:6
samAdapter.kt:7
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ smartStepIntoInterfaceImpl.kt:36
smartStepIntoInterfaceImpl.kt:130
smartStepIntoInterfaceImpl.kt:41
smartStepIntoInterfaceImpl.kt:138
MyJavaClass.java:16
MyJavaClass.java:17
smartStepIntoInterfaceImpl.kt:143
smartStepIntoInterfaceImpl.kt:59
smartStepIntoInterfaceImpl.kt:148
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ LineBreakpoint created at stepIntoSpecificKotlinClasses.kt:8
!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
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
stepIntoSpecificKotlinClasses.kt:8
MyJavaClass.java:12
MyJavaClass.java:13
stepIntoSpecificKotlinClasses.kt:8
Intrinsics.!EXT!
Intrinsics.!EXT!
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package rawTypeskt11831

fun main(args: Array<String>) {
val raw = forTests.MyJavaClass.RawADerived()
val foo = raw.foo(emptyList<String>())
//Breakpoint!
val a = foo
}

// EXPRESSION: foo
// RESULT: 1: I
11 changes: 11 additions & 0 deletions idea/testData/debugger/tinyApp/src/forTests/MyJavaClass.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package forTests;

import org.jetbrains.annotations.NotNull;
import java.util.List;

public class MyJavaClass {
public void testFun() {
Expand Down Expand Up @@ -38,4 +39,14 @@ public BaseClass getInnerClassValue() {
public static class InnerClass extends BaseClass {
public final int i = 1;
}

public static class RawA<T> {
public int foo(List<T> p) {
return 1;
}
}

public static class RawADerived extends RawA {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,12 @@ public void testProtectedMember() throws Exception {
doSingleBreakpointTest(fileName);
}

@TestMetadata("rawTypeskt11831.kt")
public void testRawTypeskt11831() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/rawTypeskt11831.kt");
doSingleBreakpointTest(fileName);
}

@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/simple.kt");
Expand Down

0 comments on commit d42823d

Please sign in to comment.