From 237ff5384664da0aa54df2cad95e86138037d30c Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 13 Feb 2018 13:09:12 +0300 Subject: [PATCH] migrate EditorSettingsStatisticsCollector to new statistics service --- .../EditorSettingsStatisticsCollector.java | 22 ++- ...gacyEditorSettingsStatisticsCollector.java | 156 ++++++++++++++++++ .../src/META-INF/LangExtensions.xml | 6 +- 3 files changed, 170 insertions(+), 14 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/internal/statistic/editor/LegacyEditorSettingsStatisticsCollector.java diff --git a/platform/lang-impl/src/com/intellij/internal/statistic/editor/EditorSettingsStatisticsCollector.java b/platform/lang-impl/src/com/intellij/internal/statistic/editor/EditorSettingsStatisticsCollector.java index 4f6b33e788a8..ca4753754e02 100644 --- a/platform/lang-impl/src/com/intellij/internal/statistic/editor/EditorSettingsStatisticsCollector.java +++ b/platform/lang-impl/src/com/intellij/internal/statistic/editor/EditorSettingsStatisticsCollector.java @@ -3,11 +3,9 @@ package com.intellij.internal.statistic.editor; import com.intellij.codeInsight.CodeInsightSettings; import com.intellij.codeInsight.CodeInsightWorkspaceSettings; -import com.intellij.internal.statistic.AbstractProjectsUsagesCollector; -import com.intellij.internal.statistic.CollectUsagesException; -import com.intellij.internal.statistic.UsagesCollector; -import com.intellij.internal.statistic.beans.GroupDescriptor; import com.intellij.internal.statistic.beans.UsageDescriptor; +import com.intellij.internal.statistic.service.fus.collectors.ApplicationUsagesCollector; +import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector; import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; import com.intellij.openapi.editor.richcopy.settings.RichCopySettings; @@ -21,13 +19,13 @@ import java.util.HashSet; import java.util.Set; import java.util.function.Function; -class EditorSettingsStatisticsCollector extends UsagesCollector { - private static final GroupDescriptor GROUP_DESCRIPTOR = GroupDescriptor.create("Editor"); +class EditorSettingsStatisticsCollector extends ApplicationUsagesCollector { + private static final String GROUP_ID = "statistics.editor.settings"; @NotNull @Override - public GroupDescriptor getGroupId() { - return GROUP_DESCRIPTOR; + public String getGroupId() { + return GROUP_ID; } @NotNull @@ -132,16 +130,16 @@ class EditorSettingsStatisticsCollector extends UsagesCollector { } } - public static class ProjectUsages extends AbstractProjectsUsagesCollector { + public static class ProjectUsages extends ProjectUsagesCollector { @NotNull @Override - public GroupDescriptor getGroupId() { - return GROUP_DESCRIPTOR; + public String getGroupId() { + return GROUP_ID; } @NotNull @Override - public Set getProjectUsages(@NotNull Project project) throws CollectUsagesException { + public Set getUsages(@NotNull Project project) { Set set = new HashSet<>(); CodeInsightWorkspaceSettings ciws = CodeInsightWorkspaceSettings.getInstance(project); CodeInsightWorkspaceSettings ciwsDefault = new CodeInsightWorkspaceSettings(); diff --git a/platform/lang-impl/src/com/intellij/internal/statistic/editor/LegacyEditorSettingsStatisticsCollector.java b/platform/lang-impl/src/com/intellij/internal/statistic/editor/LegacyEditorSettingsStatisticsCollector.java new file mode 100644 index 000000000000..6dcd974dc87a --- /dev/null +++ b/platform/lang-impl/src/com/intellij/internal/statistic/editor/LegacyEditorSettingsStatisticsCollector.java @@ -0,0 +1,156 @@ +// 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.editor; + +import com.intellij.codeInsight.CodeInsightSettings; +import com.intellij.codeInsight.CodeInsightWorkspaceSettings; +import com.intellij.internal.statistic.AbstractProjectsUsagesCollector; +import com.intellij.internal.statistic.CollectUsagesException; +import com.intellij.internal.statistic.UsagesCollector; +import com.intellij.internal.statistic.beans.GroupDescriptor; +import com.intellij.internal.statistic.beans.UsageDescriptor; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; +import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; +import com.intellij.openapi.editor.richcopy.settings.RichCopySettings; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.BooleanFunction; +import org.jetbrains.annotations.NotNull; + +import java.util.HashSet; +import java.util.Set; +import java.util.function.Function; + +/** + * @deprecated To be removed in 2018.3 (replaced by EditorSettingsStatisticsCollector) + */ +class LegacyEditorSettingsStatisticsCollector extends UsagesCollector { + private static final GroupDescriptor GROUP_DESCRIPTOR = GroupDescriptor.create("Editor"); + + @NotNull + @Override + public GroupDescriptor getGroupId() { + return GROUP_DESCRIPTOR; + } + + @NotNull + @Override + public Set getUsages() { + Set set = new HashSet<>(); + + EditorSettingsExternalizable es = EditorSettingsExternalizable.getInstance(); + EditorSettingsExternalizable esDefault = new EditorSettingsExternalizable(); + addBoolIfDiffers(set, es, esDefault, s -> s.isVirtualSpace(), "caretAfterLineEnd"); + addBoolIfDiffers(set, es, esDefault, s -> s.isCaretInsideTabs(), "caretInsideTabs"); + addBoolIfDiffers(set, es, esDefault, s -> s.isAdditionalPageAtBottom(), "virtualSpaceAtFileBottom"); + addBoolIfDiffers(set, es, esDefault, s -> s.isUseSoftWraps(SoftWrapAppliancePlaces.MAIN_EDITOR), "softWraps"); + addBoolIfDiffers(set, es, esDefault, s -> s.isUseSoftWraps(SoftWrapAppliancePlaces.CONSOLE), "softWraps.console"); + addBoolIfDiffers(set, es, esDefault, s -> s.isUseSoftWraps(SoftWrapAppliancePlaces.PREVIEW), "softWraps.preview"); + addBoolIfDiffers(set, es, esDefault, s -> s.isUseCustomSoftWrapIndent(), "softWraps.relativeIndent"); + addBoolIfDiffers(set, es, esDefault, s -> s.isAllSoftWrapsShown(), "softWraps.showAll"); + addIfDiffers(set, es, esDefault, s -> s.getStripTrailingSpaces(), "stripTrailingSpaces"); + addBoolIfDiffers(set, es, esDefault, s -> s.isEnsureNewLineAtEOF(), "ensureNewlineAtEOF"); + addBoolIfDiffers(set, es, esDefault, s -> s.isShowQuickDocOnMouseOverElement(), "quickDocOnMouseHover"); + addBoolIfDiffers(set, es, esDefault, s -> s.isBlinkCaret(), "blinkingCaret"); + addBoolIfDiffers(set, es, esDefault, s -> s.isBlockCursor(), "blockCaret"); + addBoolIfDiffers(set, es, esDefault, s -> s.isRightMarginShown(), "rightMargin"); + addBoolIfDiffers(set, es, esDefault, s -> s.isLineNumbersShown(), "lineNumbers"); + addBoolIfDiffers(set, es, esDefault, s -> s.areGutterIconsShown(), "gutterIcons"); + addBoolIfDiffers(set, es, esDefault, s -> s.isFoldingOutlineShown(), "foldingOutline"); + addBoolIfDiffers(set, es, esDefault, s -> s.isWhitespacesShown() && s.isLeadingWhitespacesShown(), "showLeadingWhitespace"); + addBoolIfDiffers(set, es, esDefault, s -> s.isWhitespacesShown() && s.isInnerWhitespacesShown(), "showInnerWhitespace"); + addBoolIfDiffers(set, es, esDefault, s -> s.isWhitespacesShown() && s.isTrailingWhitespacesShown(), "showTrailingWhitespace"); + addBoolIfDiffers(set, es, esDefault, s -> s.isIndentGuidesShown(), "indentGuides"); + addBoolIfDiffers(set, es, esDefault, s -> s.isSmoothScrolling(), "animatedScroll"); + addBoolIfDiffers(set, es, esDefault, s -> s.isDndEnabled(), "dragNDrop"); + addBoolIfDiffers(set, es, esDefault, s -> s.isWheelFontChangeEnabled(), "wheelZoom"); + addBoolIfDiffers(set, es, esDefault, s -> s.isMouseClickSelectionHonorsCamelWords(), "mouseCamel"); + addBoolIfDiffers(set, es, esDefault, s -> s.isVariableInplaceRenameEnabled(), "inplaceRename"); + addBoolIfDiffers(set, es, esDefault, s -> s.isPreselectRename(), "preselectOnRename"); + addBoolIfDiffers(set, es, esDefault, s -> s.isShowInlineLocalDialog(), "inlineDialog"); + addBoolIfDiffers(set, es, esDefault, s -> s.isRefrainFromScrolling(), "minimizeScrolling"); + addBoolIfDiffers(set, es, esDefault, s -> s.getOptions().SHOW_NOTIFICATION_AFTER_REFORMAT_CODE_ACTION, "afterReformatNotification"); + addBoolIfDiffers(set, es, esDefault, s -> s.getOptions().SHOW_NOTIFICATION_AFTER_OPTIMIZE_IMPORTS_ACTION, "afterOptimizeNotification"); + addBoolIfDiffers(set, es, esDefault, s -> s.isSmartHome(), "smartHome"); + addBoolIfDiffers(set, es, esDefault, s -> s.isCamelWords(), "camelWords"); + addBoolIfDiffers(set, es, esDefault, s -> s.isShowParameterNameHints(), "editor.inlay.parameter.hints"); + addBoolIfDiffers(set, es, esDefault, s -> s.isBreadcrumbsAbove(), "noBreadcrumbsBelow"); + addBoolIfDiffers(set, es, esDefault, s -> s.isBreadcrumbsShown(), "breadcrumbs"); + for (String language : es.getOptions().getLanguageBreadcrumbsMap().keySet()) { + addBoolIfDiffers(set, es, esDefault, s -> s.isBreadcrumbsShownFor(language), "breadcrumbsFor" + language); + } + + RichCopySettings rcs = RichCopySettings.getInstance(); + RichCopySettings rcsDefault = new RichCopySettings(); + addBoolIfDiffers(set, rcs, rcsDefault, s -> s.isEnabled(), "richCopy"); + + CodeInsightSettings cis = CodeInsightSettings.getInstance(); + CodeInsightSettings cisDefault = new CodeInsightSettings(); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTO_POPUP_PARAMETER_INFO, "parameterAutoPopup"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTO_POPUP_JAVADOC_INFO, "javadocAutoPopup"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTO_POPUP_COMPLETION_LOOKUP, "completionAutoPopup"); + addIfDiffers(set, cis, cisDefault, s -> s.COMPLETION_CASE_SENSITIVE, "completionCaseSensitivity"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SELECT_AUTOPOPUP_SUGGESTIONS_BY_CHARS, "autoPopupCharComplete"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTOCOMPLETE_ON_CODE_COMPLETION, "autoCompleteBasic"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION, "autoCompleteSmart"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SHOW_FULL_SIGNATURES_IN_PARAMETER_INFO, "parameterInfoFullSignature"); + addIfDiffers(set, cis, cisDefault, s -> s.getBackspaceMode(), "smartBackspace"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SMART_INDENT_ON_ENTER, "indentOnEnter"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.INSERT_BRACE_ON_ENTER, "braceOnEnter"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.JAVADOC_STUB_ON_ENTER, "javadocOnEnter"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SMART_END_ACTION, "smartEnd"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.JAVADOC_GENERATE_CLOSING_TAG, "autoCloseJavadocTags"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SURROUND_SELECTION_ON_QUOTE_TYPED, "surroundByQuoteOrBrace"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTOINSERT_PAIR_BRACKET, "pairBracketAutoInsert"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.AUTOINSERT_PAIR_QUOTE, "pairQuoteAutoInsert"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.REFORMAT_BLOCK_ON_RBRACE, "reformatOnRBrace"); + addIfDiffers(set, cis, cisDefault, s -> s.REFORMAT_ON_PASTE, "reformatOnPaste"); + addIfDiffers(set, cis, cisDefault, s -> s.ADD_IMPORTS_ON_PASTE, "importsOnPaste"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.HIGHLIGHT_BRACES, "bracesHighlight"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.HIGHLIGHT_SCOPE, "scopeHighlight"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.HIGHLIGHT_IDENTIFIER_UNDER_CARET, "identifierUnderCaretHighlight"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY, "autoAddImports"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SHOW_PARAMETER_NAME_HINTS_ON_COMPLETION, "completionHints"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SHOW_EXTERNAL_ANNOTATIONS_INLINE, "externalAnnotationsInline"); + addBoolIfDiffers(set, cis, cisDefault, s -> s.SHOW_INFERRED_ANNOTATIONS_INLINE, "inferredAnnotationsInline"); + + return set; + } + + private static void addBoolIfDiffers(Set set, + T settingsBean, T defaultSettingsBean, BooleanFunction valueFunction, String featureId) { + boolean value = valueFunction.fun(settingsBean); + boolean defaultValue = valueFunction.fun(defaultSettingsBean); + if (value != defaultValue) { + set.add(new UsageDescriptor(defaultValue ? "no" + StringUtil.capitalize(featureId) : featureId, 1)); + } + } + + private static void addIfDiffers(Set set, + T settingsBean, T defaultSettingsBean, Function valueFunction, String featureIdPrefix) { + Object value = valueFunction.apply(settingsBean); + Object defaultValue = valueFunction.apply(defaultSettingsBean); + if (!Comparing.equal(value, defaultValue)) { + set.add(new UsageDescriptor(featureIdPrefix + "." + value, 1)); + } + } + + public static class ProjectUsages extends AbstractProjectsUsagesCollector { + @NotNull + @Override + public GroupDescriptor getGroupId() { + return GROUP_DESCRIPTOR; + } + + @NotNull + @Override + public Set getProjectUsages(@NotNull Project project) throws CollectUsagesException { + Set set = new HashSet<>(); + CodeInsightWorkspaceSettings ciws = CodeInsightWorkspaceSettings.getInstance(project); + CodeInsightWorkspaceSettings ciwsDefault = new CodeInsightWorkspaceSettings(); + addBoolIfDiffers(set, ciws, ciwsDefault, s -> s.optimizeImportsOnTheFly, "autoOptimizeImports"); + return set; + } + } + +} diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index f16f40ef40be..ea3809773af2 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -907,8 +907,10 @@ - - + + + +