Skip to content

Commit d14136b

Browse files
Debugger: cannot call member extension in an object in Evaluate Expression
#KT-14822 Fixed
1 parent 204873e commit d14136b

File tree

5 files changed

+49
-5
lines changed

5 files changed

+49
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class WrapParameterInWithReplacement(override val parameter: Parameter): WrapInW
115115
override fun copy(parameter: Parameter) = WrapParameterInWithReplacement(parameter)
116116
}
117117

118-
class WrapCompanionInWithReplacement(val descriptor: ClassDescriptor): WrapInWithReplacement() {
118+
class WrapObjectInWithReplacement(val descriptor: ClassDescriptor): WrapInWithReplacement() {
119119
override val argumentText: String
120120
get() = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(descriptor)
121121
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,9 @@ internal fun ExtractionData.inferParametersInfo(
9999
val dispatchReceiverDescriptor = (resolvedCall?.dispatchReceiver as? ImplicitReceiver)?.declarationDescriptor
100100
if (twoReceivers
101101
&& resolvedCall!!.extensionReceiver is ExpressionReceiver
102-
&& DescriptorUtils.isCompanionObject(dispatchReceiverDescriptor)) {
102+
&& DescriptorUtils.isObject(dispatchReceiverDescriptor)) {
103103
info.replacementMap.putValue(refInfo.resolveResult.originalRefExpr,
104-
WrapCompanionInWithReplacement(dispatchReceiverDescriptor as ClassDescriptor))
104+
WrapObjectInWithReplacement(dispatchReceiverDescriptor as ClassDescriptor))
105105
continue
106106
}
107107

@@ -188,8 +188,8 @@ private fun ExtractionData.extractReceiver(
188188
if (options.canWrapInWith
189189
&& resolvedCall != null
190190
&& resolvedCall.hasBothReceivers()
191-
&& DescriptorUtils.isCompanionObject(referencedClassifierDescriptor)) {
192-
info.replacementMap.putValue(originalRef, WrapCompanionInWithReplacement(referencedClassifierDescriptor as ClassDescriptor))
191+
&& DescriptorUtils.isObject(referencedClassifierDescriptor)) {
192+
info.replacementMap.putValue(originalRef, WrapObjectInWithReplacement(referencedClassifierDescriptor as ClassDescriptor))
193193
} else if (referencedClassifierDescriptor is ClassDescriptor) {
194194
info.replacementMap.putValue(originalRef, FqNameReplacement(originalDescriptor.getImportableDescriptor().fqNameSafe))
195195
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
LineBreakpoint created at extensionMemberFunctionInObject.kt:14
2+
LineBreakpoint created at extensionMemberFunctionInObject.kt:20
3+
!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! extensionMemberFunctionInObject.ExtensionMemberFunctionInObjectKt
4+
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
5+
extensionMemberFunctionInObject.kt:14
6+
Compile bytecode for "OK".baz()
7+
extensionMemberFunctionInObject.kt:20
8+
Compile bytecode for baz()
9+
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
10+
11+
Process finished with exit code 0
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package extensionMemberFunctionInObject
2+
3+
// KT-14822
4+
5+
fun main(args: Array<String>) {
6+
Foo.bar()
7+
}
8+
9+
object Foo {
10+
fun bar() {
11+
// EXPRESSION: "OK".baz()
12+
// RESULT: 1: I
13+
//Breakpoint!
14+
"OK".baz()
15+
16+
with("OK") {
17+
// EXPRESSION: baz()
18+
// RESULT: 1: I
19+
//Breakpoint!
20+
baz()
21+
}
22+
}
23+
24+
fun String.baz(): Int {
25+
return 1
26+
}
27+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,12 @@ public void testExtensionMemberFunction() throws Exception {
899899
doMultipleBreakpointsTest(fileName);
900900
}
901901

902+
@TestMetadata("extensionMemberFunctionInObject.kt")
903+
public void testExtensionMemberFunctionInObject() throws Exception {
904+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/extensionMemberFunctionInObject.kt");
905+
doMultipleBreakpointsTest(fileName);
906+
}
907+
902908
@TestMetadata("extensionMemberProperty.kt")
903909
public void testExtensionMemberProperty() throws Exception {
904910
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/multipleBreakpoints/extensionMemberProperty.kt");

0 commit comments

Comments
 (0)