mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 19:02:13 +07:00
fix extensionFunOnTypeFromAnotherPackage test (part of KTIJ-28926 K2: Create Function From Usage Fix)
GitOrigin-RevId: 652381bf858fcdb335959b70dd9d534d0b097462
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9a45358f1c
commit
8393f98d28
+1
-1
@@ -142,7 +142,7 @@ internal class CreateKotlinCallableAction(
|
||||
append(KtTokens.FUN_KEYWORD)
|
||||
append(" ")
|
||||
|
||||
val (receiver, receiverTypeText) = if (request is CreateMethodFromKotlinUsageRequest) CreateKotlinCallableActionTextBuilder.renderReceiver(request) else "" to ""
|
||||
val (receiver, receiverTypeText) = if (request is CreateMethodFromKotlinUsageRequest) CreateKotlinCallableActionTextBuilder.renderReceiver(request, container) else "" to ""
|
||||
append(renderTypeParameterDeclarations(request, container, receiverTypeText))
|
||||
if ((request as? CreateMethodFromKotlinUsageRequest)?.isExtension == true) {
|
||||
if (receiver.isNotEmpty()) {
|
||||
|
||||
+9
-5
@@ -13,7 +13,9 @@ import org.jetbrains.kotlin.analysis.api.types.KtFunctionalType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.PrettyPrinter
|
||||
import org.jetbrains.kotlin.idea.base.psi.classIdIfNonLocal
|
||||
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
/**
|
||||
@@ -32,7 +34,7 @@ object CreateKotlinCallableActionTextBuilder {
|
||||
append(callableKindAsString)
|
||||
|
||||
if (request.methodName.isNotEmpty()) {
|
||||
val (receiver,_) = renderReceiver(request)
|
||||
val (receiver,_) = renderReceiver(request, request.call)
|
||||
append(" '$receiver${request.methodName}'")
|
||||
}
|
||||
}
|
||||
@@ -46,7 +48,7 @@ object CreateKotlinCallableActionTextBuilder {
|
||||
}
|
||||
|
||||
// text, receiverTypeText
|
||||
fun renderReceiver(request: CreateMethodFromKotlinUsageRequest): Pair<String,String> {
|
||||
fun renderReceiver(request: CreateMethodFromKotlinUsageRequest, container: KtElement): Pair<String,String> {
|
||||
analyze(request.call) {
|
||||
val receiverSymbol: KtSymbol?
|
||||
val receiverTypeText: String
|
||||
@@ -55,13 +57,15 @@ object CreateKotlinCallableActionTextBuilder {
|
||||
receiverSymbol = null
|
||||
receiverTypeText = request.receiverType.render(RENDERER_OPTION_FOR_CREATE_FROM_USAGE_TEXT, Variance.INVARIANT)
|
||||
} else {
|
||||
// Since receiverExpression.getKtType() returns `kotlin/Unit` for a companion object, we first try the symbol resolution and
|
||||
// its type rendering.
|
||||
receiverSymbol = request.receiverExpression.resolveExpression()
|
||||
val receiverType = request.receiverType ?: request.receiverExpression.getKtType()
|
||||
receiverTypeText = receiverSymbol?.renderAsReceiver(request.isAbstractClassOrInterface, receiverType)
|
||||
val recPackageFqName = request.receiverExpression.getKtType()?.convertToClass()?.classIdIfNonLocal?.packageFqName
|
||||
val addedPackage = if (recPackageFqName == container.containingKtFile.packageFqName || recPackageFqName == null || recPackageFqName.asString().startsWith("kotlin")) "" else recPackageFqName.asString()+"."
|
||||
// Since receiverExpression.getKtType() returns `kotlin/Unit` for a companion object, we first try the symbol resolution and its type rendering.
|
||||
val renderedReceiver = receiverSymbol?.renderAsReceiver(request.isAbstractClassOrInterface, receiverType)
|
||||
?: receiverType?.render(RENDERER_OPTION_FOR_CREATE_FROM_USAGE_TEXT, Variance.INVARIANT)
|
||||
?: request.receiverExpression.text
|
||||
receiverTypeText = addedPackage + renderedReceiver
|
||||
}
|
||||
return if (request.isExtension && receiverSymbol is KtCallableSymbol) {
|
||||
val receiverType = receiverSymbol.returnType
|
||||
|
||||
+2
-3
@@ -58,9 +58,8 @@ internal class CreateKotlinCallablePsiEditor(
|
||||
fun execute(anchor: PsiElement, request: CreateMethodRequest) {
|
||||
val factory = KtPsiFactory(project)
|
||||
var function = factory.createFunction(callableInfo.definitionAsString)
|
||||
val passedContainerElement = pointerToContainer.element
|
||||
if (passedContainerElement == null) return
|
||||
val shouldComputeContainerFromAnchor = if (passedContainerElement is PsiFile) passedContainerElement == anchor.containingFile
|
||||
val passedContainerElement = pointerToContainer.element ?: return
|
||||
val shouldComputeContainerFromAnchor = if (passedContainerElement is PsiFile) passedContainerElement == anchor.containingFile && (request as? CreateMethodFromKotlinUsageRequest)?.isExtension != true
|
||||
else passedContainerElement.getContainer() == anchor.getContainer()
|
||||
val insertContainer: PsiElement = if (shouldComputeContainerFromAnchor) {
|
||||
(anchor.getExtractionContainers().firstOrNull() ?: return)
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// "Create extension function 'A.foo'" "true"
|
||||
// "/(Create extension function 'A.foo')|(Create extension function 'package2.A.foo')/" "true"
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
import package1.A
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// "Create extension function 'A.foo'" "true"
|
||||
// "/(Create extension function 'A.foo')|(Create extension function 'package2.A.foo')/" "true"
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
import package1.A
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// "Create extension function '((Int) -> String).bar'" "true"
|
||||
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable.CreateExtensionCallableFromUsageFix
|
||||
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage.CreateKotlinCallableAction
|
||||
|
||||
fun foo(block: (Int) -> String) {
|
||||
block.bar()
|
||||
}
|
||||
|
||||
private fun ((Int) -> String).bar() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
Reference in New Issue
Block a user