From 7d8db3ac399b106011be01f9aa3267520a33e8df Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Mon, 4 Jun 2018 17:48:06 +0300 Subject: [PATCH] Autogenerate indent options' accessors --- .../application/options/CodeStyleBean.java | 32 ------------------- .../bean/CodeStyleBeanAccessorGenerator.java | 16 +++++++--- .../bean/CodeStyleBeanGenerator.java | 21 ++++++++++++ 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/platform/lang-api/src/com/intellij/application/options/CodeStyleBean.java b/platform/lang-api/src/com/intellij/application/options/CodeStyleBean.java index 1e406305c216..51421dd2937e 100644 --- a/platform/lang-api/src/com/intellij/application/options/CodeStyleBean.java +++ b/platform/lang-api/src/com/intellij/application/options/CodeStyleBean.java @@ -43,38 +43,6 @@ public abstract class CodeStyleBean implements Serializable { myRootSettings.setRightMargin(getLanguage(), rightMargin); } - public int getIndentSize() { - return getIndentOptions(false).INDENT_SIZE; - } - - public void setIndentSize(int indentSize) { - getIndentOptions(true).INDENT_SIZE = indentSize; - } - - public int getTabSize() { - return getIndentOptions(false).TAB_SIZE; - } - - public void setTabSize(int tabSize) { - getIndentOptions(true).TAB_SIZE = tabSize; - } - - public boolean isUseSmartTabs() { - return getIndentOptions(false).SMART_TABS; - } - - public void setUseSmartTabs(boolean useSmartTabs) { - getIndentOptions(true).SMART_TABS = useSmartTabs; - } - - public boolean isUseTabCharacter() { - return getIndentOptions(false).USE_TAB_CHARACTER; - } - - public void setUseTabCharacter(boolean useTabCharacter) { - getIndentOptions(true).USE_TAB_CHARACTER = useTabCharacter; - } - @NotNull public CommonCodeStyleSettings.WrapOnTyping getWrapOnTyping() { for (CommonCodeStyleSettings.WrapOnTyping c : CommonCodeStyleSettings.WrapOnTyping.values()) { diff --git a/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanAccessorGenerator.java b/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanAccessorGenerator.java index 5822f4087dee..ad5fc4082134 100644 --- a/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanAccessorGenerator.java +++ b/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanAccessorGenerator.java @@ -48,6 +48,9 @@ public class CodeStyleBeanAccessorGenerator { addMapping("LBRACE", "LeftBrace"); addMapping("INSTANCEOF", "InstanceOf"); addMapping("DOWHILE", "DoWhile"); + addMapping("INDENT_SIZE", "Indent"); + addMapping("CONTINUATION_INDENT_SIZE", "ContinuationIndent"); + addMapping("PARM", "Param"); } public CodeStyleBeanAccessorGenerator(@NotNull Field field) { @@ -156,10 +159,13 @@ public class CodeStyleBeanAccessorGenerator { myField.getAnnotation(Deprecated.class) == null; } - String getContainerClassAccessor() { + String getContainerClassAccessor(boolean isWriteAccess) { if (myContainerClass == CommonCodeStyleSettings.class) { return "getCommonSettings()"; } + else if (myContainerClass == CommonCodeStyleSettings.IndentOptions.class) { + return "getIndentOptions(" + isWriteAccess + ")"; + } myImports.add(myContainerClass.getName()); return "getCustomSettings(" + myContainerClass.getSimpleName() + ".class)"; } @@ -177,21 +183,21 @@ public class CodeStyleBeanAccessorGenerator { if (valueType == ValueType.WRAP) { output .append("return intToWrapType(") - .append(getContainerClassAccessor()) + .append(getContainerClassAccessor(false)) .append(".").append(myFieldName) .append(");\n"); } else if (valueType == ValueType.BRACE_STYLE || valueType == ValueType.FORCE_BRACES) { output .append("return ").append(typeString).append(".fromInt(") - .append(getContainerClassAccessor()) + .append(getContainerClassAccessor(false)) .append(".").append(myFieldName) .append(");\n"); } else { output .append("return ") - .append((getContainerClassAccessor())) + .append((getContainerClassAccessor(false))) .append(".").append(myFieldName).append(";\n"); } output @@ -214,7 +220,7 @@ public class CodeStyleBeanAccessorGenerator { .append(typeString).append(" value") .append("){"); output - .append(getContainerClassAccessor()) + .append(getContainerClassAccessor(true)) .append(".").append(myFieldName).append("= "); final ValueType valueType = getValueType(); if (valueType == ValueType.WRAP) { diff --git a/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanGenerator.java b/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanGenerator.java index a6e05807d50e..8cd93bc88ef3 100644 --- a/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanGenerator.java +++ b/plugins/devkit/devkit-core/src/codeStyle/bean/CodeStyleBeanGenerator.java @@ -1,6 +1,8 @@ // 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 org.jetbrains.idea.devkit.codeStyle.bean; +import com.intellij.application.options.IndentOptionsEditor; +import com.intellij.application.options.SmartIndentOptionsEditor; import com.intellij.lang.Language; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.util.Ref; @@ -35,9 +37,28 @@ public class CodeStyleBeanGenerator { for (CustomCodeStyleSettings customSettings : getCustomSettings()) { generateMethodsFor(customSettings.getClass(), sb, null); } + generateMethodsFor(CommonCodeStyleSettings.IndentOptions.class, sb, getSupportedIndentOptions()); return sb.toString(); } + private Set getSupportedIndentOptions() { + LanguageCodeStyleSettingsProvider provider = LanguageCodeStyleSettingsProvider.forLanguage(myLanguage); + if (provider == null) return Collections.emptySet(); + Set indentOptions = ContainerUtil.newHashSet(); + IndentOptionsEditor editor = provider.getIndentOptionsEditor(); + if (editor != null) { + indentOptions.add("TAB_SIZE"); + indentOptions.add("USE_TAB_CHARACTER"); + indentOptions.add("INDENT_SIZE"); + if (editor instanceof SmartIndentOptionsEditor) { + indentOptions.add("CONTINUATION_INDENT_SIZE"); + indentOptions.add("SMART_TABS"); + indentOptions.add("KEEP_INDENTS_ON_EMPTY_LINES"); + } + } + return indentOptions; + } + private Set getSupportedFields() { LanguageCodeStyleSettingsProvider provider = LanguageCodeStyleSettingsProvider.forLanguage(myLanguage); return provider == null ? Collections.emptySet() : provider.getSupportedFields();