From c6412348e4b96710b17d8e66c4e92859ed021856 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 20 Jun 2012 17:28:40 +0400 Subject: [PATCH] javadoc and external annotations roots moved from ModuleRootModel to a separate extension --- .../ui/configuration/AnnotationsEditor.java | 6 +- .../roots/ui/configuration/JavadocEditor.java | 6 +- .../ExternalAnnotationsManagerImpl.java | 4 +- .../lang/java/JavaDocumentationProvider.java | 2 +- .../impl/JavaModuleExternalPathsImpl.java | 163 ++++++++++++++++++ .../codeInsight/SuppressExternalTest.java | 7 +- .../roots/AnnotationOrderRootType.java | 8 +- .../roots/JavaModuleExternalPaths.java | 46 +++++ .../openapi/roots/JavadocOrderRootType.java | 2 +- .../openapi/roots/ModifiableRootModel.java | 4 + .../openapi/roots/ModuleRootModel.java | 9 + .../impl/ModuleSourceOrderEntryImpl.java | 4 +- .../openapi/roots/impl/RootModelImpl.java | 83 +-------- .../JpsModuleSourceOrderEntry.java | 4 +- resources/src/idea/RichPlatformPlugin.xml | 1 + 15 files changed, 246 insertions(+), 103 deletions(-) create mode 100644 java/java-impl/src/com/intellij/openapi/roots/impl/JavaModuleExternalPathsImpl.java create mode 100644 java/openapi/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/AnnotationsEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/AnnotationsEditor.java index e6dffa28d0fe..31692793c4ab 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/AnnotationsEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/AnnotationsEditor.java @@ -19,7 +19,7 @@ import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.project.ProjectBundle; -import com.intellij.openapi.roots.AnnotationOrderRootType; +import com.intellij.openapi.roots.JavaModuleExternalPaths; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.ui.components.JBLabel; @@ -64,7 +64,7 @@ public class AnnotationsEditor extends ModuleElementsEditor { final TableItem item = ((MyTableModel)myTable.getModel()).getTableItemAt(row); urls[row] = item.getUrl(); } - getModel().setRootUrls(AnnotationOrderRootType.getInstance(), urls); + getModel().getModuleExtension(JavaModuleExternalPaths.class).setExternalAnnotationUrls(urls); } public JComponent createComponentImpl() { @@ -120,7 +120,7 @@ public class AnnotationsEditor extends ModuleElementsEditor { protected DefaultTableModel createModel() { final MyTableModel tableModel = new MyTableModel(); - final String[] urls = getModel().getRootUrls(AnnotationOrderRootType.getInstance()); + final String[] urls = getModel().getModuleExtension(JavaModuleExternalPaths.class).getExternalAnnotationsUrls(); for (String javadocUrl : urls) { tableModel.addTableItem(new TableItem(javadocUrl)); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavadocEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavadocEditor.java index 211a71c90aa2..040d45269073 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavadocEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavadocEditor.java @@ -21,7 +21,7 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.ui.Util; -import com.intellij.openapi.roots.JavadocOrderRootType; +import com.intellij.openapi.roots.JavaModuleExternalPaths; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.ui.components.JBLabel; @@ -67,7 +67,7 @@ public class JavadocEditor extends ModuleElementsEditor { final TableItem item = ((MyTableModel)myTable.getModel()).getTableItemAt(row); urls[row] = item.getUrl(); } - getModel().setRootUrls(JavadocOrderRootType.getInstance(), urls); + getModel().getModuleExtension(JavaModuleExternalPaths.class).setJavadocUrls(urls); } public JComponent createComponentImpl() { @@ -139,7 +139,7 @@ public class JavadocEditor extends ModuleElementsEditor { protected DefaultTableModel createModel() { final MyTableModel tableModel = new MyTableModel(); - final String[] javadocUrls = getModel().getRootUrls(JavadocOrderRootType.getInstance()); + final String[] javadocUrls = getModel().getModuleExtension(JavaModuleExternalPaths.class).getJavadocUrls(); for (String javadocUrl : javadocUrls) { tableModel.addTableItem(new TableItem(javadocUrl)); } diff --git a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java index 8ab78f932376..a65c1d9704d7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java @@ -494,8 +494,8 @@ public class ExternalAnnotationsManagerImpl extends ExternalAnnotationsManager { } else if (entry instanceof ModuleSourceOrderEntry) { final ModifiableRootModel model = ModuleRootManager.getInstance(entry.getOwnerModule()).getModifiableModel(); - model.setRootUrls(AnnotationOrderRootType.getInstance(), ArrayUtil.mergeArrays( - model.getRootUrls(AnnotationOrderRootType.getInstance()), vFile.getUrl())); + final JavaModuleExternalPaths extension = model.getModuleExtension(JavaModuleExternalPaths.class); + extension.setExternalAnnotationUrls(ArrayUtil.mergeArrays(extension.getExternalAnnotationsUrls(), vFile.getUrl())); model.commit(); } else if (entry instanceof JdkOrderEntry) { diff --git a/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java b/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java index 82a7ba60c500..9579238128ab 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java @@ -666,7 +666,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext } } if (module != null) { - String[] javadocPaths = ModuleRootManager.getInstance(module).getRootUrls(JavadocOrderRootType.getInstance()); + String[] javadocPaths = JavaModuleExternalPaths.getInstance(module).getJavadocUrls(); final List httpRoots = PlatformDocumentationUtil.getHttpRoots(javadocPaths, relPath); // if found nothing and the file is from library classes, fall back to order entries if (httpRoots != null || !fileIndex.isInLibraryClasses(virtualFile)) { diff --git a/java/java-impl/src/com/intellij/openapi/roots/impl/JavaModuleExternalPathsImpl.java b/java/java-impl/src/com/intellij/openapi/roots/impl/JavaModuleExternalPathsImpl.java new file mode 100644 index 000000000000..a71b8e93a521 --- /dev/null +++ b/java/java-impl/src/com/intellij/openapi/roots/impl/JavaModuleExternalPathsImpl.java @@ -0,0 +1,163 @@ +/* + * Copyright 2000-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.roots.impl; + +import com.intellij.openapi.roots.*; +import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.pointers.VirtualFilePointerContainer; +import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager; +import com.intellij.util.ArrayUtil; +import org.jdom.Element; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author nik + */ +public class JavaModuleExternalPathsImpl extends JavaModuleExternalPaths { + @NonNls private static final String ROOT_ELEMENT = "root"; + private final Map myOrderRootPointerContainers = new HashMap(); + private JavaModuleExternalPathsImpl mySource; + + public JavaModuleExternalPathsImpl() { + } + + public JavaModuleExternalPathsImpl(JavaModuleExternalPathsImpl source) { + mySource = source; + copyContainersFrom(source); + } + + @Override + public ModuleExtension getModifiableModel(boolean writable) { + return new JavaModuleExternalPathsImpl(this); + } + + @Override + public void commit() { + mySource.copyContainersFrom(this); + } + + @NotNull + @Override + public String[] getJavadocUrls() { + final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(JavadocOrderRootType.getInstance()); + return container != null ? container.getUrls() : ArrayUtil.EMPTY_STRING_ARRAY; + } + + @NotNull + @Override + public VirtualFile[] getExternalAnnotationsRoots() { + final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(AnnotationOrderRootType.getInstance()); + return container != null ? container.getFiles() : VirtualFile.EMPTY_ARRAY; + } + + @NotNull + @Override + public String[] getExternalAnnotationsUrls() { + final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(AnnotationOrderRootType.getInstance()); + return container != null ? container.getUrls() : ArrayUtil.EMPTY_STRING_ARRAY; + } + + @Override + public void setJavadocUrls(@NotNull String[] urls) { + setRootUrls(JavadocOrderRootType.getInstance(), urls); + } + + @Override + public void setExternalAnnotationUrls(@NotNull String[] urls) { + setRootUrls(AnnotationOrderRootType.getInstance(), urls); + } + + private void setRootUrls(final OrderRootType orderRootType, @NotNull final String[] urls) { + VirtualFilePointerContainer container = myOrderRootPointerContainers.get(orderRootType); + if (container == null) { + container = VirtualFilePointerManager.getInstance().createContainer(this, null); + myOrderRootPointerContainers.put(orderRootType, container); + } + container.clear(); + for (final String url : urls) { + container.add(url); + } + } + + @Override + public void readExternal(Element element) throws InvalidDataException { + for (PersistentOrderRootType orderRootType : OrderRootType.getAllPersistentTypes()) { + String paths = orderRootType.getModulePathsName(); + if (paths != null) { + final Element pathsElement = element.getChild(paths); + if (pathsElement != null) { + VirtualFilePointerContainer container = VirtualFilePointerManager.getInstance().createContainer(this, null); + myOrderRootPointerContainers.put(orderRootType, container); + container.readExternal(pathsElement, ROOT_ELEMENT); + } + } + } + } + + @Override + public void writeExternal(Element element) throws WriteExternalException { + for (OrderRootType orderRootType : myOrderRootPointerContainers.keySet()) { + VirtualFilePointerContainer container = myOrderRootPointerContainers.get(orderRootType); + if (container != null && container.size() > 0) { + final Element javaDocPaths = new Element(((PersistentOrderRootType)orderRootType).getModulePathsName()); + container.writeExternal(javaDocPaths, ROOT_ELEMENT); + element.addContent(javaDocPaths); + } + } + } + + private void copyContainersFrom(@NotNull JavaModuleExternalPathsImpl paths) { + myOrderRootPointerContainers.clear(); + for (PersistentOrderRootType orderRootType : OrderRootType.getAllPersistentTypes()) { + final VirtualFilePointerContainer otherContainer = paths.myOrderRootPointerContainers.get(orderRootType); + if (otherContainer != null) { + myOrderRootPointerContainers.put(orderRootType, otherContainer.clone(this, null)); + } + } + } + + @Override + public boolean isChanged() { + if (myOrderRootPointerContainers.size() != mySource.myOrderRootPointerContainers.size()) return true; + for (final OrderRootType type : myOrderRootPointerContainers.keySet()) { + final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(type); + final VirtualFilePointerContainer otherContainer = mySource.myOrderRootPointerContainers.get(type); + if (container == null || otherContainer == null) { + if (container != otherContainer) return true; + } + else { + final String[] urls = container.getUrls(); + final String[] otherUrls = otherContainer.getUrls(); + if (urls.length != otherUrls.length) return true; + for (int i = 0; i < urls.length; i++) { + if (!Comparing.strEqual(urls[i], otherUrls[i])) return true; + } + } + } + return false; + } + + @Override + public void dispose() { + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/SuppressExternalTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/SuppressExternalTest.java index a02a70ba3af8..b4bcce101ea3 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/SuppressExternalTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/SuppressExternalTest.java @@ -9,11 +9,11 @@ import com.intellij.codeInspection.sillyAssignment.SillyAssignmentInspection; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.module.Module; -import com.intellij.openapi.roots.AnnotationOrderRootType; +import com.intellij.openapi.roots.JavaModuleExternalPaths; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.JavaPsiFacade; import com.intellij.testFramework.IdeaTestCase; @@ -61,7 +61,8 @@ public class SuppressExternalTest extends UsefulTestCase { public void run() { final Module module = myFixture.getModule(); final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel(); - model.setRootUrls(AnnotationOrderRootType.getInstance(), new String[]{VfsUtil.pathToUrl(myFixture.getTempDirPath() + "/content/anno")}); + final String url = VfsUtilCore.pathToUrl(myFixture.getTempDirPath() + "/content/anno"); + model.getModuleExtension(JavaModuleExternalPaths.class).setExternalAnnotationUrls(new String[]{url}); model.commit(); } }); diff --git a/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java b/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java index c94b66320eb4..ef47b6c79831 100644 --- a/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java +++ b/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java @@ -15,7 +15,7 @@ */ package com.intellij.openapi.roots; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; @@ -63,12 +63,12 @@ public class AnnotationOrderRootType extends PersistentOrderRootType { @Override public List visitModuleSourceOrderEntry(final ModuleSourceOrderEntry orderEntry, final List value) { - Collections.addAll(value, orderEntry.getRootModel().getRootPaths(getInstance())); + Collections.addAll(value, orderEntry.getRootModel().getModuleExtension(JavaModuleExternalPaths.class).getExternalAnnotationsRoots()); return value; } }; entry.accept(policy, result); - return VfsUtil.toVirtualFileArray(result); + return VfsUtilCore.toVirtualFileArray(result); } @NotNull @@ -90,7 +90,7 @@ public class AnnotationOrderRootType extends PersistentOrderRootType { @Override public List visitModuleSourceOrderEntry(final ModuleSourceOrderEntry orderEntry, final List value) { - Collections.addAll(value, orderEntry.getRootModel().getRootUrls(getInstance())); + Collections.addAll(value, orderEntry.getRootModel().getModuleExtension(JavaModuleExternalPaths.class).getExternalAnnotationsUrls()); return value; } }; diff --git a/java/openapi/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java b/java/openapi/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java new file mode 100644 index 000000000000..ee4cb9895f52 --- /dev/null +++ b/java/openapi/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java @@ -0,0 +1,46 @@ +/* + * Copyright 2000-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.roots; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; + +/** + * @author nik + */ +public abstract class JavaModuleExternalPaths extends ModuleExtension { + + public static JavaModuleExternalPaths getInstance(Module module) { + return ModuleRootManager.getInstance(module).getModuleExtension(JavaModuleExternalPaths.class); + } + + @NotNull + public abstract VirtualFile[] getExternalAnnotationsRoots(); + + @NotNull + public abstract String[] getExternalAnnotationsUrls(); + + public abstract void setExternalAnnotationUrls(@NotNull String[] urls); + + + @NotNull + public abstract String[] getJavadocUrls(); + + public abstract void setJavadocUrls(@NotNull String[] urls); + + +} diff --git a/java/openapi/src/com/intellij/openapi/roots/JavadocOrderRootType.java b/java/openapi/src/com/intellij/openapi/roots/JavadocOrderRootType.java index 1444590ea58e..47d43cf4e1ed 100644 --- a/java/openapi/src/com/intellij/openapi/roots/JavadocOrderRootType.java +++ b/java/openapi/src/com/intellij/openapi/roots/JavadocOrderRootType.java @@ -51,7 +51,7 @@ public class JavadocOrderRootType extends PersistentOrderRootType { @Override public List visitModuleSourceOrderEntry(final ModuleSourceOrderEntry orderEntry, final List value) { - Collections.addAll(value, orderEntry.getRootModel().getRootUrls(getInstance())); + Collections.addAll(value, orderEntry.getRootModel().getModuleExtension(JavaModuleExternalPaths.class).getJavadocUrls()); return value; } }; diff --git a/platform/projectModel-api/src/com/intellij/openapi/roots/ModifiableRootModel.java b/platform/projectModel-api/src/com/intellij/openapi/roots/ModifiableRootModel.java index b0bc260e4894..f7eb6e0ee4bc 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/roots/ModifiableRootModel.java +++ b/platform/projectModel-api/src/com/intellij/openapi/roots/ModifiableRootModel.java @@ -179,6 +179,10 @@ public interface ModifiableRootModel extends ModuleRootModel { boolean isWritable(); + /** + * @deprecated use {@code JavaModuleExternalPaths} extension instead + */ + @Deprecated void setRootUrls(OrderRootType orderRootType, String[] urls); void replaceEntryOfType(Class entryClass, T entry); diff --git a/platform/projectModel-api/src/com/intellij/openapi/roots/ModuleRootModel.java b/platform/projectModel-api/src/com/intellij/openapi/roots/ModuleRootModel.java index 54d60ff98abe..b7b6a69ab44f 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/roots/ModuleRootModel.java +++ b/platform/projectModel-api/src/com/intellij/openapi/roots/ModuleRootModel.java @@ -186,7 +186,16 @@ public interface ModuleRootModel { */ @NotNull String[] getDependencyModuleNames(); + /** + * @deprecated use {@code JavaModuleExternalPaths} instead + */ + @Deprecated @NotNull VirtualFile[] getRootPaths(OrderRootType rootType); + + /** + * @deprecated use {@code JavaModuleExternalPaths} instead + */ + @Deprecated @NotNull String[] getRootUrls(OrderRootType rootType); T getModuleExtension(Class klass); diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleSourceOrderEntryImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleSourceOrderEntryImpl.java index fabff756a5be..79dc02243e0a 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleSourceOrderEntryImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleSourceOrderEntryImpl.java @@ -78,7 +78,7 @@ public class ModuleSourceOrderEntryImpl extends OrderEntryBaseImpl implements Mo if (OrderRootType.SOURCES.equals(type)) { return getRootModel().getSourceRoots(); } - return getRootModel().getRootPaths(type); + return VirtualFile.EMPTY_ARRAY; } @NotNull @@ -95,7 +95,7 @@ public class ModuleSourceOrderEntryImpl extends OrderEntryBaseImpl implements Mo } return ArrayUtil.toStringArray(result); } - return getRootModel().getRootUrls(type); + return ArrayUtil.EMPTY_STRING_ARRAY; } public OrderEntry cloneEntry(RootModelImpl rootModel, diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java index a7fa8f32fc05..de9dde1b2eae 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java @@ -30,12 +30,10 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.pointers.VirtualFilePointerContainer; import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import org.jdom.Element; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -60,12 +58,8 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel private boolean myDisposed = false; private final Set myExtensions = new TreeSet(); - private final Map myOrderRootPointerContainers = - new HashMap(); - private final RootConfigurationAccessor myConfigurationAccessor; - @NonNls private static final String ROOT_ELEMENT = "root"; private final ProjectRootManagerImpl myProjectRootManager; // have to register all child disposables using this fake object since all clients just call ModifiableModel.dispose() private final Disposable myDisposable = Disposer.newDisposable(); @@ -130,18 +124,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel myWritable = true; - for (PersistentOrderRootType orderRootType : OrderRootType.getAllPersistentTypes()) { - String paths = orderRootType.getModulePathsName(); - if (paths != null) { - final Element pathsElement = element.getChild(paths); - if (pathsElement != null) { - VirtualFilePointerContainer container = myFilePointerManager.createContainer(myDisposable, null); - myOrderRootPointerContainers.put(orderRootType, container); - container.readExternal(pathsElement, ROOT_ELEMENT); - } - } - } - RootModelImpl originalRootModel = moduleRootManager.getRootModel(); for (ModuleExtension extension : originalRootModel.myExtensions) { ModuleExtension model = extension.getModifiableModel(false); @@ -186,7 +168,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel } setOrderEntriesFrom(rootModel); - copyContainersFrom(rootModel); for (ModuleExtension extension : rootModel.myExtensions) { ModuleExtension model = extension.getModifiableModel(writable); @@ -195,16 +176,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel } } - private void copyContainersFrom(@NotNull RootModelImpl rootModel) { - myOrderRootPointerContainers.clear(); - for (PersistentOrderRootType orderRootType : OrderRootType.getAllPersistentTypes()) { - final VirtualFilePointerContainer otherContainer = rootModel.getOrderRootContainer(orderRootType); - if (otherContainer != null) { - myOrderRootPointerContainers.put(orderRootType, otherContainer.clone(myDisposable, null)); - } - } - } - private void setOrderEntriesFrom(@NotNull RootModelImpl rootModel) { myOrderEntries.clear(); for (OrderEntry orderEntry : rootModel.myOrderEntries) { @@ -214,11 +185,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel } } - @Nullable - private VirtualFilePointerContainer getOrderRootContainer(PersistentOrderRootType orderRootType) { - return myOrderRootPointerContainers.get(orderRootType); - } - @Override @NotNull public OrderEntry[] getOrderEntries() { @@ -371,10 +337,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel } } - if (areOrderRootPointerContainersChanged()) { - getSourceModel().copyContainersFrom(this); - } - for (ModuleExtension extension : myExtensions) { if (extension.isChanged()) { extension.commit(); @@ -439,15 +401,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel ((WritableOrderEntry)orderEntry).writeExternal(element); } } - - for (PersistentOrderRootType orderRootType : myOrderRootPointerContainers.keySet()) { - VirtualFilePointerContainer container = myOrderRootPointerContainers.get(orderRootType); - if (container != null && container.size() > 0) { - final Element javaDocPaths = new Element(orderRootType.getModulePathsName()); - container.writeExternal(javaDocPaths, ROOT_ELEMENT); - element.addContent(javaDocPaths); - } - } } @Override @@ -574,27 +527,7 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel if (moduleExtension.isChanged()) return true; } - return areOrderEntriesChanged() || areContentEntriesChanged() || areOrderRootPointerContainersChanged(); - } - - private boolean areOrderRootPointerContainersChanged() { - if (myOrderRootPointerContainers.size() != getSourceModel().myOrderRootPointerContainers.size()) return true; - for (final OrderRootType type : myOrderRootPointerContainers.keySet()) { - final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(type); - final VirtualFilePointerContainer otherContainer = getSourceModel().myOrderRootPointerContainers.get(type); - if (container == null || otherContainer == null) { - if (container != otherContainer) return true; - } - else { - final String[] urls = container.getUrls(); - final String[] otherUrls = otherContainer.getUrls(); - if (urls.length != otherUrls.length) return true; - for (int i = 0; i < urls.length; i++) { - if (!Comparing.strEqual(urls[i], otherUrls[i])) return true; - } - } - } - return false; + return areOrderEntriesChanged() || areContentEntriesChanged(); } private boolean areContentEntriesChanged() { @@ -793,8 +726,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel @Override @NotNull public VirtualFile[] getRootPaths(final OrderRootType rootType) { - final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(rootType); - if (container != null) return container.getFiles(); for (ModuleExtension extension : myExtensions) { final VirtualFile[] files = extension.getRootPaths(rootType); if (files != null) return files; @@ -805,8 +736,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel @Override @NotNull public String[] getRootUrls(final OrderRootType rootType) { - final VirtualFilePointerContainer container = myOrderRootPointerContainers.get(rootType); - if (container != null) return container.getUrls(); for (ModuleExtension extension : myExtensions) { final String[] urls = extension.getRootUrls(rootType); if (urls != null) return urls; @@ -821,16 +750,6 @@ public class RootModelImpl extends RootModelBase implements ModifiableRootModel @Override public void setRootUrls(final OrderRootType orderRootType, @NotNull final String[] urls) { - assertWritable(); - VirtualFilePointerContainer container = myOrderRootPointerContainers.get(orderRootType); - if (container == null) { - container = myFilePointerManager.createContainer(myDisposable, null); - myOrderRootPointerContainers.put((PersistentOrderRootType)orderRootType, container); - } - container.clear(); - for (final String url : urls) { - container.add(url); - } } @Nullable diff --git a/platform/projectModel-impl/src/com/intellij/project/model/impl/module/dependencies/JpsModuleSourceOrderEntry.java b/platform/projectModel-impl/src/com/intellij/project/model/impl/module/dependencies/JpsModuleSourceOrderEntry.java index 27c28c86baee..71d0a51d9c2c 100644 --- a/platform/projectModel-impl/src/com/intellij/project/model/impl/module/dependencies/JpsModuleSourceOrderEntry.java +++ b/platform/projectModel-impl/src/com/intellij/project/model/impl/module/dependencies/JpsModuleSourceOrderEntry.java @@ -49,7 +49,7 @@ public class JpsModuleSourceOrderEntry extends JpsOrderEntry +