diff --git a/java/java-tests/testSrc/com/intellij/java/psi/codeStyle/JavaCodeStyleSettingsTest.java b/java/java-tests/testSrc/com/intellij/java/psi/codeStyle/JavaCodeStyleSettingsTest.java index 262cefde7383..f77159d4a268 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/codeStyle/JavaCodeStyleSettingsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/psi/codeStyle/JavaCodeStyleSettingsTest.java @@ -15,6 +15,7 @@ */ package com.intellij.java.psi.codeStyle; +import com.intellij.application.options.CodeStyle; import com.intellij.application.options.codeStyle.properties.AbstractCodeStylePropertyMapper; import com.intellij.application.options.codeStyle.properties.CodeStylePropertyAccessor; import com.intellij.ide.codeStyleSettings.CodeStyleTestCase; @@ -58,8 +59,11 @@ public class JavaCodeStyleSettingsTest extends CodeStyleTestCase { } public void testSettingsCloneNotReferencingOriginal() throws IllegalAccessException { - JavaCodeStyleSettings original = JavaCodeStyleSettings.getInstance(getProject()); - JavaCodeStyleSettings copy = (JavaCodeStyleSettings)original.clone(); + CodeStyleSettings originalRoot = CodeStyle.getSettings(getProject()); + JavaCodeStyleSettings original = originalRoot.getCustomSettings(JavaCodeStyleSettings.class); + CodeStyleSettings clonedRoot = originalRoot.clone(); + JavaCodeStyleSettings copy = clonedRoot.getCustomSettings(JavaCodeStyleSettings.class); + assertSame(clonedRoot, copy.getContainer()); for (Field field : copy.getClass().getDeclaredFields()) { if (!isPrimitiveOrString(field.getType()) && (field.getModifiers() & Modifier.PUBLIC) != 0) { assertNotSame("Fields '" + field.getName() + "' reference the same value", field.get(original), field.get(copy)); diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java index 3e8df6f25e68..c10099ef4e86 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java @@ -170,9 +170,7 @@ public class CodeStyleSettings extends LegacyCodeStyleSettings implements Clonea myCustomSettings.clear(); for (final CustomCodeStyleSettings settings : from.getCustomSettingsValues()) { - CustomCodeStyleSettings clone = (CustomCodeStyleSettings)settings.clone(); - clone.setContainer(this); - addCustomSettings(clone); + addCustomSettings(settings.copyWith(this)); } FIELD_TYPE_TO_NAME.copyFrom(from.FIELD_TYPE_TO_NAME); diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CustomCodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CustomCodeStyleSettings.java index 4934d64d2f13..87402cc72757 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CustomCodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CustomCodeStyleSettings.java @@ -43,10 +43,6 @@ public abstract class CustomCodeStyleSettings implements Cloneable { return myContainer; } - void setContainer(CodeStyleSettings container) { - myContainer = container; - } - @NonNls @NotNull public final String getTagName() { return myTagName; @@ -75,6 +71,12 @@ public abstract class CustomCodeStyleSettings implements Cloneable { } } + CustomCodeStyleSettings copyWith(@NotNull CodeStyleSettings container) { + CustomCodeStyleSettings cloned = (CustomCodeStyleSettings)clone(); + cloned.myContainer = container; + return cloned; + } + @Override public Object clone() { try {