This commit is contained in:
Alexey Kudravtsev
2012-05-18 16:09:23 +04:00
parent a6657f836d
commit 3fdae17f5b
2 changed files with 54 additions and 2 deletions
@@ -89,7 +89,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
myRootsWatcher.updateWatchedRoots();
}
LibraryImpl(String name, final @Nullable PersistentLibraryKind<?> kind, LibraryTable table, ModifiableRootModel rootModel) {
LibraryImpl(String name, @Nullable final PersistentLibraryKind<?> kind, LibraryTable table, ModifiableRootModel rootModel) {
myName = name;
myLibraryTable = table;
myRootModel = rootModel;
@@ -131,20 +131,24 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
myJarDirectories.copyFrom(from.myJarDirectories);
}
@Override
public void dispose() {
assert !isDisposed();
Disposer.dispose(myRootsWatcher);
myDisposed = true;
}
@Override
public boolean isDisposed() {
return myDisposed;
}
@Override
public String getName() {
return myName;
}
@Override
@NotNull
public String[] getUrls(@NotNull OrderRootType rootType) {
assert !isDisposed();
@@ -152,6 +156,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return result.getUrls();
}
@Override
@NotNull
public VirtualFile[] getFiles(@NotNull OrderRootType rootType) {
assert !isDisposed();
@@ -182,18 +187,21 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
}
}
@Override
public void setName(String name) {
LOG.assertTrue(isWritable());
myName = name;
}
/* you have to commit modifiable model or dispose it by yourself! */
@Override
@NotNull
public ModifiableModel getModifiableModel() {
assert !isDisposed();
return new LibraryImpl(this, this, myRootModel);
}
@Override
public Library cloneLibrary(RootModelImpl rootModel) {
LOG.assertTrue(myLibraryTable == null);
final LibraryImpl clone = new LibraryImpl(this, null, rootModel);
@@ -201,6 +209,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return clone;
}
@Override
public List<String> getInvalidRootUrls(OrderRootType type) {
final List<VirtualFilePointer> pointers = myRoots.get(type).getList();
List<String> invalidPaths = null;
@@ -221,6 +230,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
myProperties = properties;
}
@Override
@NotNull
public RootProvider getRootProvider() {
return myRootProvider;
@@ -241,6 +251,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return result;
}
@Override
public void readExternal(Element element) throws InvalidDataException {
readName(element);
readProperties(element);
@@ -285,6 +296,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
public static List<OrderRootType> sortRootTypes(Collection<OrderRootType> rootTypes) {
List<OrderRootType> allTypes = new ArrayList<OrderRootType>(rootTypes);
Collections.sort(allTypes, new Comparator<OrderRootType>() {
@Override
public int compare(final OrderRootType o1, final OrderRootType o2) {
return getSortKey(o1).compareTo(getSortKey(o2));
}
@@ -296,12 +308,13 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
if (orderRootType instanceof PersistentOrderRootType) {
return ((PersistentOrderRootType)orderRootType).getSdkRootName();
}
else if (orderRootType instanceof OrderRootType.DocumentationRootType) {
if (orderRootType instanceof OrderRootType.DocumentationRootType) {
return ((OrderRootType.DocumentationRootType)orderRootType).getSdkRootName();
}
return "";
}
@Override
public void writeExternal(Element rootElement) throws WriteExternalException {
LOG.assertTrue(!isDisposed(), "Already disposed!");
@@ -357,6 +370,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
myKind = kind;
}
@Override
public void addRoot(@NotNull String url, @NotNull OrderRootType rootType) {
LOG.assertTrue(isWritable());
assert !isDisposed();
@@ -365,6 +379,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
container.add(url);
}
@Override
public void addRoot(@NotNull VirtualFile file, @NotNull OrderRootType rootType) {
LOG.assertTrue(isWritable());
assert !isDisposed();
@@ -373,14 +388,17 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
container.add(file);
}
@Override
public void addJarDirectory(@NotNull final String url, final boolean recursive) {
addJarDirectory(url, recursive, JarDirectories.DEFAULT_JAR_DIRECTORY_TYPE);
}
@Override
public void addJarDirectory(@NotNull final VirtualFile file, final boolean recursive) {
addJarDirectory(file, recursive, JarDirectories.DEFAULT_JAR_DIRECTORY_TYPE);
}
@Override
public void addJarDirectory(@NotNull final String url, final boolean recursive, @NotNull OrderRootType rootType) {
assert !isDisposed();
LOG.assertTrue(isWritable());
@@ -389,6 +407,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
myJarDirectories.add(rootType, url, recursive);
}
@Override
public void addJarDirectory(@NotNull final VirtualFile file, final boolean recursive, @NotNull OrderRootType rootType) {
assert !isDisposed();
LOG.assertTrue(isWritable());
@@ -397,20 +416,24 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
myJarDirectories.add(rootType, file.getUrl(), recursive);
}
@Override
public boolean isJarDirectory(@NotNull final String url) {
return isJarDirectory(url, JarDirectories.DEFAULT_JAR_DIRECTORY_TYPE);
}
@Override
public boolean isJarDirectory(@NotNull final String url, @NotNull final OrderRootType rootType) {
return myJarDirectories.contains(rootType, url);
}
@Override
public boolean isValid(@NotNull final String url, @NotNull final OrderRootType rootType) {
final VirtualFilePointerContainer container = myRoots.get(rootType);
final VirtualFilePointer fp = container.findByUrl(url);
return fp != null && fp.isValid();
}
@Override
public boolean removeRoot(@NotNull String url, @NotNull OrderRootType rootType) {
assert !isDisposed();
LOG.assertTrue(isWritable());
@@ -424,6 +447,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return false;
}
@Override
public void moveRootUp(@NotNull String url, @NotNull OrderRootType rootType) {
assert !isDisposed();
LOG.assertTrue(isWritable());
@@ -431,6 +455,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
container.moveUp(url);
}
@Override
public void moveRootDown(@NotNull String url, @NotNull OrderRootType rootType) {
assert !isDisposed();
LOG.assertTrue(isWritable());
@@ -438,6 +463,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
container.moveDown(url);
}
@Override
public boolean isChanged() {
return !mySource.equals(this);
}
@@ -471,6 +497,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return mySource;
}
@Override
public void commit() {
assert !isDisposed();
mySource.commit(this);
@@ -517,6 +544,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
}
private class MyRootProviderImpl extends RootProviderBaseImpl {
@Override
@NotNull
public String[] getUrls(@NotNull OrderRootType rootType) {
Set<String> originalUrls = new LinkedHashSet<String>(Arrays.asList(LibraryImpl.this.getUrls(rootType)));
@@ -526,12 +554,14 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return ArrayUtil.toStringArray(originalUrls);
}
@Override
@NotNull
public VirtualFile[] getFiles(@NotNull final OrderRootType rootType) {
return LibraryImpl.this.getFiles(rootType);
}
}
@Override
public LibraryTable getTable() {
return myLibraryTable;
}
@@ -558,6 +588,7 @@ public class LibraryImpl implements LibraryEx.ModifiableModelEx, LibraryEx {
return result;
}
@NonNls
@Override
public String toString() {
return "Library: name:" + myName + "; jars:" + myJarDirectories + "; roots:" + myRoots.values();
@@ -44,10 +44,12 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
private LibraryModel myModel = new LibraryModel();
private boolean myFirstLoad = true;
@Override
public ModifiableModel getModifiableModel() {
return new LibraryModel(myModel);
}
@Override
public Element getState() {
final Element element = new Element("state");
try {
@@ -59,6 +61,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
return element;
}
@Override
public void loadState(final Element element) {
try {
if (myFirstLoad) {
@@ -77,28 +80,34 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
}
}
@Override
@NotNull
public Library[] getLibraries() {
return myModel.getLibraries();
}
@Override
@NotNull
public Iterator<Library> getLibraryIterator() {
return myModel.getLibraryIterator();
}
@Override
public Library getLibraryByName(@NotNull String name) {
return myModel.getLibraryByName(name);
}
@Override
public void addListener(Listener listener) {
myDispatcher.addListener(listener);
}
@Override
public void addListener(Listener listener, Disposable parentDisposable) {
myDispatcher.addListener(listener, parentDisposable);
}
@Override
public void removeListener(Listener listener) {
myDispatcher.removeListener(listener);
}
@@ -117,12 +126,14 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
myDispatcher.getMulticaster().beforeLibraryRemoved(library);
}
@Override
public void dispose() {
for (Library library : getLibraries()) {
Disposer.dispose(library);
}
}
@Override
public Library createLibrary() {
ApplicationManager.getApplication().assertWriteAccessAllowed();
return createLibrary(null);
@@ -137,6 +148,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
myDispatcher.getMulticaster().afterLibraryRenamed(library);
}
@Override
public Library createLibrary(String name) {
final ModifiableModel modifiableModel = getModifiableModel();
final Library library = modifiableModel.createLibrary(name);
@@ -144,6 +156,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
return library;
}
@Override
public void removeLibrary(@NotNull Library library) {
final ModifiableModel modifiableModel = getModifiableModel();
modifiableModel.removeLibrary(library);
@@ -202,16 +215,19 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
myLibraries.addAll(that.myLibraries);
}
@Override
public void commit() {
myWritable = false;
LibraryTableBase.this.commit(this);
}
@Override
@NotNull
public Iterator<Library> getLibraryIterator() {
return Collections.unmodifiableList(myLibraries).iterator();
}
@Override
@Nullable
public Library getLibraryByName(@NotNull String name) {
for (Library myLibrary : myLibraries) {
@@ -229,6 +245,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
}
@Override
@NotNull
public Library[] getLibraries() {
return myLibraries.toArray(new Library[myLibraries.size()]);
@@ -251,11 +268,13 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
return library;
}
@Override
public void removeLibrary(@NotNull Library library) {
assertWritable();
myLibraries.remove(library);
}
@Override
public boolean isChanged() {
if (!myWritable) return false;
Set<Library> thisLibraries = new HashSet<Library>(myLibraries);
@@ -263,6 +282,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
return !thisLibraries.equals(thatLibraries);
}
@Override
public void readExternal(Element element) throws InvalidDataException {
HashMap<String, Library> libraries = new HashMap<String, Library>();
for (Library library : myLibraries) {
@@ -288,6 +308,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent<Eleme
}
}
@Override
public void writeExternal(Element element) throws WriteExternalException {
final List<Library> libraries = ContainerUtil.findAll(myLibraries, new Condition<Library>() {
@Override