| ### Eclipse Workspace Patch 1.0 |
| #P org.eclipse.jdt.ui |
| diff --git ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java |
| index bbcb3bb..949bf62 100644 |
| --- ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java |
| +++ ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java |
| @@ -19,8 +19,6 @@ |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Group; |
| |
| -import org.eclipse.core.runtime.Assert; |
| - |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; |
| |
| @@ -60,7 +58,6 @@ |
| "}";//$NON-NLS-1$ |
| |
| private CompilationUnitPreview fPreview; |
| - private String fOldTabChar= null; |
| |
| public IndentationTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) { |
| super(modifyDialog, workingValues); |
| @@ -79,21 +76,17 @@ |
| }; |
| final ComboPreference tabPolicy= createComboPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_general_group_option_tab_policy, DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, tabPolicyValues, tabPolicyLabels); |
| final CheckboxPreference onlyForLeading= createCheckboxPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_use_tabs_only_for_leading_indentations, DefaultCodeFormatterConstants.FORMATTER_USE_TABS_ONLY_FOR_LEADING_INDENTATIONS, FALSE_TRUE); |
| - final NumberPreference indentSize= createNumberPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_general_group_option_indent_size, DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, 0, 32); |
| + final NumberPreference indentSize= createNumberPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_general_group_option_indent_size, DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE, 0, 32); |
| final NumberPreference tabSize= createNumberPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_general_group_option_tab_size, DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, 0, 32); |
| |
| - String tabchar= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR); |
| - updateTabPreferences(tabchar, tabSize, indentSize, onlyForLeading); |
| - tabPolicy.addObserver(new Observer() { |
| + updateTabPreferences(indentSize, onlyForLeading); |
| + Observer tabObserver = new Observer() { |
| public void update(Observable o, Object arg) { |
| - updateTabPreferences((String) arg, tabSize, indentSize, onlyForLeading); |
| + updateTabPreferences(indentSize, onlyForLeading); |
| } |
| - }); |
| - tabSize.addObserver(new Observer() { |
| - public void update(Observable o, Object arg) { |
| - indentSize.updateWidget(); |
| - } |
| - }); |
| + }; |
| + tabPolicy.addObserver(tabObserver); |
| + tabSize.addObserver(tabObserver); |
| |
| final Group typeMemberGroup= createGroup(numColumns, composite, FormatterMessages.IndentationTabPage_field_alignment_group_title); |
| createCheckboxPref(typeMemberGroup, numColumns, FormatterMessages.IndentationTabPage_field_alignment_group_align_fields_in_columns, DefaultCodeFormatterConstants.FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS, FALSE_TRUE); |
| @@ -141,50 +134,17 @@ |
| fPreview.update(); |
| } |
| |
| - private void updateTabPreferences(String tabPolicy, NumberPreference tabPreference, NumberPreference indentPreference, CheckboxPreference onlyForLeading) { |
| - /* |
| - * If the tab-char is SPACE (or TAB), INDENTATION_SIZE |
| - * preference is not used by the core formatter. We piggy back the |
| - * visual tab length setting in that preference in that case. If the |
| - * user selects MIXED, we use the previous TAB_SIZE preference as the |
| - * new INDENTATION_SIZE (as this is what it really is) and set the |
| - * visual tab size to the value piggy backed in the INDENTATION_SIZE |
| - * preference. See also CodeFormatterUtil. |
| - */ |
| - if (DefaultCodeFormatterConstants.MIXED.equals(tabPolicy)) { |
| - if (JavaCore.SPACE.equals(fOldTabChar) || JavaCore.TAB.equals(fOldTabChar)) |
| - swapTabValues(); |
| - tabPreference.setEnabled(true); |
| - tabPreference.setKey(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE); |
| - indentPreference.setEnabled(true); |
| - indentPreference.setKey(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE); |
| - onlyForLeading.setEnabled(true); |
| - } else if (JavaCore.SPACE.equals(tabPolicy)) { |
| - if (DefaultCodeFormatterConstants.MIXED.equals(fOldTabChar)) |
| - swapTabValues(); |
| - tabPreference.setEnabled(true); |
| - tabPreference.setKey(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE); |
| - indentPreference.setEnabled(true); |
| - indentPreference.setKey(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE); |
| - onlyForLeading.setEnabled(false); |
| - } else if (JavaCore.TAB.equals(tabPolicy)) { |
| - if (DefaultCodeFormatterConstants.MIXED.equals(fOldTabChar)) |
| - swapTabValues(); |
| - tabPreference.setEnabled(true); |
| - tabPreference.setKey(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE); |
| - indentPreference.setEnabled(false); |
| - indentPreference.setKey(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE); |
| - onlyForLeading.setEnabled(true); |
| - } else { |
| - Assert.isTrue(false); |
| - } |
| - fOldTabChar= tabPolicy; |
| - } |
| + private void updateTabPreferences(NumberPreference indentPreference, CheckboxPreference onlyForLeading) { |
| + String tabPolicy = fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR); |
| + onlyForLeading.setEnabled(!JavaCore.SPACE.equals(tabPolicy)); |
| |
| - private void swapTabValues() { |
| - String tabSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE); |
| - String indentSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE); |
| - fWorkingValues.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, indentSize); |
| - fWorkingValues.put(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE, tabSize); |
| + if (JavaCore.TAB.equals(tabPolicy)) { |
| + // indentation size preference must be disabled and show the same value as tab size |
| + String tabSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE); |
| + fWorkingValues.put(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE, tabSize); |
| + indentPreference.setEnabled(false); |
| + } else { |
| + indentPreference.setEnabled(true); |
| + } |
| } |
| } |