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.intention.IntentionAction
|
||||
import com.intellij.codeInspection.IntentionWrapper
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.editor.Editor
|
||||
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.psiUtil.containsInside
|
||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeIntentionTrigger
|
||||
|
||||
@Suppress("EqualsOrHashCode")
|
||||
abstract class SelfTargetingIntention<TElement : PsiElement>(
|
||||
@@ -101,6 +103,10 @@ abstract class SelfTargetingIntention<TElement : PsiElement>(
|
||||
|
||||
final override fun invoke(project: Project, editor: Editor?, file: PsiFile) {
|
||||
editor ?: return
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||
KotlinIdeIntentionTrigger::class.java,
|
||||
this::class.java.simpleName
|
||||
)
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
val target = getTarget(editor, file) ?: return
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(target)) return
|
||||
|
||||
@@ -17,11 +17,13 @@
|
||||
package org.jetbrains.kotlin.idea.quickfix
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeQuickfixTrigger
|
||||
|
||||
abstract class KotlinQuickFixAction<out T : PsiElement>(element: T) : QuickFixActionBase<T>(element) {
|
||||
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) {
|
||||
val element = element ?: return
|
||||
if (file is KtFile && FileModificationService.getInstance().prepareFileForWrite(element.containingFile)) {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||
KotlinIdeQuickfixTrigger::class.java,
|
||||
this::class.java.simpleName
|
||||
)
|
||||
invoke(project, editor, file)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,11 @@ import com.intellij.codeInsight.FileModificationService
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction
|
||||
import com.intellij.codeInsight.intention.IntentionAction
|
||||
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.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeQuickfixTrigger
|
||||
|
||||
open class QuickFixWithDelegateFactory(
|
||||
private val delegateFactory: () -> IntentionAction?
|
||||
@@ -54,6 +56,11 @@ open class QuickFixWithDelegateFactory(
|
||||
return
|
||||
}
|
||||
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(
|
||||
KotlinIdeQuickfixTrigger::class.java,
|
||||
this::class.java.simpleName
|
||||
)
|
||||
|
||||
val action = delegateFactory() ?: return
|
||||
|
||||
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.intention.IntentionAction
|
||||
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.jvm.*
|
||||
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.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeIntentionTrigger
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -470,6 +472,11 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() {
|
||||
|
||||
|
||||
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 kotlinAnnotation = JavaPsiFacade.getInstance(project).findClass(
|
||||
request.qualifiedName,
|
||||
|
||||
+16
@@ -16,11 +16,27 @@
|
||||
|
||||
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.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.refactoring.rename.DirectoryAsPackageRenameHandler
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isIdentifier
|
||||
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger
|
||||
|
||||
class KotlinDirectoryAsPackageRenameHandler : DirectoryAsPackageRenameHandler() {
|
||||
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
|
||||
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||
import com.intellij.lang.Language
|
||||
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.MemberInplaceRenameHandler
|
||||
@@ -27,6 +30,7 @@ import org.jetbrains.kotlin.idea.core.unquote
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtPrimaryConstructor
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger
|
||||
|
||||
class KotlinMemberInplaceRenameHandler : MemberInplaceRenameHandler() {
|
||||
private class RenamerImpl(
|
||||
@@ -86,4 +90,14 @@ class KotlinMemberInplaceRenameHandler : MemberInplaceRenameHandler() {
|
||||
val currentElement = element?.substitute() as? KtNamedDeclaration ?: return false
|
||||
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
|
||||
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSApplicationUsageTrigger
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.psi.*
|
||||
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.quoteIfNeeded
|
||||
import org.jetbrains.kotlin.resolve.ImportPath
|
||||
import org.jetbrains.kotlin.statistics.KotlinIdeRefactoringTrigger
|
||||
import java.util.ArrayList
|
||||
import kotlin.collections.*
|
||||
|
||||
@@ -67,6 +69,8 @@ abstract class RenameKotlinPsiProcessor : RenamePsiElementProcessor() {
|
||||
override fun canProcessElement(element: PsiElement): Boolean = element is KtNamedDeclaration
|
||||
|
||||
override fun findReferences(element: PsiElement): Collection<PsiReference> {
|
||||
FUSApplicationUsageTrigger.getInstance().trigger(KotlinIdeRefactoringTrigger::class.java, this.javaClass.simpleName)
|
||||
|
||||
val searchParameters = KotlinReferencesSearchParameters(
|
||||
element,
|
||||
element.project.projectScope() or element.useScope,
|
||||
|
||||
@@ -7,6 +7,10 @@ plugins {
|
||||
jvmTarget = "1.6"
|
||||
|
||||
dependencies {
|
||||
testCompile(intellijDep()) {
|
||||
includeJars("platform-api", rootProject = rootProject)
|
||||
isTransitive = false
|
||||
}
|
||||
}
|
||||
|
||||
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