diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionEditUsageTriggerCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionEditUsageTriggerCollector.java new file mode 100644 index 000000000000..f4893c0fa7eb --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionEditUsageTriggerCollector.java @@ -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"; + } +} diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionOpenUsageTriggerCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionOpenUsageTriggerCollector.java new file mode 100644 index 000000000000..1584202dfb73 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionOpenUsageTriggerCollector.java @@ -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"; + } +} diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionUsagesCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionUsagesCollector.java new file mode 100644 index 000000000000..1dd4f08a2839 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionUsagesCollector.java @@ -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 getUsages(@NotNull Project project) { + final Set 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)extension -> new UsageDescriptor(extension, 1)); + } + + @NotNull + @Override + public String getGroupId() { + return "statistics.file.extensions"; + } +} diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionUsagesCollectorComponent.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionUsagesCollectorComponent.java new file mode 100644 index 000000000000..49665c925580 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileExtensionUsagesCollectorComponent.java @@ -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); + } +} diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeEditUsageTriggerCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeEditUsageTriggerCollector.java new file mode 100644 index 000000000000..8793e41d6f30 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeEditUsageTriggerCollector.java @@ -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"; + } +} diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeOpenUsageTriggerCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeOpenUsageTriggerCollector.java new file mode 100644 index 000000000000..e0b08801672a --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeOpenUsageTriggerCollector.java @@ -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"; + } +} diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 96046aec0f9b..f0620b731c64 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -916,6 +916,9 @@ + + + diff --git a/platform/platform-resources/src/componentSets/Lang.xml b/platform/platform-resources/src/componentSets/Lang.xml index 964d0348fff7..6b2415e5a6c2 100644 --- a/platform/platform-resources/src/componentSets/Lang.xml +++ b/platform/platform-resources/src/componentSets/Lang.xml @@ -220,6 +220,9 @@ com.intellij.ide.GeneratedSourceFileChangeTrackerImpl + + com.intellij.internal.statistic.collectors.fus.fileTypes.FileExtensionUsagesCollectorComponent +