From f9174b74f05efc381b83dd9a8048750f94bb34be Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 23 Feb 2015 11:18:33 +0100 Subject: [PATCH] DiffManagerImpl should be persistent component, don't save defaults (COMPARISON_POLICY="Default") --- .../util/config/AbstractProperty.java | 26 ++-- .../ExternalizablePropertyContainer.java | 63 +++++----- .../intellij/util/config/Externalizer.java | 37 +++--- .../intellij/openapi/diff/ex/DiffPanelEx.java | 4 +- .../openapi/diff/impl/DiffPanelImpl.java | 23 ++-- .../diff/impl/external/CompositeDiffTool.java | 14 ++- .../diff/impl/external/DiffManagerImpl.java | 119 +++++++++++------- .../diff/impl/external/FrameDiffTool.java | 45 ++++--- .../highlighting/SimpleDiffPanelState.java | 9 +- .../openapi/diff/impl/ComparisonPolicy.java | 8 +- .../FragmentedDiffRequestFromChange.java | 20 ++- .../ant/config/impl/AllJarsUnderDirEntry.java | 5 +- .../ant/config/impl/AntClasspathEntry.java | 20 +-- .../lang/ant/config/impl/AntInstallation.java | 10 +- .../lang/ant/config/impl/AntReference.java | 9 +- .../config/impl/GlobalAntConfiguration.java | 19 +-- .../lang/ant/config/impl/SinglePathEntry.java | 8 +- 17 files changed, 238 insertions(+), 201 deletions(-) diff --git a/platform/platform-api/src/com/intellij/util/config/AbstractProperty.java b/platform/platform-api/src/com/intellij/util/config/AbstractProperty.java index 4c46e2362e33..97b6e4d882c6 100644 --- a/platform/platform-api/src/com/intellij/util/config/AbstractProperty.java +++ b/platform/platform-api/src/com/intellij/util/config/AbstractProperty.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.util.config; import com.intellij.openapi.util.Comparing; @@ -28,17 +27,28 @@ public abstract class AbstractProperty { } }; - @NonNls public abstract String getName(); + @NonNls + public abstract String getName(); + public abstract T getDefault(AbstractPropertyContainer container); + public abstract T copy(T value); public boolean areEqual(T value1, T value2) { return Comparing.equal(value1, value2); } - public T get(AbstractPropertyContainer container) { return (T) container.getValueOf(this); } - public void set(AbstractPropertyContainer container, T value) { container.setValueOf(this, value); } - public final T cast(Object value) { return (T) value; } + public T get(AbstractPropertyContainer container) { + return (T)container.getValueOf(this); + } + + public void set(AbstractPropertyContainer container, T value) { + container.setValueOf(this, value); + } + + public final T cast(Object value) { + return (T)value; + } public String toString() { return getName(); @@ -60,7 +70,9 @@ public abstract class AbstractProperty { }; protected abstract Object getValueOf(PropertyImpl property); + protected abstract void setValueOf(PropertyImpl property, Object value); + public abstract boolean hasProperty(AbstractProperty property); /** @@ -73,7 +85,7 @@ public abstract class AbstractProperty { /** * Only containers can delegate to another. - * Other clients should use {@link AbstractProperty#get AbstractProperty.get} + * Other clients should use {@link AbstractProperty#get AbstractProperty.get} */ protected final T delegateGet(AbstractPropertyContainer container, AbstractProperty property) { return (T)container.getValueOf(property); diff --git a/platform/platform-api/src/com/intellij/util/config/ExternalizablePropertyContainer.java b/platform/platform-api/src/com/intellij/util/config/ExternalizablePropertyContainer.java index 3f48ecf2a4b1..25f3a173e45b 100644 --- a/platform/platform-api/src/com/intellij/util/config/ExternalizablePropertyContainer.java +++ b/platform/platform-api/src/com/intellij/util/config/ExternalizablePropertyContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.util.config; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.*; +import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Factory; +import com.intellij.openapi.util.JDOMExternalizable; +import com.intellij.openapi.util.JDOMUtil; +import com.intellij.util.SmartList; +import gnu.trove.THashMap; import org.jdom.Element; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; -public class ExternalizablePropertyContainer extends AbstractProperty.AbstractPropertyContainer implements JDOMExternalizable { +public class ExternalizablePropertyContainer extends AbstractProperty.AbstractPropertyContainer { private static final Logger LOG = Logger.getInstance(ExternalizablePropertyContainer.class); - private final Map myValues = new HashMap(); - private final Map myExternalizers = new HashMap(); + private final Map myValues = new THashMap(); + private final Map myExternalizers = new THashMap(); public void registerProperty(AbstractProperty property, Externalizer externalizer) { String name = property.getName(); @@ -66,37 +74,34 @@ public class ExternalizablePropertyContainer extends AbstractProperty.AbstractPr registerProperty(property, itemTagName, Externalizer.FactoryBased.create(factory)); } - private Externalizer> createListExternalizer(final Externalizer itemExternalizer, final String itemTagName) { + private static Externalizer> createListExternalizer(final Externalizer itemExternalizer, final String itemTagName) { return new ListExternalizer(itemExternalizer, itemTagName); } - @Override - public void readExternal(Element element) throws InvalidDataException { - HashMap propertyByName = new HashMap(); + public void readExternal(@NotNull Element element) { + Map propertyByName = new THashMap(); for (AbstractProperty abstractProperty : myExternalizers.keySet()) { propertyByName.put(abstractProperty.getName(), abstractProperty); } - final List children = element.getChildren(); - for (Element child : children) { + for (Element child : element.getChildren()) { AbstractProperty property = propertyByName.get(child.getName()); if (property == null) { continue; } - final Externalizer externalizer = myExternalizers.get(property); + Externalizer externalizer = myExternalizers.get(property); if (externalizer == null) { continue; } try { myValues.put(property, externalizer.readValue(child)); } - catch (InvalidDataException e) { + catch (Exception e) { LOG.info(e); } } } - @Override - public void writeExternal(Element element) throws WriteExternalException { + public void writeExternal(@NotNull Element element) { if (myExternalizers.isEmpty()) { return; } @@ -147,12 +152,12 @@ public class ExternalizablePropertyContainer extends AbstractProperty.AbstractPr } @Override - public List readValue(Element dataElement) throws InvalidDataException { - ArrayList list = new ArrayList(); - List children = dataElement.getChildren(); - for (Iterator iterator = children.iterator(); iterator.hasNext();) { - Element element = iterator.next(); - if (NULL_ELEMENT.equals(element.getName())) list.add(null); + public List readValue(Element dataElement) { + List list = new SmartList(); + for (Element element : dataElement.getChildren()) { + if (NULL_ELEMENT.equals(element.getName())) { + list.add(null); + } else if (myItemTagName.equals(element.getName())) { T item = myItemExternalizer.readValue(element); if (item == null) { @@ -166,17 +171,17 @@ public class ExternalizablePropertyContainer extends AbstractProperty.AbstractPr } @Override - public void writeValue(Element dataElement, List value) throws WriteExternalException { - for (Iterator iterator = value.iterator(); iterator.hasNext();) { - T item = iterator.next(); - if (item != null) { + public void writeValue(Element dataElement, List value) { + for (T item : value) { + if (item == null) { + dataElement.addContent(new Element(NULL_ELEMENT)); + } + else { Element element = new Element(myItemTagName); myItemExternalizer.writeValue(element, item); dataElement.addContent(element); } - else dataElement.addContent(new Element(NULL_ELEMENT)); } } } - } diff --git a/platform/platform-api/src/com/intellij/util/config/Externalizer.java b/platform/platform-api/src/com/intellij/util/config/Externalizer.java index 864b5bee0e43..1fb3eca0b262 100644 --- a/platform/platform-api/src/com/intellij/util/config/Externalizer.java +++ b/platform/platform-api/src/com/intellij/util/config/Externalizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,6 @@ import org.jdom.Element; import org.jetbrains.annotations.NonNls; import java.util.Iterator; -import java.util.List; public interface Externalizer { @NonNls String VALUE_ATTRIBUTE = "value"; @@ -60,9 +59,9 @@ public interface Externalizer { } }; - T readValue(Element dataElement) throws InvalidDataException; + T readValue(Element dataElement); - void writeValue(Element dataElement, T value) throws WriteExternalException; + void writeValue(Element dataElement, T value); class FactoryBased implements Externalizer { private final Factory myFactory; @@ -72,15 +71,25 @@ public interface Externalizer { } @Override - public T readValue(Element dataElement) throws InvalidDataException { + public T readValue(Element dataElement) { T data = myFactory.create(); - data.readExternal(dataElement); + try { + data.readExternal(dataElement); + } + catch (InvalidDataException e) { + throw new RuntimeException(e); + } return data; } @Override - public void writeValue(Element dataElement, T value) throws WriteExternalException { - value.writeExternal(dataElement); + public void writeValue(Element dataElement, T value) { + try { + value.writeExternal(dataElement); + } + catch (WriteExternalException e) { + throw new RuntimeException(e); + } } public static FactoryBased create(Factory factory) { @@ -94,25 +103,25 @@ public interface Externalizer { @NonNls private static final String VALUE_ATTR = "value"; @Override - public Storage readValue(Element dataElement) throws InvalidDataException { + public Storage readValue(Element dataElement) { Storage.MapStorage storage = new Storage.MapStorage(); - List children = dataElement.getChildren(ITEM_TAG); - for (Iterator iterator = children.iterator(); iterator.hasNext();) { - Element element = iterator.next(); + for (Element element : dataElement.getChildren(ITEM_TAG)) { storage.put(element.getAttributeValue(KEY_ATTR), element.getAttributeValue(VALUE_ATTR)); } return storage; } @Override - public void writeValue(Element dataElement, Storage storage) throws WriteExternalException { + public void writeValue(Element dataElement, Storage storage) { Iterator keys = ((Storage.MapStorage)storage).getKeys(); while (keys.hasNext()) { String key = keys.next(); String value = storage.get(key); Element element = new Element(ITEM_TAG); element.setAttribute(KEY_ATTR, key); - if (value != null) element.setAttribute(VALUE_ATTR, value); + if (value != null) { + element.setAttribute(VALUE_ATTR, value); + } dataElement.addContent(element); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/ex/DiffPanelEx.java b/platform/platform-impl/src/com/intellij/openapi/diff/ex/DiffPanelEx.java index bf07a4ad2cd1..7eb8000a7af3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/ex/DiffPanelEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/ex/DiffPanelEx.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,7 +40,7 @@ public interface DiffPanelEx extends DiffPanel, Disposable { DiffPanelOptions getOptions(); - void setComparisonPolicy(ComparisonPolicy comparisonPolicy); + void setComparisonPolicy(@NotNull ComparisonPolicy comparisonPolicy); ComparisonPolicy getComparisonPolicy(); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java index 7d1183a233c9..fbdde51e8761 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -180,17 +180,16 @@ public class DiffPanelImpl implements DiffPanelEx, ContentChangeListener, TwoSid myDataProvider = new MyGenericDataProvider(this); myPanel.setDataProvider(myDataProvider); - final ComparisonPolicy comparisonPolicy = getComparisonPolicy(); - final ComparisonPolicy defaultComparisonPolicy = DiffManagerImpl.getInstanceEx().getComparisonPolicy(); - final HighlightMode highlightMode = getHighlightMode(); - final HighlightMode defaultHighlightMode = DiffManagerImpl.getInstanceEx().getHighlightMode(); + ComparisonPolicy comparisonPolicy = getComparisonPolicy(); + if (comparisonPolicy != DiffManagerImpl.getInstanceEx().getComparisonPolicy()) { + setComparisonPolicy(comparisonPolicy); + } - if (defaultComparisonPolicy != null && comparisonPolicy != defaultComparisonPolicy) { - setComparisonPolicy(defaultComparisonPolicy); - } - if (defaultHighlightMode != null && highlightMode != defaultHighlightMode) { - setHighlightMode(defaultHighlightMode); + HighlightMode highlightMode = getHighlightMode(); + if (highlightMode != DiffManagerImpl.getInstanceEx().getHighlightMode()) { + setHighlightMode(highlightMode); } + myVisibleAreaListener = new VisibleAreaListener() { @Override public void visibleAreaChanged(VisibleAreaEvent e) { @@ -504,11 +503,11 @@ public class DiffPanelImpl implements DiffPanelEx, ContentChangeListener, TwoSid return myData.getComparisonPolicy(); } - public void setComparisonPolicy(ComparisonPolicy comparisonPolicy) { + public void setComparisonPolicy(@NotNull ComparisonPolicy comparisonPolicy) { setComparisonPolicy(comparisonPolicy, true); } - private void setComparisonPolicy(ComparisonPolicy policy, boolean notifyManager) { + private void setComparisonPolicy(@NotNull ComparisonPolicy policy, boolean notifyManager) { myData.setComparisonPolicy(policy); rediff(); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/CompositeDiffTool.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/CompositeDiffTool.java index d4948e11ee1a..15d51eec5d28 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/CompositeDiffTool.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/CompositeDiffTool.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,10 @@ package com.intellij.openapi.diff.impl.external; import com.intellij.ide.highlighter.ArchiveFileType; import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.diff.*; +import com.intellij.openapi.diff.DiffContent; +import com.intellij.openapi.diff.DiffRequest; +import com.intellij.openapi.diff.DiffTool; +import com.intellij.openapi.diff.DiffViewer; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.UIBasedFileType; import org.jetbrains.annotations.NotNull; @@ -26,16 +29,21 @@ import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; class CompositeDiffTool implements DiffTool { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.diff.impl.external.CompositeDiffTool"); private final List myTools; - public CompositeDiffTool(List tools) { + public CompositeDiffTool(@NotNull List tools) { myTools = new ArrayList(tools); } + public CompositeDiffTool(@NotNull DiffTool[] tools) { + myTools = Arrays.asList(tools); + } + public void show(DiffRequest data) { checkDiffData(data); DiffTool tool = chooseTool(data); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/DiffManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/DiffManagerImpl.java index aeb362bf68fe..2a842e99041d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/DiffManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/DiffManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,10 @@ package com.intellij.openapi.diff.impl.external; import com.intellij.openapi.Disposable; +import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.openapi.components.State; +import com.intellij.openapi.components.Storage; +import com.intellij.openapi.components.StoragePathMacros; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.diff.DiffManager; import com.intellij.openapi.diff.DiffPanel; @@ -29,8 +33,11 @@ import com.intellij.openapi.diff.impl.processing.HighlightMode; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.markup.MarkupEditorFilter; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.*; +import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.Key; +import com.intellij.util.SmartList; import com.intellij.util.config.*; +import com.intellij.util.containers.ContainerUtil; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -39,8 +46,16 @@ import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; -public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { +@State( + name = "DiffManager", + storages = { + @Storage(file = StoragePathMacros.APP_CONFIG + "/diff.xml"), + @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml", deprecated = true) + } +) +public class DiffManagerImpl extends DiffManager implements PersistentStateComponent { public static final int FULL_DIFF_DIVIDER_POLYGONS_OFFSET = 3; private static final Logger LOG = Logger.getInstance(DiffManagerImpl.class); @@ -50,7 +65,10 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { @Override public String readValue(Element dataElement) { String path = dataElement.getAttributeValue(NEW_VALUE); - if (path != null) return path; + if (path != null) { + return path; + } + String prevValue = dataElement.getAttributeValue(VALUE_ATTRIBUTE); return prevValue != null ? prevValue.trim() : null; } @@ -70,9 +88,8 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { public static final BooleanProperty ENABLE_FILES = new BooleanProperty("enableFiles", false); public static final BooleanProperty ENABLE_MERGE = new BooleanProperty("enableMerge", false); - private final ExternalizablePropertyContainer myProperties; - private final ArrayList myAdditionTools = new ArrayList(); + private final List myAdditionTools = new SmartList(); public static final DiffTool INTERNAL_DIFF = new FrameDiffTool(); public static final Key EDITOR_IS_DIFF_KEY = new Key("EDITOR_IS_DIFF_KEY"); @@ -82,8 +99,9 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { return DiffUtil.isDiffEditor(editor); } }; - private ComparisonPolicy myComparisonPolicy; - private HighlightMode myHighlightMode; + + private ComparisonPolicy myComparisonPolicy = ComparisonPolicy.DEFAULT; + private HighlightMode myHighlightMode = HighlightMode.BY_WORD; @NonNls public static final String COMPARISON_POLICY_ATTR_NAME = "COMPARISON_POLICY"; @NonNls public static final String HIGHLIGHT_MODE_ATTR_NAME = "HIGHLIGHT_MODE"; @@ -100,13 +118,15 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { } @Override - public DiffTool getIdeaDiffTool() { return INTERNAL_DIFF; } + public DiffTool getIdeaDiffTool() { + return INTERNAL_DIFF; + } @Override public DiffTool getDiffTool() { DiffTool[] standardTools; // there is inner check in multiple tool for external viewers as well - if (! ENABLE_FILES.value(myProperties) || ! ENABLE_FOLDERS.value(myProperties) || !ENABLE_MERGE.value(myProperties)) { + if (!ENABLE_FILES.value(myProperties) || !ENABLE_FOLDERS.value(myProperties) || !ENABLE_MERGE.value(myProperties)) { DiffTool[] embeddableTools = { INTERNAL_DIFF, new MergeTool(), @@ -121,7 +141,8 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { new MergeTool(), BinaryDiffTool.INSTANCE }; - } else { + } + else { standardTools = new DiffTool[]{ ExtCompareFolders.INSTANCE, ExtCompareFiles.INSTANCE, @@ -131,14 +152,22 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { BinaryDiffTool.INSTANCE }; } - ArrayList allTools = new ArrayList(myAdditionTools); - allTools.addAll(Arrays.asList(standardTools)); - return new CompositeDiffTool(allTools); + if (myAdditionTools.isEmpty()) { + return new CompositeDiffTool(standardTools); + } + else { + List allTools = new ArrayList(myAdditionTools); + ContainerUtil.addAll(allTools, standardTools); + return new CompositeDiffTool(allTools); + } } @Override public boolean registerDiffTool(@NotNull DiffTool tool) throws NullPointerException { - if (myAdditionTools.contains(tool)) return false; + if (myAdditionTools.contains(tool)) { + return false; + } + myAdditionTools.add(tool); return true; } @@ -149,7 +178,7 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { LOG.assertTrue(!myAdditionTools.contains(tool)); } - public ArrayList getAdditionTools() { + public List getAdditionTools() { return myAdditionTools; } @@ -174,28 +203,35 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { return (DiffManagerImpl)DiffManager.getInstance(); } + @Nullable @Override - public void readExternal(@NotNull Element element) throws InvalidDataException { - myProperties.readExternal(element); - readPolicy(element); - readMode(element); + public Element getState() { + Element state = new Element("state"); + myProperties.writeExternal(state); + if (myComparisonPolicy != ComparisonPolicy.DEFAULT) { + state.setAttribute(COMPARISON_POLICY_ATTR_NAME, myComparisonPolicy.getName()); + } + if (myHighlightMode != HighlightMode.BY_WORD) { + state.setAttribute(HIGHLIGHT_MODE_ATTR_NAME, myHighlightMode.name()); + } + return state; } - private void readPolicy(@NotNull final Element element) { - final String policyName = element.getAttributeValue(COMPARISON_POLICY_ATTR_NAME); + @Override + public void loadState(Element state) { + myProperties.readExternal(state); + + String policyName = state.getAttributeValue(COMPARISON_POLICY_ATTR_NAME); if (policyName != null) { - ComparisonPolicy[] policies = ComparisonPolicy.getAllInstances(); - for (ComparisonPolicy policy : policies) { + for (ComparisonPolicy policy : ComparisonPolicy.getAllInstances()) { if (policy.getName().equals(policyName)) { myComparisonPolicy = policy; break; } } } - } - private void readMode(@NotNull final Element element) { - final String modeName = element.getAttributeValue(HIGHLIGHT_MODE_ATTR_NAME); + String modeName = state.getAttributeValue(HIGHLIGHT_MODE_ATTR_NAME); if (modeName != null) { try { myHighlightMode = HighlightMode.valueOf(modeName); @@ -205,19 +241,10 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { } } - @Override - public void writeExternal(@NotNull Element element) throws WriteExternalException { - myProperties.writeExternal(element); - if (myComparisonPolicy != null) { - element.setAttribute(COMPARISON_POLICY_ATTR_NAME, myComparisonPolicy.getName()); - } - if (myHighlightMode != null) { - element.setAttribute(HIGHLIGHT_MODE_ATTR_NAME, myHighlightMode.name()); - } + public AbstractProperty.AbstractPropertyContainer getProperties() { + return myProperties; } - public AbstractProperty.AbstractPropertyContainer getProperties() { return myProperties; } - static DiffPanel createDiffPanel(DiffRequest data, Window window, @NotNull Disposable parentDisposable, FrameDiffTool tool) { DiffPanel diffPanel = null; try { @@ -236,21 +263,21 @@ public class DiffManagerImpl extends DiffManager implements JDOMExternalizable { } } - public void setComparisonPolicy(final ComparisonPolicy p) { - myComparisonPolicy = p; - } - - @Nullable + @NotNull public ComparisonPolicy getComparisonPolicy() { return myComparisonPolicy; } - public void setHighlightMode(HighlightMode highlightMode) { - myHighlightMode = highlightMode; + public void setComparisonPolicy(@NotNull ComparisonPolicy value) { + myComparisonPolicy = value; } - @Nullable + @NotNull public HighlightMode getHighlightMode() { return myHighlightMode; } + + public void setHighlightMode(@NotNull HighlightMode highlightMode) { + myHighlightMode = highlightMode; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java index b71eeda448a1..9fbb0b2cae55 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.FrameWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.ex.MessagesEx; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -40,8 +39,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collection; -// Author: dyoma - public class FrameDiffTool implements DiffTool { public void show(DiffRequest request) { Collection hints = request.getHints(); @@ -161,27 +158,27 @@ public class FrameDiffTool implements DiffTool { // TODO remove check? private boolean checkNoDifferenceAndNotify(DiffPanel diffPanel, DiffRequest data, final Window window, final boolean showMessage) { - if (!diffPanel.hasDifferences() && !data.getHints().contains(HINT_ALLOW_NO_DIFFERENCES)) { - DiffManagerImpl manager = (DiffManagerImpl) DiffManager.getInstance(); - if (!Comparing.equal(manager.getComparisonPolicy(), ComparisonPolicy.DEFAULT)) { - ComparisonPolicy oldPolicy = manager.getComparisonPolicy(); - manager.setComparisonPolicy(ComparisonPolicy.DEFAULT); - Disposable parentDisposable = Disposer.newDisposable(); - DiffPanel maybeDiffPanel = DiffManagerImpl.createDiffPanel(data, window, parentDisposable, this); - manager.setComparisonPolicy(oldPolicy); - - boolean hasDiffs = maybeDiffPanel.hasDifferences(); - Disposer.dispose(parentDisposable); - - if (hasDiffs) return false; - } - - if (! showMessage) { - return true; - } - return !askForceOpenDiff(data); + if (diffPanel.hasDifferences() || data.getHints().contains(HINT_ALLOW_NO_DIFFERENCES)) { + return false; } - return false; + + DiffManagerImpl manager = (DiffManagerImpl)DiffManager.getInstance(); + ComparisonPolicy oldPolicy = manager.getComparisonPolicy(); + if (oldPolicy != ComparisonPolicy.DEFAULT) { + manager.setComparisonPolicy(ComparisonPolicy.DEFAULT); + Disposable parentDisposable = Disposer.newDisposable(); + DiffPanel maybeDiffPanel = DiffManagerImpl.createDiffPanel(data, window, parentDisposable, this); + manager.setComparisonPolicy(oldPolicy); + + boolean hasDiffs = maybeDiffPanel.hasDifferences(); + Disposer.dispose(parentDisposable); + + if (hasDiffs) { + return false; + } + } + + return !showMessage || !askForceOpenDiff(data); } private static boolean askForceOpenDiff(DiffRequest data) { diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/highlighting/SimpleDiffPanelState.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/highlighting/SimpleDiffPanelState.java index fc26cf634e88..ccaa5190e587 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/highlighting/SimpleDiffPanelState.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/highlighting/SimpleDiffPanelState.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,10 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diff.impl.ComparisonPolicy; import com.intellij.openapi.diff.impl.ContentChangeListener; -import com.intellij.openapi.diff.impl.fragments.*; +import com.intellij.openapi.diff.impl.fragments.FragmentHighlighterImpl; +import com.intellij.openapi.diff.impl.fragments.FragmentList; +import com.intellij.openapi.diff.impl.fragments.FragmentListImpl; +import com.intellij.openapi.diff.impl.fragments.LineFragment; import com.intellij.openapi.diff.impl.processing.DiffPolicy; import com.intellij.openapi.diff.impl.processing.HighlightMode; import com.intellij.openapi.diff.impl.processing.TextCompareProcessor; @@ -58,7 +61,7 @@ public abstract class SimpleDiffPanelState implements Disposable { return editorWrapper; } - public void setComparisonPolicy(ComparisonPolicy comparisonPolicy) { + public void setComparisonPolicy(@NotNull ComparisonPolicy comparisonPolicy) { myComparisonPolicy = comparisonPolicy; } diff --git a/platform/util/src/com/intellij/openapi/diff/impl/ComparisonPolicy.java b/platform/util/src/com/intellij/openapi/diff/impl/ComparisonPolicy.java index b38c827adf9f..29f1cfaa7c6c 100644 --- a/platform/util/src/com/intellij/openapi/diff/impl/ComparisonPolicy.java +++ b/platform/util/src/com/intellij/openapi/diff/impl/ComparisonPolicy.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,16 @@ package com.intellij.openapi.diff.impl; import com.intellij.CommonBundle; -import com.intellij.openapi.diff.impl.string.DiffString; import com.intellij.openapi.diff.ex.DiffFragment; import com.intellij.openapi.diff.impl.highlighting.FragmentSide; import com.intellij.openapi.diff.impl.highlighting.Util; import com.intellij.openapi.diff.impl.processing.DiffCorrection; import com.intellij.openapi.diff.impl.processing.Formatting; import com.intellij.openapi.diff.impl.processing.Word; +import com.intellij.openapi.diff.impl.string.DiffString; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.diff.Diff; import com.intellij.util.diff.FilesTooBigForDiffException; import org.jetbrains.annotations.NotNull; @@ -241,8 +242,7 @@ public abstract class ComparisonPolicy { if (fragment.isOneSide()) { FragmentSide side = FragmentSide.chooseSide(fragment); DiffString text = side.getText(fragment); - DiffString trimed = text.trim(); - if (trimed.isEmpty()) { + if (StringUtil.isEmptyOrSpaces(text)) { collector.add(side.createFragment(text, DiffString.EMPTY, false)); return; } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/FragmentedDiffRequestFromChange.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/FragmentedDiffRequestFromChange.java index ce6ca72ab996..8b95fbe92c8c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/FragmentedDiffRequestFromChange.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/FragmentedDiffRequestFromChange.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package com.intellij.openapi.vcs.changes; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.diff.impl.ComparisonPolicy; import com.intellij.openapi.diff.impl.external.DiffManagerImpl; import com.intellij.openapi.diff.impl.fragments.LineFragment; import com.intellij.openapi.diff.impl.highlighting.FragmentSide; @@ -87,11 +86,10 @@ public class FragmentedDiffRequestFromChange { filePath.hardRefresh(); file = filePath.getVirtualFile(); } - final PreparedFragmentedContent preparedFragmentedContent = new PreparedFragmentedContent(myProject, fragmentedContent, + return new PreparedFragmentedContent(myProject, fragmentedContent, filePath.getName(), filePath.getFileType(), change.getBeforeRevision() == null ? null : change.getBeforeRevision().getRevisionNumber(), change.getAfterRevision() == null ? null : change.getAfterRevision().getRevisionNumber(), filePath, file); - return preparedFragmentedContent; } private static class RangesCalculator { @@ -138,12 +136,8 @@ public class FragmentedDiffRequestFromChange { } } - ComparisonPolicy comparisonPolicy = DiffManagerImpl.getInstanceEx().getComparisonPolicy(); - if (comparisonPolicy == null) { - comparisonPolicy = ComparisonPolicy.DEFAULT; - } - final TextCompareProcessor processor = new TextCompareProcessor(comparisonPolicy); - final List lineFragments = processor.process(myOldDocument.getText(), myDocument.getText()); + TextCompareProcessor processor = new TextCompareProcessor(DiffManagerImpl.getInstanceEx().getComparisonPolicy()); + List lineFragments = processor.process(myOldDocument.getText(), myDocument.getText()); myRanges = new ArrayList>(lineFragments.size()); for (LineFragment lineFragment : lineFragments) { if (!lineFragment.isEqual()) { @@ -174,7 +168,7 @@ public class FragmentedDiffRequestFromChange { } } - private int correctRangeEnd(final int end, final Document document) { + private static int correctRangeEnd(final int end, final Document document) { if (end == 0) return end; return "\n".equals(document.getText(new TextRange(end - 1, end))) ? end - 1 : end; } @@ -187,7 +181,7 @@ public class FragmentedDiffRequestFromChange { return myException; } - private Document documentFromRevision(final ContentRevision cr) throws VcsException { + private static Document documentFromRevision(final ContentRevision cr) throws VcsException { final Document oldDocument = new DocumentImpl(StringUtil.convertLineSeparators(notNullContentRevision(cr)),true); // todo !!! a question how to show line separators in diff etc // todo currently document doesn't allow to put \r as separator @@ -195,7 +189,7 @@ public class FragmentedDiffRequestFromChange { return oldDocument; } - private String notNullContentRevision(final ContentRevision cr) throws VcsException { + private static String notNullContentRevision(final ContentRevision cr) throws VcsException { if (cr == null) return ""; String content = cr.getContent(); return content == null ? "" : content; diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AllJarsUnderDirEntry.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AllJarsUnderDirEntry.java index 08748de5af2d..54205337eee4 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AllJarsUnderDirEntry.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AllJarsUnderDirEntry.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,6 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.roots.ui.CellAppearanceEx; import com.intellij.openapi.roots.ui.FileAppearanceService; import com.intellij.openapi.roots.ui.ModifiableCellAppearanceEx; -import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; @@ -55,7 +54,7 @@ public class AllJarsUnderDirEntry implements AntClasspathEntry { this(new File(osPath)); } - public void writeExternal(final Element dataElement) throws WriteExternalException { + public void writeExternal(final Element dataElement) { String url = VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, myDir.getAbsolutePath().replace(File.separatorChar, '/')); dataElement.setAttribute(DIR, url); } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntClasspathEntry.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntClasspathEntry.java index fb70c3728d9d..44931e324ebf 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntClasspathEntry.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntClasspathEntry.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,9 +18,7 @@ package com.intellij.lang.ant.config.impl; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.roots.ui.CellAppearanceEx; -import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.NullableFactory; -import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Function; import com.intellij.util.PathUtil; @@ -35,23 +33,25 @@ import java.util.List; public interface AntClasspathEntry { Externalizer EXTERNALIZER = new Externalizer() { @Override - public AntClasspathEntry readValue(Element dataElement) throws InvalidDataException { + public AntClasspathEntry readValue(Element dataElement) { String pathUrl = dataElement.getAttributeValue(SinglePathEntry.PATH); - if (pathUrl != null) + if (pathUrl != null) { return new SinglePathEntry(PathUtil.toPresentableUrl(pathUrl)); + } String dirUrl = dataElement.getAttributeValue(AllJarsUnderDirEntry.DIR); - if (dirUrl != null) + if (dirUrl != null) { return new AllJarsUnderDirEntry(PathUtil.toPresentableUrl(dirUrl)); - throw new InvalidDataException(); + } + throw new IllegalStateException(); } @Override - public void writeValue(Element dataElement, AntClasspathEntry entry) throws WriteExternalException { + public void writeValue(Element dataElement, AntClasspathEntry entry) { entry.writeExternal(dataElement); } }; - void writeExternal(Element dataElement) throws WriteExternalException; + void writeExternal(Element dataElement); void addFilesTo(List files); @@ -60,7 +60,7 @@ public interface AntClasspathEntry { abstract class AddEntriesFactory implements NullableFactory> { private final JComponent myParentComponent; private final FileChooserDescriptor myDescriptor; - private final Function myMapper; + private final Function myMapper; public AddEntriesFactory(final JComponent parentComponent, final FileChooserDescriptor descriptor, diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntInstallation.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntInstallation.java index 12c8d141b79e..2e9405564a3d 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntInstallation.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntInstallation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ package com.intellij.lang.ant.config.impl; import com.intellij.lang.ant.AntBundle; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.io.JarUtil; import com.intellij.util.config.*; import com.intellij.util.containers.Convertor; @@ -62,18 +60,18 @@ public class AntInstallation { } public static final Externalizer EXTERNALIZER = new Externalizer() { - public AntInstallation readValue(Element dataElement) throws InvalidDataException { + public AntInstallation readValue(Element dataElement) { AntInstallation antInstallation = new AntInstallation(); antInstallation.readExternal(dataElement); return antInstallation; } - public void writeValue(Element dataElement, AntInstallation antInstallation) throws WriteExternalException { + public void writeValue(Element dataElement, AntInstallation antInstallation) { antInstallation.myProperties.writeExternal(dataElement); } }; - private void readExternal(Element dataElement) throws InvalidDataException { + private void readExternal(Element dataElement) { myProperties.readExternal(dataElement); File antJar = new File(HOME_DIR.get(myProperties), PATH_TO_ANT_JAR); updateVersion(antJar); diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntReference.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntReference.java index f9f8d0d9eb9f..c3133da1350f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntReference.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntReference.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ import com.intellij.execution.CantRunException; import com.intellij.lang.ant.AntBundle; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.InvalidDataException; import com.intellij.util.config.AbstractProperty; import com.intellij.util.config.Externalizer; import org.jdom.Element; @@ -35,11 +34,13 @@ public abstract class AntReference { @NonNls private static final String BUNDLED_ANT_ATTR = "bundledAnt"; public static final Externalizer EXTERNALIZER = new Externalizer() { - public AntReference readValue(Element dataElement) throws InvalidDataException { + public AntReference readValue(Element dataElement) { if (Boolean.valueOf(dataElement.getAttributeValue(PROJECT_DEFAULT_ATTR)).booleanValue()) return PROJECT_DEFAULT; if (Boolean.valueOf(dataElement.getAttributeValue(BUNDLED_ANT_ATTR)).booleanValue()) return BUNDLED_ANT; String name = dataElement.getAttributeValue(NAME_ATTR); - if (name == null) throw new InvalidDataException(); + if (name == null) { + throw new IllegalStateException("no name"); + } return new MissingAntReference(name); } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/GlobalAntConfiguration.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/GlobalAntConfiguration.java index 43655b0463b4..d0166ffef749 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/GlobalAntConfiguration.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/GlobalAntConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,8 +31,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.config.*; @@ -102,24 +100,13 @@ public class GlobalAntConfiguration implements PersistentStateComponent @Override public Element getState() { Element element = new Element("state"); - try { - myProperties.writeExternal(element); - } - catch (WriteExternalException e) { - LOG.error(e); - return null; - } + myProperties.writeExternal(element); return element; } @Override public void loadState(Element state) { - try { - myProperties.readExternal(state); - } - catch (InvalidDataException e) { - LOG.error(e); - } + myProperties.readExternal(state); } public static GlobalAntConfiguration getInstance() { diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/SinglePathEntry.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/SinglePathEntry.java index 76581fd86f0c..ac982d676255 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/SinglePathEntry.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/SinglePathEntry.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,6 @@ package com.intellij.lang.ant.config.impl; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.roots.ui.CellAppearanceEx; import com.intellij.openapi.roots.ui.FileAppearanceService; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; @@ -51,12 +49,12 @@ public class SinglePathEntry implements AntClasspathEntry { this(new File(osPath)); } - public void readExternal(final Element element) throws InvalidDataException { + public void readExternal(final Element element) { String value = element.getAttributeValue(PATH); myFile = new File(PathUtil.toPresentableUrl(value)); } - public void writeExternal(final Element element) throws WriteExternalException { + public void writeExternal(final Element element) { String url = VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, myFile.getAbsolutePath().replace(File.separatorChar, '/')); element.setAttribute(PATH, url); }