update DomFileIndex when the plugins change that contain DomFileDescription's
authorpeter <peter.gromov@jetbrains.com>
Sat, 28 Aug 2010 21:42:23 +0000 (22:42 +0100)
committerpeter <peter.gromov@jetbrains.com>
Sun, 29 Aug 2010 08:40:20 +0000 (09:40 +0100)
xml/dom-impl/src/com/intellij/util/xml/DomFileIndex.java
xml/dom-impl/src/com/intellij/util/xml/impl/DomApplicationComponent.java
xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java

index 8bfbb341970bf6738efc2f7c6f8ddbd7a54f49ac..d5b01c6a4835523f8740fe2870ff89a0f7e57cf8 100644 (file)
@@ -98,9 +98,13 @@ public class DomFileIndex extends ScalarIndexExtension<String>{
   }
 
   public int getVersion() {
-    return 0;
+    final DomApplicationComponent component = DomApplicationComponent.getInstance();
+    int result = 0;
+    for (DomFileDescription description : component.getAllFileDescriptions()) {
+      result += description.getVersion();
+      result += description.getRootTagName().hashCode(); // so that a plugin enabling/disabling could trigger the reindexing
+    }
+    return result;
   }
 
-  private static class RootTagReachedException extends RuntimeException{
-  }
 }
index fe624c3b66ee5a4d583cfea53234a2dd3343ed1d..0c9ed29003358e80f71c29d66313614f44bf65a9 100644 (file)
@@ -31,9 +31,12 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.lang.reflect.Type;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static com.intellij.util.containers.CollectionFactory.arrayList;
+
 /**
  * @author peter
  */
@@ -110,6 +113,15 @@ public class DomApplicationComponent {
     myTypeChooserManager.copyFrom(description.getTypeChooserManager());
   }
 
+  public synchronized List<DomFileDescription> getAllFileDescriptions() {
+    final List<DomFileDescription> result = arrayList();
+    for (Set<DomFileDescription> descriptions : myRootTagName2FileDescription.values()) {
+      result.addAll(descriptions);
+    }
+    result.addAll(myAcceptingOtherRootTagNamesDescriptions);
+    return result;
+  }
+
   @Nullable
   private synchronized DomFileDescription findFileDescription(Class rootElementClass) {
     for (Set<DomFileDescription> descriptions : myRootTagName2FileDescription.values()) {
index 95ebdcb3c8c11e7a163f9c09b6a722c430d9dca9..474e2d7b0a3e8538974839ffc0d6b07649e80334 100644 (file)
@@ -15,7 +15,6 @@
  */
 package com.intellij.util.xml;
 
-import com.intellij.openapi.Disposable;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.extensions.ExtensionPointName;
 import com.intellij.openapi.module.Module;
@@ -24,7 +23,6 @@ import com.intellij.util.NotNullFunction;
 import com.intellij.util.containers.ConcurrentHashMap;
 import com.intellij.util.containers.ConcurrentInstanceMap;
 import com.intellij.util.xml.highlighting.DomElementsAnnotator;
-import gnu.trove.THashSet;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -116,9 +114,13 @@ public class DomFileDescription<T> {
     return Collections.emptyList();
   }
 
-  @Deprecated
-  protected final void registerClassChooser(final Type aClass, final TypeChooser typeChooser, Disposable parentDisposable) {
-    registerTypeChooser(aClass, typeChooser);
+  /**
+   * @return some version. Override and change (e.g. <code>super.getVersion()+1</code>) when after some changes some files stopped being
+   * described by this description or vice versa, so that the
+   * {@link com.intellij.util.xml.DomService#getDomFileCandidates(Class, com.intellij.openapi.project.Project)} index is rebuilt correctly.
+   */
+  public int getVersion() {
+    return myRootTagName.hashCode();
   }
 
   protected final void registerTypeChooser(final Type aClass, final TypeChooser typeChooser) {
@@ -221,26 +223,6 @@ public class DomFileDescription<T> {
     return Collections.emptySet();
   }
 
-  /**
-   * @deprecated not used
-   */
-  @NotNull
-  public Set<Class<? extends DomElement>> getDomModelDependencyItems() {
-    return Collections.emptySet();
-  }
-
-  /**
-   * @deprecated not used
-   */
-  @NotNull
-  public Set<XmlFile> getDomModelDependentFiles(@NotNull DomFileElement changedRoot) {
-    return Collections.emptySet();
-  }
-
-  protected static Set<Class<? extends DomElement>> convertToSet(Class<? extends DomElement> classes) {
-    return new THashSet<Class<? extends DomElement>>(Arrays.asList(classes));
-  }
-
   /**
    * @param reference DOM reference
    * @return element, whose all children will be searched for declaration