diff --git a/plugins/changeReminder/resources/META-INF/plugin.xml b/plugins/changeReminder/resources/META-INF/plugin.xml index 508603b51f10..af8a9e031768 100644 --- a/plugins/changeReminder/resources/META-INF/plugin.xml +++ b/plugins/changeReminder/resources/META-INF/plugin.xml @@ -30,9 +30,7 @@ Suggested files are listed as People who change the files in the active chang description="A maximum number of changes for which predictions are calculated"/> - - messages.ChangeReminderBundle diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionService.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionService.kt index e42e2f394574..8bf921a5e2e1 100644 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionService.kt +++ b/plugins/changeReminder/src/com/jetbrains/changeReminder/predict/PredictionService.kt @@ -9,21 +9,13 @@ import com.intellij.openapi.util.Comparing.haveEqualElements import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vcs.changes.* -import com.intellij.openapi.vcs.changes.ui.ChangesListView -import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager -import com.intellij.util.ui.UIUtil -import com.intellij.util.ui.tree.TreeUtil import com.jetbrains.changeReminder.getGitRootFiles import com.jetbrains.changeReminder.plugin.UserSettings import com.jetbrains.changeReminder.repository.FilesHistoryProvider -import com.jetbrains.changeReminder.stats.ChangeReminderChangeListChangedEvent -import com.jetbrains.changeReminder.stats.ChangeReminderNodeExpandedEvent import git4idea.history.GitHistoryTraverser import git4idea.history.GitHistoryTraverserListener import git4idea.history.getTraverser import git4idea.history.subscribeForGitHistoryTraverserCreation -import javax.swing.event.TreeExpansionEvent -import javax.swing.event.TreeExpansionListener @Service(Service.Level.PROJECT) internal class PredictionService(val project: Project) : Disposable { @@ -77,11 +69,6 @@ internal class PredictionService(val project: Project) : Disposable { override fun changeListsChanged() { val changes = ChangeListManager.getInstance(project).defaultChangeList.changes if (!haveEqualElements(changes, lastChanges)) { - if (changes.size <= Registry.intValue("vcs.changeReminder.changes.limit")) { - val prevFiles = lastChanges.map { ChangesUtil.getFilePath(it) } - val curFiles = changes.map { ChangesUtil.getFilePath(it) } - ChangeReminderChangeListChangedEvent(prevFiles, predictionData, curFiles).logEvent(project) - } calculatePrediction() lastChanges = changes } @@ -99,36 +86,6 @@ internal class PredictionService(val project: Project) : Disposable { } } - private val nodeExpandedListener = object : TreeExpansionListener { - private var view: ChangesListView? = null - override fun treeExpanded(event: TreeExpansionEvent?) { - if (event == null) { - return - } - val predictionData = TreeUtil.findObjectInPath(event.path, PredictionData.Prediction::class.java) ?: return - ChangeReminderNodeExpandedEvent(predictionData).logEvent(project) - } - - override fun treeCollapsed(event: TreeExpansionEvent?) {} - - fun tryToSubscribe() { - if (view != null) { - return - } - - val changeListViewPanel = - ChangesViewContentManager.getInstance(project).getActiveComponent(ChangesViewManager.ChangesViewToolWindowPanel::class.java) - ?: return - view = UIUtil.findComponentOfType(changeListViewPanel, ChangesListView::class.java)?.also { - it.addTreeExpansionListener(this) - } - } - - fun unsubscribe() { - view?.removeTreeExpansionListener(this) - } - } - init { if (userSettings.isPluginEnabled) { startService() @@ -153,8 +110,6 @@ internal class PredictionService(val project: Project) : Disposable { } private fun calculatePrediction() = synchronized(LOCK) { - nodeExpandedListener.tryToSubscribe() - if (!Disposer.isDisposed(predictionRequestDisposable)) { Disposer.dispose(predictionRequestDisposable) } @@ -199,8 +154,6 @@ internal class PredictionService(val project: Project) : Disposable { private fun shutdownService() = synchronized(LOCK) { Disposer.dispose(predictionRequestDisposable) - nodeExpandedListener.unsubscribe() - onTraverserDisposed() Disposer.dispose(serviceDisposable) diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderChangeListChangedEvent.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderChangeListChangedEvent.kt deleted file mode 100644 index 5446a053ee3e..000000000000 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderChangeListChangedEvent.kt +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.changeReminder.stats - -import com.intellij.internal.statistic.eventLog.events.EventPair -import com.intellij.openapi.project.Project -import com.intellij.openapi.vcs.FilePath -import com.jetbrains.changeReminder.predict.PredictionData -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.CHANGELIST_CHANGED -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.CUR_MODIFIED_FILES -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.PREV_MODIFIED_FILES - -internal class ChangeReminderChangeListChangedEvent( - private val prevModifiedFiles: Collection, - private val displayedPredictionData: PredictionData, - private val curModifiedFiles: Collection -) : ChangeReminderUserEvent { - - override fun logEvent(project: Project) { - val data = ArrayList>() - data.add(PREV_MODIFIED_FILES.with(prevModifiedFiles.anonymizeFilePathCollection())) - data.addAll(getPredictionData(displayedPredictionData)) - data.add(CUR_MODIFIED_FILES.with(curModifiedFiles.anonymizeFilePathCollection())) - CHANGELIST_CHANGED.log(project, data) - } -} \ No newline at end of file diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderChangesCommittedEvent.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderChangesCommittedEvent.kt deleted file mode 100644 index 340491e9767a..000000000000 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderChangesCommittedEvent.kt +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.changeReminder.stats - -import com.intellij.internal.statistic.eventLog.events.EventPair -import com.intellij.openapi.project.Project -import com.intellij.openapi.vcs.FilePath -import com.jetbrains.changeReminder.predict.PredictionData -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.CHANGES_COMMITTED -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.COMMITTED_FILES -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.CUR_MODIFIED_FILES - -internal class ChangeReminderChangesCommittedEvent( - private val curModifiedFiles: Collection, - private val committedFiles: Collection, - private val displayedPredictionData: PredictionData -) : ChangeReminderUserEvent { - - override fun logEvent(project: Project) { - val data = ArrayList>() - data.add(CUR_MODIFIED_FILES.with(curModifiedFiles.anonymizeFilePathCollection())) - data.add(COMMITTED_FILES.with(committedFiles.anonymizeFilePathCollection())) - data.addAll(getPredictionData(displayedPredictionData)) - CHANGES_COMMITTED.log(project, data) - } -} \ No newline at end of file diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderNodeExpandedEvent.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderNodeExpandedEvent.kt deleted file mode 100644 index 9cd994d310eb..000000000000 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderNodeExpandedEvent.kt +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.changeReminder.stats - -import com.intellij.openapi.project.Project -import com.jetbrains.changeReminder.predict.PredictionData -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.NODE_EXPANDED - -internal class ChangeReminderNodeExpandedEvent( - private val displayedPredictionResult: PredictionData -) : ChangeReminderUserEvent { - - override fun logEvent(project: Project) { - NODE_EXPANDED.log(project, getPredictionData(displayedPredictionResult)) - } -} \ No newline at end of file diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderStatsCollector.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderStatsCollector.kt deleted file mode 100644 index 5b2a2762b2b6..000000000000 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderStatsCollector.kt +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.changeReminder.stats - -import com.intellij.internal.statistic.eventLog.EventLogConfiguration -import com.intellij.internal.statistic.eventLog.EventLogGroup -import com.intellij.internal.statistic.eventLog.events.EventFields -import com.intellij.internal.statistic.eventLog.events.EventPair -import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector -import com.intellij.openapi.vcs.FilePath -import com.intellij.openapi.vfs.VirtualFile -import com.jetbrains.changeReminder.predict.PredictionData -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.DISPLAYED_PREDICTION -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.EMPTY_REASON -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.GROUP -import com.jetbrains.changeReminder.stats.ChangeReminderStatsCollector.PREDICTION_FOR_FILES -import java.util.* - -internal fun Collection.anonymizeVirtualFileCollection(): List = this.map { - EventLogConfiguration.getInstance().getOrCreate(GROUP.recorder).anonymize(it.path) -} - -internal fun Collection.anonymizeFilePathCollection(): List = this.map { - EventLogConfiguration.getInstance().getOrCreate(GROUP.recorder).anonymize(it.path) -} - -internal fun getPredictionData(predictionData: PredictionData): List> { - val data = ArrayList>() - when (predictionData) { - is PredictionData.Prediction -> { - data.add(DISPLAYED_PREDICTION.with(predictionData.predictionToDisplay.anonymizeVirtualFileCollection())) - data.add(PREDICTION_FOR_FILES.with(predictionData.requestedFiles.anonymizeFilePathCollection())) - } - is PredictionData.EmptyPrediction -> { - data.add(EMPTY_REASON.with(predictionData.reason)) - } - } - return data -} - -object ChangeReminderStatsCollector : CounterUsagesCollector() { - override fun getGroup(): EventLogGroup = GROUP - - internal val GROUP = EventLogGroup("vcs.change.reminder", 4) - internal val COMMITTED_FILES = EventFields.AnonymizedList("committed_files") - internal val DISPLAYED_PREDICTION = EventFields.AnonymizedList("displayed_prediction") - internal val CUR_MODIFIED_FILES = EventFields.AnonymizedList("cur_modified_files") - internal val PREV_MODIFIED_FILES = EventFields.AnonymizedList("prev_modified_files") - internal val PREDICTION_FOR_FILES = EventFields.AnonymizedList("prediction_for_files") - internal val EMPTY_REASON = EventFields.Enum("empty_reason") { - it.name.lowercase(Locale.ENGLISH) - } - - internal val CHANGELIST_CHANGED = GROUP.registerVarargEvent("changelist_changed", - PREV_MODIFIED_FILES, - DISPLAYED_PREDICTION, - PREDICTION_FOR_FILES, - EMPTY_REASON, - CUR_MODIFIED_FILES) - - internal val CHANGES_COMMITTED = GROUP.registerVarargEvent("changes_committed", - CUR_MODIFIED_FILES, - COMMITTED_FILES, - DISPLAYED_PREDICTION, - PREDICTION_FOR_FILES, - EMPTY_REASON) - - internal val NODE_EXPANDED = GROUP.registerVarargEvent("node_expanded", - DISPLAYED_PREDICTION, - PREDICTION_FOR_FILES, - EMPTY_REASON) -} diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderUserEvent.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderUserEvent.kt deleted file mode 100644 index 01592b4ab01c..000000000000 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/ChangeReminderUserEvent.kt +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.changeReminder.stats - -import com.intellij.internal.statistic.eventLog.events.EventPair -import com.intellij.internal.statistic.eventLog.events.VarargEventId -import com.intellij.openapi.project.Project - -internal interface ChangeReminderUserEvent { - fun logEvent(project: Project) -} \ No newline at end of file diff --git a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/commit/ChangeReminderStatsCheckinHandler.kt b/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/commit/ChangeReminderStatsCheckinHandler.kt deleted file mode 100644 index 6d5797dbd127..000000000000 --- a/plugins/changeReminder/src/com/jetbrains/changeReminder/stats/commit/ChangeReminderStatsCheckinHandler.kt +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.jetbrains.changeReminder.stats.commit - -import com.intellij.openapi.components.service -import com.intellij.openapi.vcs.CheckinProjectPanel -import com.intellij.openapi.vcs.changes.ChangeListManager -import com.intellij.openapi.vcs.changes.ChangesUtil -import com.intellij.openapi.vcs.changes.CommitContext -import com.intellij.openapi.vcs.checkin.CheckinHandler -import com.intellij.openapi.vcs.checkin.VcsCheckinHandlerFactory -import com.jetbrains.changeReminder.predict.PredictionService -import com.jetbrains.changeReminder.stats.ChangeReminderChangesCommittedEvent -import git4idea.GitVcs - -class ChangeReminderStatsCheckinHandler : VcsCheckinHandlerFactory(GitVcs.getKey()) { - override fun createVcsHandler(panel: CheckinProjectPanel, commitContext: CommitContext) = object : CheckinHandler() { - override fun beforeCheckin(): ReturnResult { - val project = panel.project - val prediction = project.service().predictionDataToDisplay - val committedFiles = panel.selectedChanges.map { ChangesUtil.getFilePath(it) } - - val curFiles = ChangeListManager.getInstance(project).defaultChangeList.changes.map { ChangesUtil.getFilePath(it) } - ChangeReminderChangesCommittedEvent(curFiles, committedFiles, prediction).logEvent(project) - return ReturnResult.COMMIT - } - } -} \ No newline at end of file