diff --git a/plugins/editorconfig/src/org/editorconfig/configmanagement/EditorConfigIndentOptionsProvider.java b/plugins/editorconfig/src/org/editorconfig/configmanagement/EditorConfigIndentOptionsProvider.java index 14aa66dab2db..cd4dc3af805a 100644 --- a/plugins/editorconfig/src/org/editorconfig/configmanagement/EditorConfigIndentOptionsProvider.java +++ b/plugins/editorconfig/src/org/editorconfig/configmanagement/EditorConfigIndentOptionsProvider.java @@ -65,7 +65,7 @@ public class EditorConfigIndentOptionsProvider extends FileIndentOptionsProvider String indentSize, String continuationIndentSize, String tabWidth, String indentStyle, String filePath) { boolean changed = false; - final String calculatedIndentSize = calculateIndentSize(tabWidth, indentSize); + final String calculatedIndentSize = calculateIndentSize(tabWidth, indentSize, indentOptions); final String calculatedContinuationSize = calculateContinuationIndentSize(calculatedIndentSize, continuationIndentSize); final String calculatedTabWidth = calculateTabWidth(tabWidth, indentSize); if (!calculatedIndentSize.isEmpty()) { @@ -102,8 +102,8 @@ public class EditorConfigIndentOptionsProvider extends FileIndentOptionsProvider return changed; } - private static String calculateIndentSize(final String tabWidth, final String indentSize) { - return indentSize.equals("tab") ? tabWidth : indentSize; + private static String calculateIndentSize(final String tabWidth, final String indentSize, @NotNull final IndentOptions options) { + return indentSize.equals("tab") ? (tabWidth.isEmpty() ? String.valueOf(options.TAB_SIZE) : tabWidth) : indentSize; } private static String calculateContinuationIndentSize(final String indentSize, final String continuationIndentSize) { diff --git a/plugins/editorconfig/test/org/editorconfig/configmanagement/EditorConfigStandardSettingsTest.java b/plugins/editorconfig/test/org/editorconfig/configmanagement/EditorConfigStandardSettingsTest.java new file mode 100644 index 000000000000..5db4971beddc --- /dev/null +++ b/plugins/editorconfig/test/org/editorconfig/configmanagement/EditorConfigStandardSettingsTest.java @@ -0,0 +1,49 @@ +// Copyright 2000-2019 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.editorconfig.configmanagement; + +import com.intellij.application.options.CodeStyle; +import com.intellij.lang.java.JavaLanguage; +import com.intellij.psi.PsiFile; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; +import org.editorconfig.Utils; + +public class EditorConfigStandardSettingsTest extends EditorConfigFileSettingsTestCase { + @Override + protected void setUp() throws Exception { + super.setUp(); + Utils.setFullIntellijSettingsSupportEnabledInTest(false); + } + + public void testIndentSizeTab() { + final CommonCodeStyleSettings.IndentOptions projectIndentOptions = + CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE).getIndentOptions(); + projectIndentOptions.TAB_SIZE = 4; + projectIndentOptions.INDENT_SIZE = 2; + PsiFile javaFile = findPsiFile("source.java"); + final CommonCodeStyleSettings.IndentOptions indentOptions = CodeStyle.getIndentOptions(javaFile); + assertTrue(indentOptions.USE_TAB_CHARACTER); + assertEquals("Indent size doesn't match tab size", indentOptions.TAB_SIZE, indentOptions.INDENT_SIZE); + } + + public void testIndentStyleTab() { + final CommonCodeStyleSettings.IndentOptions projectIndentOptions = + CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE).getIndentOptions(); + projectIndentOptions.TAB_SIZE = 4; + projectIndentOptions.INDENT_SIZE = 2; + PsiFile javaFile = findPsiFile("source.java"); + final CommonCodeStyleSettings.IndentOptions indentOptions = CodeStyle.getIndentOptions(javaFile); + assertEquals("Indent size doesn't match tab size", indentOptions.TAB_SIZE, indentOptions.INDENT_SIZE); + } + + public void testIndentSizeTabWidth() { + PsiFile javaFile = findPsiFile("source.java"); + final CommonCodeStyleSettings.IndentOptions indentOptions = CodeStyle.getIndentOptions(javaFile); + assertEquals(3, indentOptions.TAB_SIZE); + assertEquals(3, indentOptions.INDENT_SIZE); + } + + @Override + protected String getRelativePath() { + return "/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings"; + } +} diff --git a/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTab/.editorconfig b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTab/.editorconfig new file mode 100644 index 000000000000..a06f16b3a1df --- /dev/null +++ b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTab/.editorconfig @@ -0,0 +1,6 @@ +root = true + +[*] + +indent_style = tab +indent_size = tab \ No newline at end of file diff --git a/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTab/source.java b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTab/source.java new file mode 100644 index 000000000000..576000ea446f --- /dev/null +++ b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTab/source.java @@ -0,0 +1,3 @@ +class Foo { + +} \ No newline at end of file diff --git a/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTabWidth/.editorconfig b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTabWidth/.editorconfig new file mode 100644 index 000000000000..b5768031818a --- /dev/null +++ b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTabWidth/.editorconfig @@ -0,0 +1,6 @@ +root = true + +[*] + +indent_size = tab +tab_width = 3 \ No newline at end of file diff --git a/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTabWidth/source.java b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTabWidth/source.java new file mode 100644 index 000000000000..576000ea446f --- /dev/null +++ b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentSizeTabWidth/source.java @@ -0,0 +1,3 @@ +class Foo { + +} \ No newline at end of file diff --git a/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentStyleTab/.editorconfig b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentStyleTab/.editorconfig new file mode 100644 index 000000000000..f9b49490f6c0 --- /dev/null +++ b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentStyleTab/.editorconfig @@ -0,0 +1,5 @@ +root = true + +[*] + +indent_style = tab \ No newline at end of file diff --git a/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentStyleTab/source.java b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentStyleTab/source.java new file mode 100644 index 000000000000..576000ea446f --- /dev/null +++ b/plugins/editorconfig/testData/org/editorconfig/configmanagement/fileSettings/indentStyleTab/source.java @@ -0,0 +1,3 @@ +class Foo { + +} \ No newline at end of file