mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
DebuggerSettings — use PersistentStateComponent instead of deprecated JDOMExternalizable
This commit is contained in:
@@ -45,6 +45,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.ui.classFilter.ClassFilter;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.xdebugger.XSourcePosition;
|
||||
import com.intellij.xdebugger.impl.XSourcePositionImpl;
|
||||
import com.sun.jdi.*;
|
||||
@@ -199,7 +200,7 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
|
||||
|
||||
public static ClassFilter create(Element element) throws InvalidDataException {
|
||||
ClassFilter filter = new ClassFilter();
|
||||
filter.readExternal(element);
|
||||
DefaultJDOMExternalizer.readExternal(filter, element);
|
||||
return filter;
|
||||
}
|
||||
|
||||
@@ -245,24 +246,23 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
|
||||
return res;
|
||||
}
|
||||
|
||||
public static ClassFilter[] readFilters(List children) throws InvalidDataException {
|
||||
if (children == null || children.size() == 0) {
|
||||
public static ClassFilter[] readFilters(List<Element> children) throws InvalidDataException {
|
||||
if (ContainerUtil.isEmpty(children)) {
|
||||
return ClassFilter.EMPTY_ARRAY;
|
||||
}
|
||||
List<ClassFilter> classFiltersList = new ArrayList<ClassFilter>(children.size());
|
||||
for (Object aChildren : children) {
|
||||
final ClassFilter classFilter = new ClassFilter();
|
||||
classFilter.readExternal((Element)aChildren);
|
||||
classFiltersList.add(classFilter);
|
||||
|
||||
ClassFilter[] filters = new ClassFilter[children.size()];
|
||||
for (int i = 0, size = children.size(); i < size; i++) {
|
||||
filters[i] = create(children.get(i));
|
||||
}
|
||||
return classFiltersList.toArray(new ClassFilter[classFiltersList.size()]);
|
||||
return filters;
|
||||
}
|
||||
|
||||
public static void writeFilters(Element parentNode, @NonNls String tagName, ClassFilter[] filters) throws WriteExternalException {
|
||||
for (ClassFilter filter : filters) {
|
||||
Element element = new Element(tagName);
|
||||
parentNode.addContent(element);
|
||||
filter.writeExternal(element);
|
||||
DefaultJDOMExternalizer.writeExternal(filter, element);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,24 +16,31 @@
|
||||
package com.intellij.debugger.settings;
|
||||
|
||||
import com.intellij.debugger.impl.DebuggerUtilsEx;
|
||||
import com.intellij.openapi.components.NamedComponent;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.JDOMExternalizable;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.ui.classFilter.ClassFilter;
|
||||
import com.intellij.util.containers.hash.LinkedHashMap;
|
||||
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import com.intellij.util.xmlb.annotations.Transient;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Cloneable {
|
||||
@State(
|
||||
name = "DebuggerSettings",
|
||||
storages = {
|
||||
@Storage(
|
||||
file = StoragePathMacros.APP_CONFIG + "/other.xml"
|
||||
)}
|
||||
)
|
||||
public class DebuggerSettings implements Cloneable, PersistentStateComponent<Element> {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.settings.DebuggerSettings");
|
||||
public static final int SOCKET_TRANSPORT = 0;
|
||||
public static final int SHMEM_TRANSPORT = 1;
|
||||
@@ -72,8 +79,10 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
|
||||
|
||||
private ClassFilter[] mySteppingFilters = ClassFilter.EMPTY_ARRAY;
|
||||
|
||||
private Map<String, ContentState> myContentStates = new HashMap<String, ContentState>();
|
||||
private Map<String, ContentState> myContentStates = new LinkedHashMap<String, ContentState>();
|
||||
|
||||
// transient - custom serialization
|
||||
@Transient
|
||||
public ClassFilter[] getSteppingFilters() {
|
||||
final ClassFilter[] rv = new ClassFilter[mySteppingFilters.length];
|
||||
for (int idx = 0; idx < rv.length; idx++) {
|
||||
@@ -82,50 +91,51 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
|
||||
return rv;
|
||||
}
|
||||
|
||||
public static DebuggerSettings getInstance() {
|
||||
return ServiceManager.getService(DebuggerSettings.class);
|
||||
}
|
||||
|
||||
public void setSteppingFilters(ClassFilter[] steppingFilters) {
|
||||
mySteppingFilters = steppingFilters != null ? steppingFilters : ClassFilter.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public void readExternal(Element parentNode) throws InvalidDataException {
|
||||
DefaultJDOMExternalizer.readExternal(this, parentNode);
|
||||
List<ClassFilter> filtersList = new ArrayList<ClassFilter>();
|
||||
|
||||
for (final Object o : parentNode.getChildren("filter")) {
|
||||
Element filter = (Element)o;
|
||||
filtersList.add(DebuggerUtilsEx.create(filter));
|
||||
@Nullable
|
||||
@Override
|
||||
public Element getState() {
|
||||
Element state = XmlSerializer.serialize(this, new SkipDefaultValuesSerializationFilters());
|
||||
try {
|
||||
DebuggerUtilsEx.writeFilters(state, "filter", mySteppingFilters);
|
||||
}
|
||||
setSteppingFilters(filtersList.toArray(new ClassFilter[filtersList.size()]));
|
||||
|
||||
filtersList.clear();
|
||||
|
||||
final List contents = parentNode.getChildren("content");
|
||||
myContentStates.clear();
|
||||
for (Object content : contents) {
|
||||
final ContentState state = new ContentState((Element)content);
|
||||
myContentStates.put(state.getType(), state);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public void writeExternal(Element parentNode) throws WriteExternalException {
|
||||
DefaultJDOMExternalizer.writeExternal(this, parentNode);
|
||||
for (ClassFilter mySteppingFilter : mySteppingFilters) {
|
||||
Element element = new Element("filter");
|
||||
parentNode.addContent(element);
|
||||
mySteppingFilter.writeExternal(element);
|
||||
catch (WriteExternalException e) {
|
||||
LOG.error(e);
|
||||
return null;
|
||||
}
|
||||
|
||||
for (ContentState eachState : myContentStates.values()) {
|
||||
final Element content = new Element("content");
|
||||
if (eachState.write(content)) {
|
||||
parentNode.addContent(content);
|
||||
state.addContent(content);
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
public static DebuggerSettings getInstance() {
|
||||
return ServiceManager.getService(DebuggerSettings.class);
|
||||
@Override
|
||||
public void loadState(Element state) {
|
||||
XmlSerializer.deserializeInto(this, state);
|
||||
|
||||
try {
|
||||
setSteppingFilters(DebuggerUtilsEx.readFilters(state.getChildren("filter")));
|
||||
}
|
||||
catch (InvalidDataException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
|
||||
myContentStates.clear();
|
||||
for (Element content : state.getChildren("content")) {
|
||||
ContentState contentState = new ContentState(content);
|
||||
myContentStates.put(contentState.getType(), contentState);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
@@ -150,6 +160,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
|
||||
DebuggerUtilsEx.filterEquals(mySteppingFilters, secondSettings.mySteppingFilters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DebuggerSettings clone() {
|
||||
try {
|
||||
final DebuggerSettings cloned = (DebuggerSettings)super.clone();
|
||||
@@ -208,7 +219,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
|
||||
if (mySelectedTab != null) {
|
||||
element.setAttribute("selected", mySelectedTab);
|
||||
}
|
||||
element.setAttribute("split", new Double(mySplitProportion).toString());
|
||||
element.setAttribute("split", Double.toString(mySplitProportion));
|
||||
element.setAttribute("detached", Boolean.valueOf(myDetached).toString());
|
||||
element.setAttribute("horizontal", Boolean.valueOf(myHorizontalToolbar).toString());
|
||||
return true;
|
||||
@@ -266,6 +277,7 @@ public class DebuggerSettings implements JDOMExternalizable, NamedComponent, Clo
|
||||
myHorizontalToolbar = horizontalToolbar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContentState clone() throws CloneNotSupportedException {
|
||||
return (ContentState)super.clone();
|
||||
}
|
||||
|
||||
@@ -17,20 +17,15 @@
|
||||
package com.intellij.ui.classFilter;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.JDOMExternalizable;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.util.xmlb.annotations.Attribute;
|
||||
import com.intellij.util.xmlb.annotations.Tag;
|
||||
import com.intellij.util.xmlb.annotations.Transient;
|
||||
import org.jdom.Element;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@Tag("class-filter")
|
||||
public class ClassFilter implements JDOMExternalizable, Cloneable{
|
||||
public class ClassFilter implements Cloneable {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.ui.classFilter.ClassFilter");
|
||||
public static final ClassFilter[] EMPTY_ARRAY = new ClassFilter[0];
|
||||
|
||||
@@ -72,14 +67,6 @@ public class ClassFilter implements JDOMExternalizable, Cloneable{
|
||||
return getPattern();
|
||||
}
|
||||
|
||||
public void readExternal(Element element) throws InvalidDataException {
|
||||
DefaultJDOMExternalizer.readExternal(this, element);
|
||||
}
|
||||
|
||||
public void writeExternal(Element element) throws WriteExternalException {
|
||||
DefaultJDOMExternalizer.writeExternal(this, element);
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ClassFilter)) return false;
|
||||
@@ -99,6 +86,7 @@ public class ClassFilter implements JDOMExternalizable, Cloneable{
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassFilter clone() {
|
||||
try {
|
||||
return (ClassFilter) super.clone();
|
||||
|
||||
+15
-6
@@ -23,6 +23,7 @@ import com.intellij.coverage.JavaCoverageRunner;
|
||||
import com.intellij.execution.configurations.RunConfigurationBase;
|
||||
import com.intellij.execution.configurations.SimpleJavaParameters;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.ui.classFilter.ClassFilter;
|
||||
@@ -116,6 +117,7 @@ public class JavaCoverageEnabledConfiguration extends CoverageEnabledConfigurati
|
||||
myCoveragePatterns = coveragePatterns;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readExternal(Element element) throws InvalidDataException {
|
||||
super.readExternal(element);
|
||||
|
||||
@@ -126,14 +128,13 @@ public class JavaCoverageEnabledConfiguration extends CoverageEnabledConfigurati
|
||||
mySuiteToMergeWith = element.getAttributeValue(COVERAGE_MERGE_SUITE_ATT_NAME);
|
||||
|
||||
// coverage patters
|
||||
final List children = element.getChildren(COVERAGE_PATTERN_ELEMENT_NAME);
|
||||
List<Element> children = element.getChildren(COVERAGE_PATTERN_ELEMENT_NAME);
|
||||
if (children.size() > 0) {
|
||||
myCoveragePatterns = new ClassFilter[children.size()];
|
||||
for (int i = 0; i < children.size(); i++) {
|
||||
myCoveragePatterns[i] = new ClassFilter();
|
||||
@NonNls final Element e = (Element)children.get(i);
|
||||
myCoveragePatterns[i].readExternal(e);
|
||||
final String val = e.getAttributeValue("value");
|
||||
Element e = children.get(i);
|
||||
myCoveragePatterns[i] = createClassFilter(e);
|
||||
String val = e.getAttributeValue("value");
|
||||
if (val != null) {
|
||||
myCoveragePatterns[i].setPattern(val);
|
||||
}
|
||||
@@ -141,6 +142,13 @@ public class JavaCoverageEnabledConfiguration extends CoverageEnabledConfigurati
|
||||
}
|
||||
}
|
||||
|
||||
public static ClassFilter createClassFilter(Element element) throws InvalidDataException {
|
||||
ClassFilter filter = new ClassFilter();
|
||||
DefaultJDOMExternalizer.readExternal(filter, element);
|
||||
return filter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeExternal(Element element) throws WriteExternalException {
|
||||
// just for backward compatibility with settings format before "Huge Coverage Refactoring"
|
||||
// see [IDEA-56800] ProjectRunConfigurationManager component: "coverage" extension: "merge" attribute is misplaced
|
||||
@@ -187,12 +195,13 @@ public class JavaCoverageEnabledConfiguration extends CoverageEnabledConfigurati
|
||||
if (myCoveragePatterns != null) {
|
||||
for (ClassFilter pattern : myCoveragePatterns) {
|
||||
@NonNls final Element patternElement = new Element(COVERAGE_PATTERN_ELEMENT_NAME);
|
||||
pattern.writeExternal(patternElement);
|
||||
DefaultJDOMExternalizer.writeExternal(pattern, patternElement);
|
||||
element.addContent(patternElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getCoverageFilePath() {
|
||||
if (myCoverageFilePath != null ) {
|
||||
|
||||
Reference in New Issue
Block a user