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.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||
import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
@@ -640,13 +641,10 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
||||
val typeRefsToShorten = ArrayList<KtElement>()
|
||||
|
||||
if (config.isExtension) {
|
||||
val receiverTypeRef = KtPsiFactory(declaration).createType(receiverTypeCandidate!!.theType.renderLong(typeParameterNameMap))
|
||||
replaceWithLongerName(receiverTypeRef, receiverTypeCandidate.theType)
|
||||
|
||||
val funcReceiverTypeRef = (declaration as? KtCallableDeclaration)?.getReceiverTypeReference()
|
||||
if (funcReceiverTypeRef != null) {
|
||||
typeRefsToShorten.add(funcReceiverTypeRef)
|
||||
}
|
||||
val receiverTypeText = receiverTypeCandidate!!.theType.renderLong(typeParameterNameMap)
|
||||
val replacingTypeRef = KtPsiFactory(declaration).createType(receiverTypeText)
|
||||
val newTypeRef = (declaration as KtCallableDeclaration).setReceiverTypeReference(replacingTypeRef)!!
|
||||
typeRefsToShorten.add(newTypeRef)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@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")
|
||||
public void testFunOnGroovyType() throws Exception {
|
||||
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);
|
||||
}
|
||||
|
||||
@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")
|
||||
public void testExtensionValOnGroovyType() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/extensionValOnGroovyType.before.Main.kt");
|
||||
|
||||
Reference in New Issue
Block a user