mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Another fix for custom settings referencing original root when cloned + test
This commit is contained in:
+6
-2
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user