FUS-94 File extension/type state/usage

This commit is contained in:
cheptsov
2018-05-30 13:20:58 +02:00
parent 426fbb0850
commit fa47bcb437
8 changed files with 165 additions and 0 deletions
@@ -0,0 +1,14 @@
// Copyright 2000-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 file.
package com.intellij.internal.statistic.collectors.fus.fileTypes;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsageTriggerCollector;
import org.jetbrains.annotations.NotNull;
public class FileExtensionEditUsageTriggerCollector extends ProjectUsageTriggerCollector {
@NotNull
@Override
public String getGroupId() {
return "statistics.file.extensions.edit";
}
}
@@ -0,0 +1,14 @@
// Copyright 2000-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 file.
package com.intellij.internal.statistic.collectors.fus.fileTypes;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsageTriggerCollector;
import org.jetbrains.annotations.NotNull;
public class FileExtensionOpenUsageTriggerCollector extends ProjectUsageTriggerCollector {
@NotNull
@Override
public String getGroupId() {
return "statistics.file.extensions.open";
}
}
@@ -0,0 +1,34 @@
// Copyright 2000-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 file.
package com.intellij.internal.statistic.collectors.fus.fileTypes;
import com.intellij.internal.statistic.beans.UsageDescriptor;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.util.NotNullFunction;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
public class FileExtensionUsagesCollector extends ProjectUsagesCollector {
@NotNull
@Override
public Set<UsageDescriptor> getUsages(@NotNull Project project) {
final Set<String> extensions = new HashSet<>();
ProjectFileIndex.getInstance(project).iterateContent(fileOrDir -> {
if (!fileOrDir.isDirectory()) {
extensions.add(fileOrDir.getExtension() != null ? fileOrDir.getExtension() : fileOrDir.getName());
}
return true;
});
return ContainerUtil.map2Set(extensions, (NotNullFunction<String, UsageDescriptor>)extension -> new UsageDescriptor(extension, 1));
}
@NotNull
@Override
public String getGroupId() {
return "statistics.file.extensions";
}
}
@@ -0,0 +1,69 @@
// Copyright 2000-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 file.
package com.intellij.internal.statistic.collectors.fus.fileTypes;
import com.intellij.internal.statistic.service.fus.collectors.FUSProjectUsageTrigger;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.AnActionListener;
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.actionSystem.EditorAction;
import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.messages.MessageBusConnection;
import org.jetbrains.annotations.NotNull;
public class FileExtensionUsagesCollectorComponent extends AbstractProjectComponent {
public FileExtensionUsagesCollectorComponent(Project project) {
super(project);
}
@Override
public void projectOpened() {
MessageBusConnection myConnection = myProject.getMessageBus().connect();
myConnection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerListener() {
@Override
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
FUSProjectUsageTrigger.getInstance(myProject).trigger(FileExtensionOpenUsageTriggerCollector.class, file.getExtension() != null ? file.getExtension() : file.getName());
FUSProjectUsageTrigger.getInstance(myProject).trigger(FileTypeOpenUsageTriggerCollector.class, file.getFileType().getName());
}
@Override
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
}
@Override
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
}
});
ActionManager.getInstance().addAnActionListener(new AnActionListener() {
@Override
public void beforeActionPerformed(AnAction action, DataContext dataContext, AnActionEvent event) {
if (action instanceof EditorAction && ((EditorAction)action).getHandler() instanceof EditorWriteActionHandler) {
onChange(dataContext);
}
}
private void onChange(DataContext dataContext) {
final Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
if (editor == null || editor.getProject() != myProject) return;
VirtualFile file = FileDocumentManager.getInstance().getFile(editor.getDocument());
if (file != null) {
FUSProjectUsageTrigger.getInstance(myProject).trigger(FileExtensionEditUsageTriggerCollector.class,
file.getExtension() != null ? file.getExtension() : file.getName());
FUSProjectUsageTrigger.getInstance(myProject).trigger(FileTypeEditUsageTriggerCollector.class, file.getFileType().getName());
}
}
@Override
public void beforeEditorTyping(char c, DataContext dataContext) {
onChange(dataContext);
}
}, myProject);
}
}
@@ -0,0 +1,14 @@
// Copyright 2000-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 file.
package com.intellij.internal.statistic.collectors.fus.fileTypes;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsageTriggerCollector;
import org.jetbrains.annotations.NotNull;
public class FileTypeEditUsageTriggerCollector extends ProjectUsageTriggerCollector {
@NotNull
@Override
public String getGroupId() {
return "statistics.file.types.edit";
}
}
@@ -0,0 +1,14 @@
// Copyright 2000-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 file.
package com.intellij.internal.statistic.collectors.fus.fileTypes;
import com.intellij.internal.statistic.service.fus.collectors.ProjectUsageTriggerCollector;
import org.jetbrains.annotations.NotNull;
public class FileTypeOpenUsageTriggerCollector extends ProjectUsageTriggerCollector {
@NotNull
@Override
public String getGroupId() {
return "statistics.file.types.open";
}
}
@@ -916,6 +916,9 @@
<statistics.usagesCollector implementation="com.intellij.internal.statistic.collectors.legacy.fileTypes.LegacyFileTypeUsagesCollector"/>
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsagesCollector"/>
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.collectors.fus.fileTypes.FileExtensionUsagesCollector"/>
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.collectors.fus.fileTypes.FileExtensionOpenUsageTriggerCollector"/>
<statistics.projectUsagesCollector implementation="com.intellij.internal.statistic.collectors.fus.fileTypes.FileExtensionEditUsageTriggerCollector"/>
<statistics.usagesCollector implementation="com.intellij.facet.impl.statistics.FrameworkUsagesCollector"/>
<statistics.usagesCollector implementation="com.intellij.facet.impl.statistics.ModuleTypeUsagesCollector"/>
@@ -220,6 +220,9 @@
<implementation-class>com.intellij.ide.GeneratedSourceFileChangeTrackerImpl</implementation-class>
</component>
<component>
<implementation-class>com.intellij.internal.statistic.collectors.fus.fileTypes.FileExtensionUsagesCollectorComponent</implementation-class>
</component>
</project-components>
<module-components>