Commit 16094bbc authored by Svetlana.Zemlyanskaya's avatar Svetlana.Zemlyanskaya
Browse files

FB-125 Don't report actions and dialogs from third-party plugins

parent 014bf68f
Showing with 48 additions and 12 deletions
+48 -12
......@@ -196,6 +196,6 @@ public class HotSwapManager extends AbstractProjectComponent {
reloadClassesProgress.setTitle(DebuggerBundle.message("progress.hotswap.reloading"));
reloadClassesCommand.run();
ActionsCollector.getInstance().record("Reload Classes");
ActionsCollector.getInstance().record("Reload Classes", HotSwapManager.class);
}
}
......@@ -32,7 +32,7 @@ class DaemonTooltipAction(private val myFixText: String, private val myActualOff
}
override fun execute(editor: Editor) {
ActionsCollector.getInstance().record("tooltip.actions.execute")
ActionsCollector.getInstance().record("tooltip.actions.execute", this::class.java)
val project = editor.project ?: return
val psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: return
......@@ -52,7 +52,7 @@ class DaemonTooltipAction(private val myFixText: String, private val myActualOff
}
override fun showAllActions(editor: Editor) {
ActionsCollector.getInstance().record("tooltip.actions.show.all")
ActionsCollector.getInstance().record("tooltip.actions.show.all", this::class.java)
editor.caretModel.moveToOffset(myActualOffset)
val project = editor.project ?: return
......
......@@ -325,7 +325,7 @@ internal class DaemonTooltipWithActionRenderer(text: String?,
}
override fun setSelected(e: AnActionEvent, state: Boolean) {
ActionsCollector.getInstance().record("tooltip.actions.show.description.gear")
ActionsCollector.getInstance().record("tooltip.actions.show.description.gear", this::class.java)
reloader.reload(state)
}
......
......@@ -4,6 +4,8 @@ package com.intellij.ide.actions;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.util.xmlb.annotations.MapAnnotation;
import com.intellij.util.xmlb.annotations.Tag;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
......@@ -12,7 +14,17 @@ import java.util.Map;
* @author Konstantin Bulenkov
*/
public abstract class ActionsCollector {
public abstract void record(String actionId);
/**
* Only actions from platform and JB plugins are recorded.
* If no context class is provided then nothing will be recorded.
* @deprecated
*/
public void record(String actionId) {}
/**
* Only actions from platform and JB plugins are recorded.
*/
public abstract void record(@Nullable String actionId, @NotNull Class context);
public abstract State getState();
......
......@@ -1877,7 +1877,7 @@ public abstract class DialogWrapper {
private void recordAction(String name, AWTEvent event) {
if (event instanceof KeyEvent && ApplicationManager.getApplication() != null) {
String shortcut = getKeystrokeText(KeyStroke.getKeyStrokeForEvent((KeyEvent)event));
ActionsCollector.getInstance().record(name + " " + shortcut);
ActionsCollector.getInstance().record(name + " " + shortcut, DialogWrapper.class);
}
}
......
......@@ -172,7 +172,7 @@ public class LineTooltipRenderer extends ComparableObject.Impl implements Toolti
public void actionPerformed(final AnActionEvent e) {
// The tooltip gets the focus if using a screen reader and invocation through a keyboard shortcut.
hintHint.setRequestFocus(ScreenReader.isActive() && (e.getInputEvent() instanceof KeyEvent));
ActionsCollector.getInstance().record("tooltip.actions.show.description.shortcut");
ActionsCollector.getInstance().record("tooltip.actions.show.description.shortcut", this.getClass());
reloader.reload(!expanded);
}
});
......@@ -200,7 +200,7 @@ public class LineTooltipRenderer extends ComparableObject.Impl implements Toolti
return;
}
ActionsCollector.getInstance().record("tooltip.actions.show.description.morelink");
ActionsCollector.getInstance().record("tooltip.actions.show.description.morelink", this.getClass());
reloader.reload(!expanded);
}
......
......@@ -2,6 +2,10 @@
package com.intellij.internal.statistic.collectors.fus.actions.persistence;
import com.intellij.ide.actions.ActionsCollector;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.plugins.PluginManagerMain;
import com.intellij.internal.statistic.beans.ConvertUsagesUtil;
import com.intellij.internal.statistic.eventLog.FeatureUsageLogger;
import com.intellij.internal.statistic.persistence.UsageStatisticsPersistenceComponent;
......@@ -9,9 +13,13 @@ import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.RoamingType;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.extensions.PluginId;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
/**
* @author Konstantin Bulenkov
*/
......@@ -23,19 +31,32 @@ import org.jetbrains.annotations.Nullable;
}
)
public class ActionsCollectorImpl extends ActionsCollector implements PersistentStateComponent<ActionsCollector.State> {
public void record(String actionId) {
private static final String DEFAULT_ID = "third.party.plugin.action";
private final Set<String> myJBActions = new THashSet<>();
public void record(@Nullable String actionId, @NotNull Class context) {
if (actionId == null) return;
State state = getState();
if (state == null) return;
String key = ConvertUsagesUtil.escapeDescriptorName(actionId);
if (!myJBActions.contains(key)) {
key = isDevelopedByJetBrains(context) ? key : DEFAULT_ID;
myJBActions.add(key);
}
FeatureUsageLogger.INSTANCE.log("actions", key);
final Integer count = state.myValues.get(key);
int value = count == null ? 1 : count + 1;
state.myValues.put(key, value);
}
private static boolean isDevelopedByJetBrains(@NotNull Class aClass) {
final PluginId pluginId = PluginManagerCore.getPluginByClassName(aClass.getName());
final IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
return plugin == null || plugin.isBundled() || PluginManagerMain.isDevelopedByJetBrains(plugin);
}
private State myState = new State();
@Nullable
......
......@@ -1202,7 +1202,7 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab
}
//noinspection AssignmentToStaticFieldFromInstanceMethod
IdeaLogger.ourLastActionId = myLastPreformedActionId;
ActionsCollectorImpl.getInstance().record(myLastPreformedActionId);
ActionsCollectorImpl.getInstance().record(myLastPreformedActionId, action.getClass());
}
for (AnActionListener listener : myActionListeners) {
listener.beforeActionPerformed(action, dataContext, event);
......
......@@ -703,7 +703,10 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge
} else {
suspender.suspendProcess(null);
}
ActionsCollector.getInstance().record(suspender.isSuspended() ? "Progress Paused" : "Progress Resumed");
ActionsCollector.getInstance().record(
suspender.isSuspended() ? "Progress Paused" : "Progress Resumed",
MyInlineProgressIndicator.class
);
}).setFillBg(false);
suspendButton.setVisible(false);
......
......@@ -45,7 +45,7 @@ fun createMergeActions(project: Project?, urlTextField: TextFieldWithBrowseButto
}
override fun actionPerformed(event: ActionEvent) {
ActionsCollector.getInstance().record("Ics.${getValue(Action.NAME)}")
ActionsCollector.getInstance().record("Ics.${getValue(Action.NAME)}", icsManager::class.java)
val repositoryWillBeCreated = !icsManager.repositoryManager.isRepositoryExists()
var upstreamSet = false
try {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment