diff options
Diffstat (limited to 'platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoImpl.java')
-rw-r--r-- | platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoImpl.java | 149 |
1 files changed, 11 insertions, 138 deletions
diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoImpl.java index 0be339bf3c5f..1c3ca4f2ff8d 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoImpl.java @@ -16,34 +16,16 @@ package com.intellij.openapi.roots.impl; import com.intellij.openapi.module.Module; -import com.intellij.openapi.roots.OrderEntry; -import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.RootPolicy; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; /** * @author nik */ -public abstract class DirectoryInfoImpl extends DirectoryInfo { - public static final Comparator<OrderEntry> BY_OWNER_MODULE = new Comparator<OrderEntry>() { - @Override - public int compare(OrderEntry o1, OrderEntry o2) { - String name1 = o1.getOwnerModule().getName(); - String name2 = o2.getOwnerModule().getName(); - return name1.compareTo(name2); - } - }; +public class DirectoryInfoImpl extends DirectoryInfo { public static final int MAX_ROOT_TYPE_ID = Byte.MAX_VALUE; + private final VirtualFile myRoot;//original project root for which this information is calculated private final Module module; // module to which content it belongs or null private final VirtualFile libraryClassRoot; // class root in library private final VirtualFile contentRoot; @@ -53,8 +35,9 @@ public abstract class DirectoryInfoImpl extends DirectoryInfo { private final boolean myExcluded; private final byte mySourceRootTypeId; - DirectoryInfoImpl(Module module, VirtualFile contentRoot, VirtualFile sourceRoot, VirtualFile libraryClassRoot, + DirectoryInfoImpl(@NotNull VirtualFile root, Module module, VirtualFile contentRoot, VirtualFile sourceRoot, VirtualFile libraryClassRoot, boolean inModuleSource, boolean inLibrarySource, boolean isExcluded, int sourceRootTypeId) { + myRoot = root; this.module = module; this.libraryClassRoot = libraryClassRoot; this.contentRoot = contentRoot; @@ -74,30 +57,12 @@ public abstract class DirectoryInfoImpl extends DirectoryInfo { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - DirectoryInfoImpl info = (DirectoryInfoImpl)o; - - return mySourceRootTypeId == info.mySourceRootTypeId && - myInModuleSource == info.myInModuleSource && - myInLibrarySource == info.myInLibrarySource && - myExcluded == info.myExcluded && - Comparing.equal(contentRoot, info.contentRoot) && - Comparing.equal(libraryClassRoot, info.libraryClassRoot) && - Comparing.equal(module, info.module) && - Arrays.equals(getOrderEntries(), info.getOrderEntries()) && - Comparing.equal(sourceRoot, info.sourceRoot); + return myRoot.equals(((DirectoryInfoImpl)o).myRoot); } @Override public int hashCode() { - int result = module != null ? module.hashCode() : 0; - result = 31 * result + (libraryClassRoot != null ? libraryClassRoot.hashCode() : 0); - result = 31 * result + (contentRoot != null ? contentRoot.hashCode() : 0); - result = 31 * result + (sourceRoot != null ? sourceRoot.hashCode() : 0); - result = 31 * result + (myInModuleSource ? 1 : 0); - result = 31 * result + (myInLibrarySource ? 1 : 0); - result = 31 * result + (myExcluded ? 1 : 0); - result = 31 * result + (int)mySourceRootTypeId; - return result; + return myRoot.hashCode(); } @SuppressWarnings({"HardCodedStringLiteral"}) @@ -111,98 +76,9 @@ public abstract class DirectoryInfoImpl extends DirectoryInfo { ", libraryClassRoot=" + getLibraryClassRoot() + ", contentRoot=" + getContentRoot() + ", sourceRoot=" + getSourceRoot() + - ", orderEntries=" + Arrays.toString(getOrderEntries()) + "}"; } - @NotNull - private static OrderEntry createFakeOrderEntry(@NotNull final Module ownerModule) { - return new OrderEntry() { - @NotNull - @Override - public VirtualFile[] getFiles(OrderRootType type) { - throw new IncorrectOperationException(); - } - - @NotNull - @Override - public String[] getUrls(OrderRootType rootType) { - throw new IncorrectOperationException(); - } - - @NotNull - @Override - public String getPresentableName() { - throw new IncorrectOperationException(); - } - - @Override - public boolean isValid() { - throw new IncorrectOperationException(); - } - - @NotNull - @Override - public Module getOwnerModule() { - return ownerModule; - } - - @Override - public <R> R accept(RootPolicy<R> policy, @Nullable R initialValue) { - throw new IncorrectOperationException(); - } - - @Override - public int compareTo(@NotNull OrderEntry o) { - throw new IncorrectOperationException(); - } - - @Override - public boolean isSynthetic() { - throw new IncorrectOperationException(); - } - }; - } - - @Nullable - OrderEntry findOrderEntryWithOwnerModule(@NotNull Module ownerModule) { - OrderEntry[] entries = getOrderEntries(); - if (entries.length < 10) { - for (OrderEntry entry : entries) { - if (entry.getOwnerModule() == ownerModule) return entry; - } - return null; - } - int index = Arrays.binarySearch(entries, createFakeOrderEntry(ownerModule), BY_OWNER_MODULE); - return index < 0 ? null : entries[index]; - } - - @NotNull - List<OrderEntry> findAllOrderEntriesWithOwnerModule(@NotNull Module ownerModule) { - OrderEntry[] entries = getOrderEntries(); - if (entries.length == 1) { - OrderEntry entry = entries[0]; - return entry.getOwnerModule() == ownerModule ? Arrays.asList(entries) : Collections.<OrderEntry>emptyList(); - } - int index = Arrays.binarySearch(entries, createFakeOrderEntry(ownerModule), BY_OWNER_MODULE); - if (index < 0) { - return Collections.emptyList(); - } - int firstIndex = index; - while (firstIndex-1 >= 0 && entries[firstIndex-1].getOwnerModule() == ownerModule) { - firstIndex--; - } - int lastIndex = index+1; - while (lastIndex < entries.length && entries[lastIndex].getOwnerModule() == ownerModule) { - lastIndex++; - } - - OrderEntry[] subArray = new OrderEntry[lastIndex - firstIndex]; - System.arraycopy(entries, firstIndex, subArray, 0, lastIndex - firstIndex); - - return Arrays.asList(subArray); - } - public boolean isInProject() { return !isExcluded(); } @@ -241,15 +117,12 @@ public abstract class DirectoryInfoImpl extends DirectoryInfo { return module; } - @TestOnly - void assertConsistency() { - OrderEntry[] entries = getOrderEntries(); - for (int i=1; i<entries.length; i++) { - assert BY_OWNER_MODULE.compare(entries[i-1], entries[i]) <= 0; - } - } - public int getSourceRootTypeId() { return mySourceRootTypeId; } + + @NotNull + public VirtualFile getRoot() { + return myRoot; + } } |