diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/JetIntentionActionsFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/JetIntentionActionsFactory.kt index dfe5c6f2e10..874042e07a4 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/JetIntentionActionsFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/JetIntentionActionsFactory.kt @@ -24,12 +24,12 @@ import java.util.Collections // TODO: Replace with trait when all subclasses are translated to Kotlin public abstract class JetIntentionActionsFactory { protected open fun isApplicableForCodeFragment(): Boolean = false - protected abstract fun doCreateActions(diagnostic: Diagnostic): List + protected abstract fun doCreateActions(diagnostic: Diagnostic): List? public fun createActions(diagnostic: Diagnostic): List { if (diagnostic.getPsiElement().getContainingFile() is JetCodeFragment && !isApplicableForCodeFragment()) { return Collections.emptyList() } - return doCreateActions(diagnostic) + return doCreateActions(diagnostic) ?: Collections.emptyList() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index 7545e80e407..9d5b9eef370 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -68,10 +68,6 @@ import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.idea.util.isUnit import com.intellij.openapi.editor.ScrollType -import com.intellij.openapi.editor.LogicalPosition -import com.intellij.openapi.editor.actions.EditorActionUtil -import com.intellij.openapi.editor.actions.LineEndAction -import com.intellij.openapi.editor.actions.EnterAction import org.jetbrains.kotlin.psi.psiUtil.isAncestor private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList" @@ -122,19 +118,11 @@ class CallableBuilderConfiguration( val callableInfos: List, val originalElement: JetElement, val currentFile: JetFile, - val currentEditor: Editor, + val currentEditor: Editor?, + val isExtension: Boolean = false, val enableSubstitutions: Boolean = true ) -fun CallableBuilderConfiguration( - callableInfo: CallableInfo, - originalExpression: JetExpression, - currentFile: JetFile, - currentEditor: Editor -): CallableBuilderConfiguration { - return CallableBuilderConfiguration(Collections.singletonList(callableInfo), originalExpression, currentFile, currentEditor) -} - trait CallablePlacement { class WithReceiver(val receiverTypeCandidate: TypeCandidate): CallablePlacement class NoReceiver(val containingElement: JetElement): CallablePlacement @@ -207,6 +195,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { fun build() { try { + assert (config.currentEditor != null, "Can't run build() without editor") if (finished) throw IllegalStateException("Current builder has already finished") buildNext(config.callableInfos.iterator()) } @@ -217,7 +206,6 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { private inner class Context(val callableInfo: CallableInfo) { val skipReturnType: Boolean - val isExtension: Boolean val containingFile: JetFile val containingFileEditor: Editor val containingElement: JetElement @@ -233,7 +221,6 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { val placement = placement when { placement is CallablePlacement.NoReceiver -> { - isExtension = false containingElement = placement.containingElement receiverClassDescriptor = (containingElement as? JetClassOrObject)?.let { currentFileContext[BindingContext.CLASS, it] } } @@ -241,8 +228,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { receiverClassDescriptor = placement.receiverTypeCandidate.theType.getConstructor().getDeclarationDescriptor() as? ClassDescriptor val classDeclaration = receiverClassDescriptor?.let { DescriptorToSourceUtils.classDescriptorToDeclaration(it) } - isExtension = !(classDeclaration is JetClassOrObject && classDeclaration.isWritable()) - containingElement = if (isExtension) config.currentFile else classDeclaration as JetElement + containingElement = if (config.isExtension) config.currentFile else classDeclaration as JetElement } else -> throw IllegalArgumentException("Unexpected placement: $placement") } @@ -254,10 +240,10 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { containingFileEditor = FileEditorManager.getInstance(config.currentFile.getProject())!!.getSelectedTextEditor()!! } else { - containingFileEditor = config.currentEditor + containingFileEditor = config.currentEditor!! } - val scope = if (isExtension || receiverClassDescriptor == null) { + val scope = if (config.isExtension || receiverClassDescriptor == null) { currentFileModule.getPackage(config.currentFile.getPackageFqName())!!.getMemberScope() } else { @@ -531,7 +517,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { private fun setupTypeReferencesForShortening(declaration: JetNamedDeclaration, typeRefsToShorten: MutableList, parameterTypeExpressions: List) { - if (isExtension) { + if (config.isExtension) { val receiverTypeRef = JetPsiFactory(declaration).createType(receiverTypeCandidate!!.theType.renderLong(typeParameterNameMap)) replaceWithLongerName(receiverTypeRef, receiverTypeCandidate.theType) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateBinaryOperationActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateBinaryOperationActionFactory.kt index f7dba513aba..3c18b445657 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateBinaryOperationActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateBinaryOperationActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.psi.JetBinaryExpression @@ -27,9 +26,10 @@ import java.util.Collections import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -public object CreateBinaryOperationActionFactory: JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +public object CreateBinaryOperationActionFactory: JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val callExpr = diagnostic.getPsiElement().getParent() as? JetBinaryExpression ?: return null val token = callExpr.getOperationToken() as JetToken val operationName = when (token) { @@ -54,6 +54,6 @@ public object CreateBinaryOperationActionFactory: JetSingleIntentionActionFactor else -> TypeInfo(callExpr, Variance.OUT_VARIANCE) } val parameters = Collections.singletonList(ParameterInfo(TypeInfo(argumentExpr, Variance.IN_VARIANCE))) - return CreateCallableFromUsageFix(callExpr, FunctionInfo(operationName, receiverType, returnType, Collections.emptyList(), parameters)) + return CreateCallableFromUsageFixes(callExpr, FunctionInfo(operationName, receiverType, returnType, Collections.emptyList(), parameters)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt index f8bb6988f96..fa1580aa668 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateCallableFromUsageFix.kt @@ -28,16 +28,21 @@ import org.jetbrains.kotlin.idea.refactoring.chooseContainerElementIfNecessary import org.jetbrains.kotlin.psi.JetClassBody import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* import org.jetbrains.kotlin.psi.JetExpression -import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList import java.util.HashSet import org.jetbrains.kotlin.psi.JetElement import com.intellij.psi.PsiClass +import java.util.Collections +import org.jetbrains.kotlin.psi.JetPsiUtil +import org.jetbrains.kotlin.idea.refactoring.canRefactor import com.intellij.psi.PsiElement public class CreateCallableFromUsageFix( originalExpression: JetExpression, - val callableInfos: List) : CreateFromUsageFixBase(originalExpression) { + val callableInfos: List, + val isExtension: Boolean +) : CreateFromUsageFixBase(originalExpression) { { + assert (callableInfos.isNotEmpty(), "No CallableInfos: ${JetPsiUtil.getElementTextWithContext(originalExpression)}") if (callableInfos.size > 1) { val receiverSet = callableInfos.mapTo(HashSet()) { it.receiverTypeInfo } if (receiverSet.size > 1) throw AssertionError("All functions must have common receiver: $receiverSet") @@ -47,6 +52,13 @@ public class CreateCallableFromUsageFix( } } + private fun getDeclarationIfApplicable(project: Project, candidate: TypeCandidate): PsiElement? { + val descriptor = candidate.theType.getConstructor().getDeclarationDescriptor() + val declaration = DescriptorToDeclarationUtil.getDeclaration(project, descriptor) ?: return null + if (declaration !is JetClassOrObject && declaration !is PsiClass) return null + return if (isExtension || declaration.canRefactor()) declaration else null + } + override fun getText(): String { val renderedCallables = callableInfos.map { val kind = when (it.kind) { @@ -56,14 +68,31 @@ public class CreateCallableFromUsageFix( } "$kind '${it.name}'" } + return JetBundle.message( + "create.0.from.usage", + renderedCallables.joinToString(prefix = if (isExtension) "extension " else "") + ) + } - return JetBundle.message("create.0.from.usage", renderedCallables.joinToString()) + fun isAvailable(): Boolean { + val callableInfo = callableInfos.first() + val receiverInfo = callableInfo.receiverTypeInfo + + if (receiverInfo is TypeInfo.Empty) return !isExtension + + val file = element.getContainingFile() as JetFile + val project = file.getProject() + val callableBuilder = + CallableBuilderConfiguration(callableInfos, element as JetExpression, file, null, isExtension).createBuilder() + val receiverTypeCandidates = callableBuilder.computeTypeCandidates(callableInfo.receiverTypeInfo) + return receiverTypeCandidates.any { getDeclarationIfApplicable(project, it) != null } } override fun invoke(project: Project, editor: Editor?, file: JetFile?) { val callableInfo = callableInfos.first() - val callableBuilder = CallableBuilderConfiguration(callableInfos, element as JetExpression, file!!, editor!!).createBuilder() + val callableBuilder = + CallableBuilderConfiguration(callableInfos, element as JetExpression, file!!, editor!!, isExtension).createBuilder() fun runBuilder(placement: CallablePlacement) { callableBuilder.placement = placement @@ -74,11 +103,7 @@ public class CreateCallableFromUsageFix( val receiverTypeCandidates = callableBuilder.computeTypeCandidates(callableInfo.receiverTypeInfo) if (receiverTypeCandidates.isNotEmpty()) { val containers = receiverTypeCandidates - .map { candidate -> - val descriptor = candidate.theType.getConstructor().getDeclarationDescriptor() - val declaration = DescriptorToDeclarationUtil.getDeclaration(project, descriptor) - if (declaration is JetClassOrObject || declaration is PsiClass) candidate to declaration else null - } + .map { candidate -> getDeclarationIfApplicable(project, candidate)?.let { candidate to it } } .filterNotNull() chooseContainerElementIfNecessary(containers, editor, popupTitle, false, { it.second }) { @@ -96,9 +121,19 @@ public class CreateCallableFromUsageFix( } } -public fun CreateCallableFromUsageFix( +public fun CreateCallableFromUsageFixes( + originalExpression: JetExpression, + callableInfos: List +) : List { + return listOf( + CreateCallableFromUsageFix(originalExpression, callableInfos, false), + CreateCallableFromUsageFix(originalExpression, callableInfos, true) + ).filter { it.isAvailable() } +} + +public fun CreateCallableFromUsageFixes( originalExpression: JetExpression, callableInfo: CallableInfo -) : CreateCallableFromUsageFix { - return CreateCallableFromUsageFix(originalExpression, callableInfo.singletonOrEmptyList()) +) : List { + return CreateCallableFromUsageFixes(originalExpression, Collections.singletonList(callableInfo)) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateComponentFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateComponentFunctionActionFactory.kt index 3d919d7cb04..edfada615bc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateComponentFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateComponentFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.resolve.dataClassUtils.* @@ -26,9 +25,10 @@ import org.jetbrains.kotlin.psi.JetMultiDeclaration import org.jetbrains.kotlin.psi.JetForExpression import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateComponentFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateComponentFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val diagnosticWithParameters = Errors.COMPONENT_FUNCTION_MISSING.cast(diagnostic) val name = diagnosticWithParameters.getA() if (!isComponentLike(name)) return null @@ -50,6 +50,6 @@ object CreateComponentFunctionActionFactory : JetSingleIntentionActionFactory() val entry = entries[componentNumber] val returnType = TypeInfo(entry, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(multiDeclaration!!, FunctionInfo(name.getIdentifier(), ownerType, returnType)) + return CreateCallableFromUsageFixes(multiDeclaration!!, FunctionInfo(name.getIdentifier(), ownerType, returnType)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateFunctionOrPropertyFromCallActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateFunctionOrPropertyFromCallActionFactory.kt index 0001ee141f2..927bde8dad3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateFunctionOrPropertyFromCallActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateFunctionOrPropertyFromCallActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.psi.JetCallExpression @@ -42,9 +41,10 @@ import org.jetbrains.kotlin.psi.JetTypeReference import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.psi.JetAnnotationEntry import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateFunctionOrPropertyFromCallActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateFunctionOrPropertyFromCallActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val diagElement = diagnostic.getPsiElement() if (PsiTreeUtil.getParentOfType(diagElement, javaClass(), javaClass()) != null) return null @@ -119,6 +119,6 @@ object CreateFunctionOrPropertyFromCallActionFactory : JetSingleIntentionActionF else -> return null } - return CreateCallableFromUsageFix(callExpr, callableInfo) + return CreateCallableFromUsageFixes(callExpr, callableInfo) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateGetFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateGetFunctionActionFactory.kt index ce8ec10d31a..e04b6f0f431 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateGetFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateGetFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.idea.quickfix.QuickFixUtil @@ -24,9 +23,10 @@ import org.jetbrains.kotlin.psi.JetArrayAccessExpression import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* import java.util.Collections +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateGetFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateGetFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val accessExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null val arrayExpr = accessExpr.getArrayExpression() ?: return null val arrayType = TypeInfo(arrayExpr, Variance.IN_VARIANCE) @@ -36,6 +36,6 @@ object CreateGetFunctionActionFactory : JetSingleIntentionActionFactory() { } val returnType = TypeInfo(accessExpr, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(accessExpr, FunctionInfo("get", arrayType, returnType, Collections.emptyList(), parameters)) + return CreateCallableFromUsageFixes(accessExpr, FunctionInfo("get", arrayType, returnType, Collections.emptyList(), parameters)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateHasNextFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateHasNextFunctionActionFactory.kt index 0b0b1e46aa2..9b377bee46a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateHasNextFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateHasNextFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.diagnostics.DiagnosticFactory @@ -26,14 +25,15 @@ import org.jetbrains.kotlin.idea.quickfix.QuickFixUtil import org.jetbrains.kotlin.psi.JetForExpression import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateHasNextFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateHasNextFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val diagnosticWithParameters = DiagnosticFactory.cast(diagnostic, Errors.HAS_NEXT_MISSING, Errors.HAS_NEXT_FUNCTION_NONE_APPLICABLE) val ownerType = TypeInfo(diagnosticWithParameters.getA(), Variance.IN_VARIANCE) val forExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null val returnType = TypeInfo(KotlinBuiltIns.getInstance().getBooleanType(), Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(forExpr, FunctionInfo("hasNext", ownerType, returnType)) + return CreateCallableFromUsageFixes(forExpr, FunctionInfo("hasNext", ownerType, returnType)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt index a5cb0b891f2..33f4cdc58db 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.types.Variance @@ -25,9 +24,10 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* import java.util.Collections +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateInvokeFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateInvokeFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val callExpr = diagnostic.getPsiElement().getParent() as? JetCallExpression ?: return null val expectedType = Errors.FUNCTION_EXPECTED.cast(diagnostic).getB() @@ -44,6 +44,6 @@ object CreateInvokeFunctionActionFactory : JetSingleIntentionActionFactory() { } val returnType = TypeInfo(callExpr, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(callExpr, FunctionInfo("invoke", receiverType, returnType, Collections.emptyList(), parameters)) + return CreateCallableFromUsageFixes(callExpr, FunctionInfo("invoke", receiverType, returnType, Collections.emptyList(), parameters)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateIteratorFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateIteratorFunctionActionFactory.kt index e94d535ddbe..98d0ad4955a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateIteratorFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateIteratorFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.psi.JetFile @@ -30,9 +29,10 @@ import org.jetbrains.kotlin.types.TypeProjectionImpl import java.util.Collections import org.jetbrains.kotlin.types.JetTypeImpl import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateIteratorFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateIteratorFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val file = diagnostic.getPsiFile() as? JetFile ?: return null val forExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null val iterableExpr = forExpr.getLoopRange() ?: return null @@ -48,6 +48,6 @@ object CreateIteratorFunctionActionFactory : JetSingleIntentionActionFactory() { val returnJetTypeArguments = Collections.singletonList(returnJetTypeParameterType) val newReturnJetType = JetTypeImpl(returnJetType.getAnnotations(), returnJetType.getConstructor(), returnJetType.isMarkedNullable(), returnJetTypeArguments, returnJetType.getMemberScope()) val returnType = TypeInfo(newReturnJetType, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(forExpr, FunctionInfo("iterator", iterableType, returnType)) + return CreateCallableFromUsageFixes(forExpr, FunctionInfo("iterator", iterableType, returnType)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateNextFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateNextFunctionActionFactory.kt index bee0344d2f2..81b2b37754a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateNextFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateNextFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.psi.JetExpression @@ -26,15 +25,16 @@ import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.idea.quickfix.QuickFixUtil import org.jetbrains.kotlin.psi.JetForExpression import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateNextFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateNextFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val diagnosticWithParameters = DiagnosticFactory.cast(diagnostic, Errors.NEXT_MISSING, Errors.NEXT_NONE_APPLICABLE) val ownerType = TypeInfo(diagnosticWithParameters.getA(), Variance.IN_VARIANCE) val forExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null val variableExpr: JetExpression = ((forExpr.getLoopParameter() ?: forExpr.getMultiParameter()) ?: return null) as JetExpression val returnType = TypeInfo(variableExpr, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(forExpr, FunctionInfo("next", ownerType, returnType)) + return CreateCallableFromUsageFixes(forExpr, FunctionInfo("next", ownerType, returnType)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreatePropertyDelegateAccessorsActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreatePropertyDelegateAccessorsActionFactory.kt index ab9b4cba66e..f3879e74d40 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreatePropertyDelegateAccessorsActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreatePropertyDelegateAccessorsActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.TypeInfo @@ -33,9 +32,10 @@ import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.Callab import com.intellij.util.SmartList import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreatePropertyDelegateAccessorsActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreatePropertyDelegateAccessorsActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val expression = diagnostic.getPsiElement() as? JetExpression ?: return null val context = expression.analyze() [suppress("UNCHECKED_CAST")] @@ -79,6 +79,6 @@ object CreatePropertyDelegateAccessorsActionFactory : JetSingleIntentionActionFa callableInfos.add(setterInfo) } - return CreateCallableFromUsageFix(expression, callableInfos) + return CreateCallableFromUsageFixes(expression, callableInfos) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt index cfa48984ed5..0254cfe98ae 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.idea.quickfix.QuickFixUtil @@ -33,9 +32,10 @@ import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -object CreateSetFunctionActionFactory : JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +object CreateSetFunctionActionFactory : JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val accessExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null val arrayExpr = accessExpr.getArrayExpression() ?: return null val arrayType = TypeInfo(arrayExpr, Variance.IN_VARIANCE) @@ -63,6 +63,6 @@ object CreateSetFunctionActionFactory : JetSingleIntentionActionFactory() { parameters.add(ParameterInfo(valType, "value")) val returnType = TypeInfo(builtIns.getUnitType(), Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(accessExpr, FunctionInfo("set", arrayType, returnType, Collections.emptyList(), parameters)) + return CreateCallableFromUsageFixes(accessExpr, FunctionInfo("set", arrayType, returnType, Collections.emptyList(), parameters)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateUnaryOperationActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateUnaryOperationActionFactory.kt index 63f18164339..4b323a908e6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateUnaryOperationActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateUnaryOperationActionFactory.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -24,9 +23,10 @@ import org.jetbrains.kotlin.lexer.JetToken import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.psi.JetUnaryExpression import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* +import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory -public object CreateUnaryOperationActionFactory: JetSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): IntentionAction? { +public object CreateUnaryOperationActionFactory: JetIntentionActionsFactory() { + override fun doCreateActions(diagnostic: Diagnostic): List? { val callExpr = diagnostic.getPsiElement().getParent() as? JetUnaryExpression ?: return null val token = callExpr.getOperationToken() as JetToken val operationName = OperatorConventions.getNameForOperationSymbol(token) ?: return null @@ -36,6 +36,6 @@ public object CreateUnaryOperationActionFactory: JetSingleIntentionActionFactory val receiverType = TypeInfo(receiverExpr, Variance.IN_VARIANCE) val returnType = if (incDec) TypeInfo.ByReceiverType(Variance.OUT_VARIANCE) else TypeInfo(callExpr, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFix(callExpr, FunctionInfo(operationName.asString(), receiverType, returnType)) + return CreateCallableFromUsageFixes(callExpr, FunctionInfo(operationName.asString(), receiverType, returnType)) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt index 5f9a53797fd..d5d52ffeeef 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt @@ -112,7 +112,7 @@ public class CreateClassFromUsageFix( val constructorInfo = ConstructorInfo(classInfo, expectedTypeInfo) val builder = CallableBuilderConfiguration( - Collections.singletonList(constructorInfo), element as JetElement, file, editor, kind == PLAIN_CLASS || kind == TRAIT + Collections.singletonList(constructorInfo), element as JetElement, file, editor, false, kind == PLAIN_CLASS || kind == TRAIT ).createBuilder() builder.placement = CallablePlacement.NoReceiver(targetParent) CommandProcessor.getInstance().executeCommand(project, { builder.build() }, getText(), null) diff --git a/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt b/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt index 0549dfda293..822b54894df 100644 --- a/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt @@ -1,4 +1,5 @@ // "Import" "false" +// ACTION: Create extension function 'inc' // ACTION: Create function 'inc' // ACTION: Create local variable '++' // ACTION: Create parameter '++' diff --git a/idea/testData/quickfix/createFromUsage/createClass/callExpression/beforeCallWithLibClassQualifier.kt b/idea/testData/quickfix/createFromUsage/createClass/callExpression/beforeCallWithLibClassQualifier.kt index 5395c73c66a..3c8657a3a5d 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/callExpression/beforeCallWithLibClassQualifier.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/callExpression/beforeCallWithLibClassQualifier.kt @@ -1,5 +1,5 @@ // "Create class 'Foo'" "false" -// ACTION: Create function 'Foo' +// ACTION: Create extension function 'Foo' // ACTION: Replace with infix function call // ACTION: Split property declaration // ERROR: Unresolved reference: Foo diff --git a/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithJavaClassReceiver.before.Main.kt b/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithJavaClassReceiver.before.Main.kt index d519b1e4e8a..b16a7f12470 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithJavaClassReceiver.before.Main.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithJavaClassReceiver.before.Main.kt @@ -1,5 +1,5 @@ // "Create class 'Foo'" "false" -// ACTION: Create function 'Foo' +// ACTION: Create extension function 'Foo' // ACTION: Convert to expression body // ERROR: Unresolved reference: Foo diff --git a/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/beforeExtension.kt b/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/beforeExtension.kt index d88160868a8..4aee3dc9096 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/beforeExtension.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/beforeExtension.kt @@ -1,5 +1,5 @@ // "Create class 'Foo'" "false" -// ACTION: Create function 'Foo' +// ACTION: Create extension function 'Foo' // ERROR: Unresolved reference: Foo class A(val items: List) { diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeClassWithReceiver.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeClassWithReceiver.kt index 43e90fe9710..538e0032d94 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeClassWithReceiver.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeClassWithReceiver.kt @@ -1,4 +1,5 @@ // "Create class 'A'" "false" +// ACTION: Create extension property 'A' // ACTION: Create property 'A' // ERROR: Unresolved reference: A package p diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeEnumEntryWithReceiver.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeEnumEntryWithReceiver.kt index cb36a8a3319..19eb8c909fe 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeEnumEntryWithReceiver.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeEnumEntryWithReceiver.kt @@ -1,4 +1,5 @@ // "Create enum constant 'A'" "false" +// ACTION: Create extension property 'A' // ACTION: Create property 'A' // ERROR: Unresolved reference: A package p diff --git a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeObjectWithReceiver.kt b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeObjectWithReceiver.kt index 04559204731..1634560e578 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeObjectWithReceiver.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/referenceExpression/beforeObjectWithReceiver.kt @@ -1,4 +1,5 @@ // "Create object 'A'" "false" +// ACTION: Create extension property 'A' // ACTION: Create property 'A' // ERROR: Unresolved reference: A package p diff --git a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/afterPlusOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/afterPlusOnLibType.kt index c74928a66af..61f210720ba 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/afterPlusOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/afterPlusOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'plus'" "true" +// "Create extension function 'plus'" "true" class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/beforePlusOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/beforePlusOnLibType.kt index 8afca4f1cfa..6a52cbdec52 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/beforePlusOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/beforePlusOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'plus'" "true" +// "Create extension function 'plus'" "true" class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibObject.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibObject.kt index f2c57e50182..e5a4efe2462 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibObject.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibObject.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" fun test() { val a: Int = Unit.foo(2) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibType.kt index 62730fc79a4..066f5a3d8fe 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/afterFunOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibObject.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibObject.kt index d1a88adfdb5..fb7b0673fb5 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibObject.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibObject.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" fun test() { val a: Int = Unit.foo(2) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibType.kt index 1af7324bbe3..69e0e9f049a 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.after.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.after.kt index a27b75fcf3d..c7ea6761851 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.after.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.after.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" // ERROR: Unresolved reference: foo fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.before.Main.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.before.Main.kt index 1bc8930ad71..d5e667f721f 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.before.Main.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnJavaType.before.Main.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" // ERROR: Unresolved reference: foo fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtension.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtension.kt index 70dc56747f2..24c360ebac0 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtension.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtension.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionPartialSubstitution.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionPartialSubstitution.kt index d6f0cab149a..a25b786eb38 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionPartialSubstitution.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionPartialSubstitution.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionWithReceiverArg.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionWithReceiverArg.kt index 70dc56747f2..24c360ebac0 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionWithReceiverArg.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/afterExtensionWithReceiverArg.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtension.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtension.kt index afb586eb187..dd08cad29ce 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtension.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtension.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionPartialSubstitution.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionPartialSubstitution.kt index 28497850f9a..be9d1fe223c 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionPartialSubstitution.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionPartialSubstitution.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionWithReceiverArg.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionWithReceiverArg.kt index 12bc531b851..cd4c11bffd0 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionWithReceiverArg.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/beforeExtensionWithReceiverArg.kt @@ -1,4 +1,4 @@ -// "Create function 'foo'" "true" +// "Create extension function 'foo'" "true" class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/component/afterCreateComponentFromUsage3.kt b/idea/testData/quickfix/createFromUsage/createFunction/component/afterCreateComponentFromUsage3.kt index 0e7161daa75..09ccf0bbba3 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/component/afterCreateComponentFromUsage3.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/component/afterCreateComponentFromUsage3.kt @@ -1,4 +1,4 @@ -// "Create function 'component2'" "true" +// "Create extension function 'component2'" "true" class FooIterator { fun hasNext(): Boolean { return false } fun next(): Any { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/component/beforeCreateComponentFromUsage3.kt b/idea/testData/quickfix/createFromUsage/createFunction/component/beforeCreateComponentFromUsage3.kt index 1daf2c75cf3..eb5917cf1d4 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/component/beforeCreateComponentFromUsage3.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/component/beforeCreateComponentFromUsage3.kt @@ -1,4 +1,4 @@ -// "Create function 'component2'" "true" +// "Create extension function 'component2'" "true" class FooIterator { fun hasNext(): Boolean { return false } fun next(): Any { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage2.kt index 737ce9d5e2d..5b03da62375 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage2.kt @@ -1,4 +1,4 @@ -// "Create function 'get'" "true" +// "Create extension function 'get'" "true" fun x (y: Any) { val z: Any = y[""] } diff --git a/idea/testData/quickfix/createFromUsage/createFunction/get/beforeCreateGetFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/get/beforeCreateGetFromUsage2.kt index 01c4e832406..b3722990f1a 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/get/beforeCreateGetFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/get/beforeCreateGetFromUsage2.kt @@ -1,4 +1,4 @@ -// "Create function 'get'" "true" +// "Create extension function 'get'" "true" fun x (y: Any) { val z: Any = y[""] } diff --git a/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnLibType.kt index 2bb20386a6f..f0a5b0bea28 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'invoke'" "true" +// "Create extension function 'invoke'" "true" class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/invoke/beforeInvokeOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/invoke/beforeInvokeOnLibType.kt index 6ae9fc59a6a..7e0b9720dee 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/invoke/beforeInvokeOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/invoke/beforeInvokeOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'invoke'" "true" +// "Create extension function 'invoke'" "true" class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/set/afterCreateSetFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/set/afterCreateSetFromUsage2.kt index be5e4ac9cb7..8c9e7e9802b 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/set/afterCreateSetFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/set/afterCreateSetFromUsage2.kt @@ -1,4 +1,4 @@ -// "Create function 'set'" "true" +// "Create extension function 'set'" "true" import java.util.ArrayList diff --git a/idea/testData/quickfix/createFromUsage/createFunction/set/beforeCreateSetFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/set/beforeCreateSetFromUsage2.kt index f57c488c37f..5cfb1848508 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/set/beforeCreateSetFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/set/beforeCreateSetFromUsage2.kt @@ -1,4 +1,4 @@ -// "Create function 'set'" "true" +// "Create extension function 'set'" "true" class Foo { fun x (y: Any, w: java.util.ArrayList) { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/afterMinusOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/afterMinusOnLibType.kt index 660475ea72d..d0e4f8caf91 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/afterMinusOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/afterMinusOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'minus'" "true" +// "Create extension function 'minus'" "true" fun test() { val a = -false diff --git a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/beforeMinusOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/beforeMinusOnLibType.kt index a955d6f83e6..9a3bc997ba7 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/beforeMinusOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/beforeMinusOnLibType.kt @@ -1,4 +1,4 @@ -// "Create function 'minus'" "true" +// "Create extension function 'minus'" "true" fun test() { val a = -false diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt index 2addc1bd3e5..3f0d2ae5176 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt @@ -1,4 +1,5 @@ // "Create local variable 'foo'" "false" +// ACTION: Create extension property 'foo' // ACTION: Create property 'foo' // ACTION: Split property declaration // ERROR: Unresolved reference: foo diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt index a9c02a838e2..efe36748464 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt @@ -1,5 +1,6 @@ // "Create parameter 'foo'" "false" // ACTION: Split property declaration +// ACTION: Create extension property 'foo' // ACTION: Create property 'foo' // ERROR: Unresolved reference: foo diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibObject.kt index 587c93f1de5..c6a6870aa05 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibObject.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibObject.kt @@ -1,4 +1,4 @@ -// "Create property 'foo'" "true" +// "Create extension property 'foo'" "true" // ERROR: Property must be initialized fun test() { diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibType.kt index d9ab10b4678..fd09cffdd5f 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/afterValOnLibType.kt @@ -1,4 +1,4 @@ -// "Create property 'foo'" "true" +// "Create extension property 'foo'" "true" // ERROR: Property must be initialized class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/afterVarOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/afterVarOnLibType.kt index c1db46849e2..bb6fcf30edd 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/afterVarOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/afterVarOnLibType.kt @@ -1,4 +1,4 @@ -// "Create property 'foo'" "true" +// "Create extension property 'foo'" "true" // ERROR: Property must be initialized class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeCallOnUserType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeCallOnUserType.kt index cc9d812d4b8..81578237712 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeCallOnUserType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeCallOnUserType.kt @@ -1,4 +1,5 @@ // "Create property 'foo'" "false" +// ACTION: Create extension function 'bar' // ACTION: Create function 'bar' // ACTION: Replace with infix function call // ERROR: Unresolved reference: bar diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibObject.kt index c5318421fa3..d4b581f458f 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibObject.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibObject.kt @@ -1,4 +1,4 @@ -// "Create property 'foo'" "true" +// "Create extension property 'foo'" "true" // ERROR: Property must be initialized fun test() { diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibType.kt index cbdab7ba881..18025491d5c 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnLibType.kt @@ -1,4 +1,4 @@ -// "Create property 'foo'" "true" +// "Create extension property 'foo'" "true" // ERROR: Property must be initialized class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeVarOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeVarOnLibType.kt index 356a4a37df2..595ff30cc60 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeVarOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeVarOnLibType.kt @@ -1,4 +1,4 @@ -// "Create property 'foo'" "true" +// "Create extension property 'foo'" "true" // ERROR: Property must be initialized class A(val n: T)