Bug 509612 - Address slowness in JarPackageFragmentRoot.computeChildren
Add indexer support for indexing the JDK version for each .jar file
in the index.
Change-Id: I10d616bf8ce8359d6e71fe2508c813006e70c3ec
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java
index 2380780..768ce4b 100644
--- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java
+++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/indexer/Indexer.java
@@ -762,6 +762,7 @@
+ resourceFile.getLocation().getString() + " " + resourceFile.address); //$NON-NLS-1$
}
converter.addType(binaryType, fieldDescriptor, subMonitor.split(45));
+ resourceFile.setJdkLevel(binaryType.getVersion());
indexed = true;
}
} finally {
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/JavaIndex.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/JavaIndex.java
index 19d4eeb..cbcc001 100644
--- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/JavaIndex.java
+++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/JavaIndex.java
@@ -34,9 +34,9 @@
public class JavaIndex {
// Version constants
- static final int CURRENT_VERSION = Nd.version(1, 39);
- static final int MAX_SUPPORTED_VERSION = Nd.version(1, 39);
- static final int MIN_SUPPORTED_VERSION = Nd.version(1, 39);
+ static final int CURRENT_VERSION = Nd.version(1, 40);
+ static final int MAX_SUPPORTED_VERSION = Nd.version(1, 40);
+ static final int MIN_SUPPORTED_VERSION = Nd.version(1, 40);
// Fields for the search header
public static final FieldSearchIndex<NdResourceFile> FILES;
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/NdResourceFile.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/NdResourceFile.java
index 358fcf8..e18ae26 100644
--- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/NdResourceFile.java
+++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/nd/java/NdResourceFile.java
@@ -42,6 +42,7 @@
public static final FieldLong HASHCODE_LAST_SCANNED;
public static final FieldOneToMany<NdWorkspaceLocation> WORKSPACE_MAPPINGS;
public static final FieldString JAVA_ROOT;
+ public static final FieldLong JDK_LEVEL;
@SuppressWarnings("hiding")
public static final StructDef<NdResourceFile> type;
@@ -56,9 +57,12 @@
HASHCODE_LAST_SCANNED = type.addLong();
WORKSPACE_MAPPINGS = FieldOneToMany.create(type, NdWorkspaceLocation.RESOURCE);
JAVA_ROOT = type.addString();
+ JDK_LEVEL = type.addLong();
type.done();
}
+ private long jdkLevel;
+
public NdResourceFile(Nd dom, long address) {
super(dom, address);
}
@@ -67,6 +71,19 @@
super(nd, null);
}
+ public long getJdkLevel() {
+ if (this.jdkLevel == 0) {
+ this.jdkLevel = JDK_LEVEL.get(getNd(), this.address);
+ }
+ return this.jdkLevel;
+ }
+
+ public void setJdkLevel(long jdkLevel) {
+ if (getJdkLevel() != jdkLevel) {
+ JDK_LEVEL.put(getNd(), this.address, jdkLevel);
+ }
+ }
+
public List<NdTreeNode> getChildren() {
return CHILDREN.asList(this.getNd(), this.address);
}