trigger intentions, inspections and some of rename refactorings
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.intentions
|
|||||||
import com.intellij.codeInsight.FileModificationService
|
import com.intellij.codeInsight.FileModificationService
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
import com.intellij.codeInspection.IntentionWrapper
|
import com.intellij.codeInspection.IntentionWrapper
|
||||||
|
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
@@ -33,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtBlockExpression
|
|||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containsInside
|
import org.jetbrains.kotlin.psi.psiUtil.containsInside
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeIntentionTrigger
|
||||||
|
|
||||||
@Suppress("EqualsOrHashCode")
|
@Suppress("EqualsOrHashCode")
|
||||||
abstract class SelfTargetingIntention<TElement : PsiElement>(
|
abstract class SelfTargetingIntention<TElement : PsiElement>(
|
||||||
@@ -101,6 +103,10 @@ abstract class SelfTargetingIntention<TElement : PsiElement>(
|
|||||||
|
|
||||||
final override fun invoke(project: Project, editor: Editor?, file: PsiFile) {
|
final override fun invoke(project: Project, editor: Editor?, file: PsiFile) {
|
||||||
editor ?: return
|
editor ?: return
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||||
|
KotlinIdeIntentionTrigger::class.java,
|
||||||
|
this::class.java.simpleName
|
||||||
|
)
|
||||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||||
val target = getTarget(editor, file) ?: return
|
val target = getTarget(editor, file) ?: return
|
||||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(target)) return
|
if (!FileModificationService.getInstance().preparePsiElementForWrite(target)) return
|
||||||
|
|||||||
@@ -17,11 +17,13 @@
|
|||||||
package org.jetbrains.kotlin.idea.quickfix
|
package org.jetbrains.kotlin.idea.quickfix
|
||||||
|
|
||||||
import com.intellij.codeInsight.FileModificationService
|
import com.intellij.codeInsight.FileModificationService
|
||||||
|
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeQuickfixTrigger
|
||||||
|
|
||||||
abstract class KotlinQuickFixAction<out T : PsiElement>(element: T) : QuickFixActionBase<T>(element) {
|
abstract class KotlinQuickFixAction<out T : PsiElement>(element: T) : QuickFixActionBase<T>(element) {
|
||||||
protected open fun isAvailable(project: Project, editor: Editor?, file: KtFile) = true
|
protected open fun isAvailable(project: Project, editor: Editor?, file: KtFile) = true
|
||||||
@@ -34,6 +36,10 @@ abstract class KotlinQuickFixAction<out T : PsiElement>(element: T) : QuickFixAc
|
|||||||
final override fun invoke(project: Project, editor: Editor?, file: PsiFile) {
|
final override fun invoke(project: Project, editor: Editor?, file: PsiFile) {
|
||||||
val element = element ?: return
|
val element = element ?: return
|
||||||
if (file is KtFile && FileModificationService.getInstance().prepareFileForWrite(element.containingFile)) {
|
if (file is KtFile && FileModificationService.getInstance().prepareFileForWrite(element.containingFile)) {
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||||
|
KotlinIdeQuickfixTrigger::class.java,
|
||||||
|
this::class.java.simpleName
|
||||||
|
)
|
||||||
invoke(project, editor, file)
|
invoke(project, editor, file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ import com.intellij.codeInsight.FileModificationService
|
|||||||
import com.intellij.codeInsight.intention.HighPriorityAction
|
import com.intellij.codeInsight.intention.HighPriorityAction
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
import com.intellij.codeInsight.intention.LowPriorityAction
|
import com.intellij.codeInsight.intention.LowPriorityAction
|
||||||
|
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeQuickfixTrigger
|
||||||
|
|
||||||
open class QuickFixWithDelegateFactory(
|
open class QuickFixWithDelegateFactory(
|
||||||
private val delegateFactory: () -> IntentionAction?
|
private val delegateFactory: () -> IntentionAction?
|
||||||
@@ -54,6 +56,11 @@ open class QuickFixWithDelegateFactory(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||||
|
KotlinIdeQuickfixTrigger::class.java,
|
||||||
|
this::class.java.simpleName
|
||||||
|
)
|
||||||
|
|
||||||
val action = delegateFactory() ?: return
|
val action = delegateFactory() ?: return
|
||||||
|
|
||||||
assert(action.detectPriority() == this.detectPriority()) {
|
assert(action.detectPriority() == this.detectPriority()) {
|
||||||
|
|||||||
+7
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix.crossLanguage
|
|||||||
import com.intellij.codeInsight.daemon.QuickFixBundle
|
import com.intellij.codeInsight.daemon.QuickFixBundle
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
import com.intellij.codeInsight.intention.QuickFixFactory
|
import com.intellij.codeInsight.intention.QuickFixFactory
|
||||||
|
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||||
import com.intellij.lang.java.beans.PropertyKind
|
import com.intellij.lang.java.beans.PropertyKind
|
||||||
import com.intellij.lang.jvm.*
|
import com.intellij.lang.jvm.*
|
||||||
import com.intellij.lang.jvm.actions.*
|
import com.intellij.lang.jvm.actions.*
|
||||||
@@ -72,6 +73,7 @@ import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType
|
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType
|
||||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeIntentionTrigger
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
@@ -470,6 +472,11 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
|||||||
|
|
||||||
|
|
||||||
override fun invoke(project: Project, editor: Editor?, file: PsiFile?) {
|
override fun invoke(project: Project, editor: Editor?, file: PsiFile?) {
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||||
|
KotlinIdeIntentionTrigger::class.java,
|
||||||
|
this::class.java.simpleName
|
||||||
|
)
|
||||||
|
|
||||||
val target = pointer.element ?: return
|
val target = pointer.element ?: return
|
||||||
val kotlinAnnotation = JavaPsiFacade.getInstance(project).findClass(
|
val kotlinAnnotation = JavaPsiFacade.getInstance(project).findClass(
|
||||||
request.qualifiedName,
|
request.qualifiedName,
|
||||||
|
|||||||
+16
@@ -16,11 +16,27 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.refactoring.rename
|
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.openapi.project.Project
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.refactoring.rename.DirectoryAsPackageRenameHandler
|
import com.intellij.refactoring.rename.DirectoryAsPackageRenameHandler
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isIdentifier
|
import org.jetbrains.kotlin.psi.psiUtil.isIdentifier
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger
|
||||||
|
|
||||||
class KotlinDirectoryAsPackageRenameHandler : DirectoryAsPackageRenameHandler() {
|
class KotlinDirectoryAsPackageRenameHandler : DirectoryAsPackageRenameHandler() {
|
||||||
override fun isIdentifier(name: String, project: Project): Boolean = name.quoteIfNeeded().isIdentifier()
|
override fun isIdentifier(name: String, project: Project): Boolean = name.quoteIfNeeded().isIdentifier()
|
||||||
|
override fun invoke(project: Project, elements: Array<out PsiElement>, dataContext: DataContext?) {
|
||||||
|
super.invoke(project, elements, dataContext)
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) {
|
||||||
|
super.invoke(project, editor, file, dataContext)
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+14
@@ -16,8 +16,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.refactoring.rename
|
package org.jetbrains.kotlin.idea.refactoring.rename
|
||||||
|
|
||||||
|
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||||
import com.intellij.lang.Language
|
import com.intellij.lang.Language
|
||||||
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.refactoring.RefactoringActionHandler
|
import com.intellij.refactoring.RefactoringActionHandler
|
||||||
import com.intellij.refactoring.rename.inplace.MemberInplaceRenameHandler
|
import com.intellij.refactoring.rename.inplace.MemberInplaceRenameHandler
|
||||||
@@ -27,6 +30,7 @@ import org.jetbrains.kotlin.idea.core.unquote
|
|||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
|
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger
|
||||||
|
|
||||||
class KotlinMemberInplaceRenameHandler : MemberInplaceRenameHandler() {
|
class KotlinMemberInplaceRenameHandler : MemberInplaceRenameHandler() {
|
||||||
private class RenamerImpl(
|
private class RenamerImpl(
|
||||||
@@ -86,4 +90,14 @@ class KotlinMemberInplaceRenameHandler : MemberInplaceRenameHandler() {
|
|||||||
val currentElement = element?.substitute() as? KtNamedDeclaration ?: return false
|
val currentElement = element?.substitute() as? KtNamedDeclaration ?: return false
|
||||||
return currentElement.nameIdentifier != null && !KotlinVariableInplaceRenameHandler.isInplaceRenameAvailable(currentElement)
|
return currentElement.nameIdentifier != null && !KotlinVariableInplaceRenameHandler.isInplaceRenameAvailable(currentElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun invoke(project: Project, elements: Array<out PsiElement>, dataContext: DataContext) {
|
||||||
|
super.invoke(project, elements, dataContext)
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun invoke(project: Project, editor: Editor?, file: PsiFile?, dataContext: DataContext?) {
|
||||||
|
super.invoke(project, editor, file, dataContext)
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.refactoring.rename
|
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.openapi.util.Key
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.search.SearchScope
|
import com.intellij.psi.search.SearchScope
|
||||||
@@ -46,6 +47,7 @@ import org.jetbrains.kotlin.psi.psiUtil.isIdentifier
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
||||||
import org.jetbrains.kotlin.resolve.ImportPath
|
import org.jetbrains.kotlin.resolve.ImportPath
|
||||||
|
import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
import kotlin.collections.*
|
import kotlin.collections.*
|
||||||
|
|
||||||
@@ -67,6 +69,8 @@ abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() {
|
|||||||
override fun canProcessElement(element: PsiElement): Boolean = element is KtNamedDeclaration
|
override fun canProcessElement(element: PsiElement): Boolean = element is KtNamedDeclaration
|
||||||
|
|
||||||
override fun findReferences(element: PsiElement): Collection<PsiReference> {
|
override fun findReferences(element: PsiElement): Collection<PsiReference> {
|
||||||
|
FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName)
|
||||||
|
|
||||||
val searchParameters = KotlinReferencesSearchParameters(
|
val searchParameters = KotlinReferencesSearchParameters(
|
||||||
element,
|
element,
|
||||||
element.project.projectScope() or element.useScope,
|
element.project.projectScope() or element.useScope,
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ plugins {
|
|||||||
jvmTarget = "1.6"
|
jvmTarget = "1.6"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
testCompile(intellijDep()) {
|
||||||
|
includeJars("platform-api", rootProject = rootProject)
|
||||||
|
isTransitive = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
|||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.statistics
|
||||||
|
|
||||||
|
import com.intellij.internal.statistic.service.fus.collectors.ApplicationUsageTriggerCollector
|
||||||
|
import javax.annotation.processing.AbstractProcessor
|
||||||
|
import javax.annotation.processing.Processor
|
||||||
|
import javax.annotation.processing.RoundEnvironment
|
||||||
|
import javax.lang.model.element.TypeElement
|
||||||
|
|
||||||
|
open class KotlinStatisticsTrigger(private val groupIdSufix: String) : ApplicationUsageTriggerCollector() {
|
||||||
|
override fun getGroupId() = "statistics.kotlin.$groupIdSufix"
|
||||||
|
}
|
||||||
|
|
||||||
|
open class KotlinIdeStatisticsTrigger(groupIdSufix: String) : KotlinStatisticsTrigger("ide.$groupIdSufix")
|
||||||
|
|
||||||
|
open class KotlinGradlePluginStatisticsTrigger(groupIdSufix: String) : KotlinStatisticsTrigger("gradle.$groupIdSufix")
|
||||||
|
|
||||||
|
class KotlinVersionTrigger : KotlinGradlePluginStatisticsTrigger("kotlin_version")
|
||||||
|
|
||||||
|
class KotlinProjectLibraryUsageTrigger : KotlinGradlePluginStatisticsTrigger("library")
|
||||||
|
|
||||||
|
open class KotlinIdeActionTrigger(groupIdSufix: String? = null) : KotlinIdeStatisticsTrigger("action" + (groupIdSufix?.let { ".$it" } ?: ""))
|
||||||
|
|
||||||
|
class KotlinIdeUndoTrigger : KotlinIdeActionTrigger("undo")
|
||||||
|
|
||||||
|
class KotlinIdeQuickfixTrigger : KotlinIdeActionTrigger("quickfix")
|
||||||
|
|
||||||
|
class KotlinIdeRefactoringTrigger : KotlinIdeActionTrigger("refactoring")
|
||||||
|
|
||||||
|
class KotlinIdeIntentionTrigger : KotlinIdeActionTrigger("intention")
|
||||||
|
|
||||||
|
class KotlinIdeInspectionTrigger : KotlinIdeActionTrigger("inspection")
|
||||||
|
|
||||||
|
class KotlinIdeExceptionTrigger : KotlinIdeStatisticsTrigger("exception")
|
||||||
Reference in New Issue
Block a user