diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AbstractReferenceSubstitutionRenameHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AbstractReferenceSubstitutionRenameHandler.kt index b3c4467c84f..738d78f9a88 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AbstractReferenceSubstitutionRenameHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AbstractReferenceSubstitutionRenameHandler.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.application.ApplicationManager @@ -33,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger abstract class AbstractReferenceSubstitutionRenameHandler( private val delegateHandler: RenameHandler = MemberInplaceRenameHandler() @@ -63,6 +65,9 @@ abstract class AbstractReferenceSubstitutionRenameHandler( override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext) { val elementToRename = getElementToRename(dataContext) ?: return + + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + val wrappingContext = DataContext { id -> if (CommonDataKeys.PSI_ELEMENT.`is`(id)) return@DataContext elementToRename dataContext.getData(id) @@ -70,13 +75,13 @@ abstract class AbstractReferenceSubstitutionRenameHandler( // Can't provide new name for inplace refactoring in unit test mode if (!ApplicationManager.getApplication().isUnitTestMode && delegateHandler.isAvailableOnDataContext(wrappingContext)) { delegateHandler.invoke(project, editor, file, wrappingContext) - } - else { + } else { super.invoke(project, editor, file, wrappingContext) } } override fun invoke(project: Project, elements: Array, dataContext: DataContext) { // Can't be invoked outside of a text editor + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticInheritorRenamer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticInheritorRenamer.kt index 248639b2fa7..77be45a9b1d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticInheritorRenamer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticInheritorRenamer.kt @@ -16,17 +16,20 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.psi.PsiElement import com.intellij.psi.PsiNamedElement import com.intellij.psi.search.searches.ClassInheritorsSearch import com.intellij.refactoring.JavaRefactoringSettings import com.intellij.refactoring.RefactoringBundle +import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo import com.intellij.refactoring.rename.naming.AutomaticRenamer import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.psi.KtClass +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class AutomaticInheritorRenamer(klass: KtClass, newName: String): AutomaticRenamer() { init { @@ -45,6 +48,21 @@ class AutomaticInheritorRenamer(klass: KtClass, newName: String): AutomaticRenam override fun getDialogTitle() = RefactoringBundle.message("rename.inheritors.title") override fun getDialogDescription() = RefactoringBundle.message("rename.inheritors.with.the.following.names.to") override fun entityName() = RefactoringBundle.message("entity.name.inheritor") + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?, allRenames: MutableMap?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages, allRenames) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } } class AutomaticInheritorRenamerFactory : AutomaticRenamerFactory { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt index 8f07afe957a..2345592b1b5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticOverloadsRenamer.kt @@ -16,10 +16,12 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.util.Key import com.intellij.psi.PsiElement import com.intellij.refactoring.JavaRefactoringSettings import com.intellij.refactoring.RefactoringBundle +import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo import com.intellij.refactoring.rename.naming.AutomaticRenamer import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory import com.intellij.usageView.UsageInfo @@ -36,6 +38,7 @@ import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.UserDataProperty import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.getPsi +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class AutomaticOverloadsRenamer(function: KtNamedFunction, newName: String) : AutomaticRenamer() { companion object { @@ -58,6 +61,21 @@ class AutomaticOverloadsRenamer(function: KtNamedFunction, newName: String) : Au override fun getDialogDescription() = "Rename overloads to:" override fun entityName() = "Overload" override fun isSelectedByDefault(): Boolean = true + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?, allRenames: MutableMap?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages, allRenames) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } } private fun KtNamedFunction.getOverloads(): Collection { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticParameterRenamer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticParameterRenamer.kt index 23a0bee5419..3a35c48bfd1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticParameterRenamer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticParameterRenamer.kt @@ -16,11 +16,13 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod import com.intellij.psi.PsiNamedElement import com.intellij.refactoring.JavaRefactoringSettings import com.intellij.refactoring.RefactoringBundle +import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo import com.intellij.refactoring.rename.naming.AutomaticRenamer import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory import com.intellij.usageView.UsageInfo @@ -32,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class AutomaticParameterRenamer(element: KtParameter, newName: String) : AutomaticRenamer() { init { @@ -62,6 +65,21 @@ class AutomaticParameterRenamer(element: KtParameter, newName: String) : Automat override fun entityName() = "Parameter" override fun isSelectedByDefault() = true + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?, allRenames: MutableMap?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages, allRenames) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } } class AutomaticParameterRenamerFactory : AutomaticRenamerFactory { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticVariableRenamer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticVariableRenamer.kt index f10a41ae330..d652c12839b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticVariableRenamer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/AutomaticVariableRenamer.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiClass @@ -26,6 +27,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager import com.intellij.psi.util.PsiTreeUtil import com.intellij.refactoring.JavaRefactoringSettings import com.intellij.refactoring.RefactoringBundle +import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo import com.intellij.refactoring.rename.naming.AutomaticRenamer import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory import com.intellij.usageView.UsageInfo @@ -42,6 +44,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException import org.jetbrains.kotlin.resolve.source.PsiSourceElement +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.util.* @@ -126,6 +129,21 @@ class AutomaticVariableRenamer( companion object { val LOG = Logger.getInstance(AutomaticVariableRenamer::class.java) } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun findUsages(result: MutableList?, searchInStringsAndComments: Boolean, searchInNonJavaFiles: Boolean, unresolvedUsages: MutableList?, allRenames: MutableMap?) { + super.findUsages(result, searchInStringsAndComments, searchInNonJavaFiles, unresolvedUsages, allRenames) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } } private fun KotlinType.isCollectionLikeOf(classPsiElement: PsiNamedElement): Boolean { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt index 2ad768603ec..524f6a3ab45 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt @@ -16,8 +16,11 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger +import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.command.impl.StartMarkAction import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiMember @@ -30,6 +33,7 @@ import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.psi.KtPsiUtil import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class JavaMemberByKotlinReferenceInplaceRenameHandler : MemberInplaceRenameHandler() { class Renamer( @@ -54,4 +58,15 @@ class JavaMemberByKotlinReferenceInplaceRenameHandler : MemberInplaceRenameHandl override fun createMemberRenamer(element: PsiElement, elementToRename: PsiNameIdentifierOwner, editor: Editor): MemberInplaceRenamer { return Renamer(elementToRename, element, editor) } + + override fun invoke(project: Project, elements: Array, dataContext: DataContext) { + super.invoke(project, elements, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { + super.invoke(project, editor, file, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt index dbc21f4763e..efe17f95b87 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinAwareJavaGetterRenameProcessor.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod import com.intellij.psi.PsiReference @@ -14,6 +15,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.idea.references.SyntheticPropertyAccessorReference import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor import org.jetbrains.kotlin.utils.ifEmpty @@ -26,6 +28,7 @@ class KotlinAwareJavaGetterRenameProcessor : RenameJavaMethodProcessor() { val propertyName = SyntheticJavaPropertyDescriptor.propertyNameByGetMethodName(Name.identifier(getter.name)) ?: return getterReferences val setterName = JvmAbi.setterName(propertyName.asString()) val containingClass = getter.containingClass ?: return getterReferences + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) val setterReferences = containingClass .findMethodsByName(setterName, true) .filter { it.parameters.size == 1 && it.returnType == PsiType.VOID } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt index c13b27c8959..7a95d711753 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor import com.intellij.openapi.extensions.ExtensionPointName @@ -24,6 +25,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.refactoring.rename.RenameHandler +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.util.* @@ -47,9 +49,11 @@ class KotlinRenameDispatcherHandler : RenameHandler { override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext) { getRenameHandler(dataContext)?.invoke(project, editor, file, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } override fun invoke(project: Project, elements: Array, dataContext: DataContext) { getRenameHandler(dataContext)?.invoke(project, elements, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt.181 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt.181 index 7ef8e91c293..1ae7f6527b3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt.181 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinRenameDispatcherHandler.kt.181 @@ -26,6 +26,8 @@ import com.intellij.psi.PsiFile import com.intellij.refactoring.rename.RenameHandler import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.util.* +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class KotlinRenameDispatcherHandler : RenameHandler { companion object { @@ -47,9 +49,11 @@ class KotlinRenameDispatcherHandler : RenameHandler { override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { getRenameHandler(dataContext)?.invoke(project, editor, file, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } override fun invoke(project: Project, elements: Array, dataContext: DataContext?) { getRenameHandler(dataContext)?.invoke(project, elements, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt index 0faed3abeb3..e06239f6176 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt @@ -5,13 +5,17 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger +import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project import com.intellij.psi.* import com.intellij.refactoring.RefactoringActionHandler import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler import com.intellij.refactoring.rename.inplace.VariableInplaceRenamer import org.jetbrains.kotlin.idea.core.unquote import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger open class KotlinVariableInplaceRenameHandler : VariableInplaceRenameHandler() { companion object { @@ -68,4 +72,14 @@ open class KotlinVariableInplaceRenameHandler : VariableInplaceRenameHandler() { override public fun isAvailable(element: PsiElement?, editor: Editor, file: PsiFile) = editor.settings.isVariableInplaceRenameEnabled && element != null && isInplaceRenameAvailable(element) + + override fun invoke(project: Project, elements: Array, dataContext: DataContext) { + super.invoke(project, elements, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { + super.invoke(project, editor, file, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt.181 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt.181 index 5344790704f..d298a9da1af 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt.181 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/KotlinVariableInplaceRenameHandler.kt.181 @@ -5,13 +5,17 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger +import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project import com.intellij.psi.* import com.intellij.refactoring.RefactoringActionHandler import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler import com.intellij.refactoring.rename.inplace.VariableInplaceRenamer import org.jetbrains.kotlin.idea.core.unquote import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger open class KotlinVariableInplaceRenameHandler : VariableInplaceRenameHandler() { companion object { @@ -68,4 +72,14 @@ open class KotlinVariableInplaceRenameHandler : VariableInplaceRenameHandler() { override public fun isAvailable(element: PsiElement?, editor: Editor, file: PsiFile) = editor.settings.isVariableInplaceRenameEnabled && element != null && isInplaceRenameAvailable(element) + + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext) { + getRenameHandler(dataContext)?.invoke(project, editor, file, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + + override fun invoke(project: Project, elements: Array, dataContext: DataContext) { + getRenameHandler(dataContext)?.invoke(project, elements, dataContext) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt index 0736e42c3ad..e5fd9d5e79a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt @@ -26,15 +26,18 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.psi.KtSimpleNameExpression -class RenameBackingFieldReferenceHandler: KotlinVariableInplaceRenameHandler() { +class RenameBackingFieldReferenceHandler : KotlinVariableInplaceRenameHandler() { override fun isAvailable(element: PsiElement?, editor: Editor, file: PsiFile): Boolean { val refExpression = file.findElementForRename(editor.caretModel.offset) ?: return false if (refExpression.text != "field") return false return refExpression.resolveToCall()?.resultingDescriptor is SyntheticFieldDescriptor } - override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { - CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to backing field reference", "Rename", null) + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { + super.invoke(project, editor, file, dataContext) + editor?.let { + CodeInsightUtils.showErrorHint(project, it, "Rename is not applicable to backing field reference", "Rename", null) + } } override fun invoke(project: Project, elements: Array, dataContext: DataContext) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt.181 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt.181 index 429a0cfb1cd..b2bb4d935d0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt.181 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt.181 @@ -33,11 +33,13 @@ class RenameBackingFieldReferenceHandler: KotlinVariableInplaceRenameHandler() { return refExpression.resolveToCall()?.resultingDescriptor is SyntheticFieldDescriptor } - override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { - CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to backing field reference", "Rename", null) + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { + editor?.let { + CodeInsightUtils.showErrorHint(project, it, "Rename is not applicable to backing field reference", "Rename", null) + } } - override fun invoke(project: Project, elements: Array, dataContext: DataContext?) { + override fun invoke(project: Project, elements: Array, dataContext: DataContext) { // Do nothing: this method is called not from editor } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameByLabeledReferenceInLambdaArgumentHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameByLabeledReferenceInLambdaArgumentHandler.kt index 3e78dc83455..8670f7e7be3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameByLabeledReferenceInLambdaArgumentHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameByLabeledReferenceInLambdaArgumentHandler.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename import com.intellij.openapi.actionSystem.DataContext +import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -45,4 +46,5 @@ class RenameByLabeledReferenceInLambdaArgumentHandler : DescriptorToSourceUtilsIde.getAnyDeclaration(dataContext.project, descriptor) } } + } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt index 1cd984b5101..0de28c61680 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt @@ -36,8 +36,11 @@ class RenameDynamicMemberHandler: KotlinVariableInplaceRenameHandler() { return calleeDescriptor.isDynamic() } - override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { - CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to dynamically invoked members", "Rename", null) + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { + super.invoke(project, editor, file, dataContext) + editor?.let { + CodeInsightUtils.showErrorHint(project, it, "Rename is not applicable to dynamically invoked members", "Rename", null) + } } override fun invoke(project: Project, elements: Array, dataContext: DataContext) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt.181 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt.181 index f25b34c26e9..0de28c61680 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt.181 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt.181 @@ -36,11 +36,14 @@ class RenameDynamicMemberHandler: KotlinVariableInplaceRenameHandler() { return calleeDescriptor.isDynamic() } - override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { - CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to dynamically invoked members", "Rename", null) + override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) { + super.invoke(project, editor, file, dataContext) + editor?.let { + CodeInsightUtils.showErrorHint(project, it, "Rename is not applicable to dynamically invoked members", "Rename", null) + } } - override fun invoke(project: Project, elements: Array, dataContext: DataContext?) { + override fun invoke(project: Project, elements: Array, dataContext: DataContext) { // Do nothing: this method is called not from editor } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJvmNameHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJvmNameHandler.kt index 05a8bd02ea0..30e14de5292 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJvmNameHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJvmNameHandler.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor @@ -36,6 +37,7 @@ import org.jetbrains.kotlin.psi.psiUtil.plainContent import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class RenameJvmNameHandler : PsiElementRenameHandler() { private fun getStringTemplate(dataContext: DataContext): KtStringTemplateExpression? { @@ -75,9 +77,11 @@ class RenameJvmNameHandler : PsiElementRenameHandler() { override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext) { super.invoke(project, editor, file, wrapDataContext(dataContext) ?: return) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } override fun invoke(project: Project, elements: Array, dataContext: DataContext) { super.invoke(project, elements, wrapDataContext(dataContext) ?: return) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt index afbcf807261..27ed8fa3409 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt @@ -16,10 +16,12 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.openapi.module.ModuleUtilCore import com.intellij.psi.JavaPsiFacade import com.intellij.psi.PsiElement +import com.intellij.psi.PsiReference import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.SearchScope import com.intellij.refactoring.rename.RenamePsiFileProcessor @@ -29,6 +31,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class RenameKotlinFileProcessor : RenamePsiFileProcessor() { class FileRenamingPsiClassWrapper( @@ -63,4 +66,16 @@ class RenameKotlinFileProcessor : RenamePsiFileProcessor() { } } } + + override fun findReferences(element: PsiElement): MutableCollection { + return super.findReferences(element).also { + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + } + + override fun findReferences(element: PsiElement, searchInCommentsAndStrings: Boolean): MutableCollection { + return super.findReferences(element, searchInCommentsAndStrings).also { + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt.173 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt.173 index 754f31b915b..d95d859066f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt.173 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt.173 @@ -29,6 +29,8 @@ import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger class RenameKotlinFileProcessor : RenamePsiFileProcessor() { class FileRenamingPsiClassWrapper( @@ -63,4 +65,15 @@ class RenameKotlinFileProcessor : RenamePsiFileProcessor() { } } } + override fun findReferences(element: PsiElement): MutableCollection { + return super.findReferences(element).also { + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + } + + override fun findReferences(element: PsiElement, searchInCommentsAndStrings: Boolean): MutableCollection { + return super.findReferences(element, searchInCommentsAndStrings).also { + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) + } + } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 index f9d7ffaffa2..6128bf1ab9b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinPsiProcessor.kt.173 @@ -41,11 +41,15 @@ import org.jetbrains.kotlin.psi.psiUtil.isIdentifier import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded import org.jetbrains.kotlin.resolve.ImportPath +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() { override fun canProcessElement(element: PsiElement): Boolean = element is KtNamedDeclaration override fun findReferences(element: PsiElement): Collection { + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName) + val searchParameters = KotlinReferencesSearchParameters( element, element.project.projectScope() or element.useScope, diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt index 21e7d4bb786..e9067fab7ce 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameOnSecondaryConstructorHandler.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor @@ -26,6 +27,7 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.refactoring.rename.RenameHandler import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class RenameOnSecondaryConstructorHandler : RenameHandler { @@ -44,6 +46,7 @@ class RenameOnSecondaryConstructorHandler : RenameHandler { override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to secondary constructors", "Rename", null) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } override fun invoke(project: Project, elements: Array, dataContext: DataContext?) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt index da3f102f65d..3cca678c158 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.resolve.calls.tower.isSynthesized +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class RenameSyntheticDeclarationByReferenceHandler : RenameHandler { override fun isAvailableOnDataContext(dataContext: DataContext): Boolean { @@ -29,6 +31,7 @@ class RenameSyntheticDeclarationByReferenceHandler : RenameHandler { override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to synthetic declaration", "Rename", null) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } override fun invoke(project: Project, elements: Array, dataContext: DataContext?) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt.181 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt.181 index 82bc397664d..16d9c721aff 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt.181 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameSyntheticDeclarationByReferenceHandler.kt.181 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename +import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.editor.Editor @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.resolve.calls.tower.isSynthesized +import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger class RenameSyntheticDeclarationByReferenceHandler : RenameHandler { override fun isAvailableOnDataContext(dataContext: DataContext?): Boolean { @@ -30,6 +32,7 @@ class RenameSyntheticDeclarationByReferenceHandler : RenameHandler { override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { CodeInsightUtils.showErrorHint(project, editor, "Rename is not applicable to synthetic declaration", "Rename", null) + FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this::class.java.name) } override fun invoke(project: Project, elements: Array, dataContext: DataContext?) {