Create from Usage: Fix rendering of receiver type reference
#KT-9559 Fixed
This commit is contained in:
+5
-7
@@ -61,6 +61,7 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
|
import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -640,13 +641,10 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
val typeRefsToShorten = ArrayList<KtElement>()
|
val typeRefsToShorten = ArrayList<KtElement>()
|
||||||
|
|
||||||
if (config.isExtension) {
|
if (config.isExtension) {
|
||||||
val receiverTypeRef = KtPsiFactory(declaration).createType(receiverTypeCandidate!!.theType.renderLong(typeParameterNameMap))
|
val receiverTypeText = receiverTypeCandidate!!.theType.renderLong(typeParameterNameMap)
|
||||||
replaceWithLongerName(receiverTypeRef, receiverTypeCandidate.theType)
|
val replacingTypeRef = KtPsiFactory(declaration).createType(receiverTypeText)
|
||||||
|
val newTypeRef = (declaration as KtCallableDeclaration).setReceiverTypeReference(replacingTypeRef)!!
|
||||||
val funcReceiverTypeRef = (declaration as? KtCallableDeclaration)?.getReceiverTypeReference()
|
typeRefsToShorten.add(newTypeRef)
|
||||||
if (funcReceiverTypeRef != null) {
|
|
||||||
typeRefsToShorten.add(funcReceiverTypeRef)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val returnTypeRef = declaration.getReturnTypeReference()
|
val returnTypeRef = declaration.getReturnTypeReference()
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// "Create extension function 'foo'" "true"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
import package1.A
|
||||||
|
|
||||||
|
class X {
|
||||||
|
init {
|
||||||
|
val y = package2.A()
|
||||||
|
y.foo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun package2.A.foo() {
|
||||||
|
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package package1
|
||||||
|
|
||||||
|
class A
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package package2
|
||||||
|
|
||||||
|
class A
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
// "Create extension function 'foo'" "true"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
import package1.A
|
||||||
|
|
||||||
|
class X {
|
||||||
|
init {
|
||||||
|
val y = package2.A()
|
||||||
|
y.<caret>foo()
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
// "Create extension property 'foo'" "true"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
import package1.A
|
||||||
|
|
||||||
|
val package2.A.foo: Any
|
||||||
|
|
||||||
|
class X {
|
||||||
|
init {
|
||||||
|
val y = package2.A()
|
||||||
|
val foo = y.foo
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package package1
|
||||||
|
|
||||||
|
class A
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package package2
|
||||||
|
|
||||||
|
class A
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
// "Create extension property 'foo'" "true"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
import package1.A
|
||||||
|
|
||||||
|
class X {
|
||||||
|
init {
|
||||||
|
val y = package2.A()
|
||||||
|
val foo = y.<caret>foo
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -715,6 +715,12 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
|
|||||||
doTestWithExtraFile(fileName);
|
doTestWithExtraFile(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("extensionFunOnTypeFromAnotherPackage.before.Main.kt")
|
||||||
|
public void testExtensionFunOnTypeFromAnotherPackage() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/extensionFunOnTypeFromAnotherPackage.before.Main.kt");
|
||||||
|
doTestWithExtraFile(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("funOnGroovyType.before.Main.kt")
|
@TestMetadata("funOnGroovyType.before.Main.kt")
|
||||||
public void testFunOnGroovyType() throws Exception {
|
public void testFunOnGroovyType() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/funOnGroovyType.before.Main.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/funOnGroovyType.before.Main.kt");
|
||||||
@@ -851,6 +857,12 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
|
|||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createVariable/property"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), true);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createVariable/property"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("extensionPropertyOnTypeFromAnotherPackage.before.Main.kt")
|
||||||
|
public void testExtensionPropertyOnTypeFromAnotherPackage() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/extensionPropertyOnTypeFromAnotherPackage.before.Main.kt");
|
||||||
|
doTestWithExtraFile(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("extensionValOnGroovyType.before.Main.kt")
|
@TestMetadata("extensionValOnGroovyType.before.Main.kt")
|
||||||
public void testExtensionValOnGroovyType() throws Exception {
|
public void testExtensionValOnGroovyType() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.before.Main.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.before.Main.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user