* indexing fixes
diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java
index 93e9b07..40d1dff 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java
@@ -2191,7 +2191,7 @@
fragment.getPath(),
new Long(newTimeStamp));
// index new library
- ProjectIndexerManager.indexLibrary(
+ ProjectIndexerManager.indexProjectFragment(
scriptProject, fragment.getPath());
if (fragment instanceof Openable) {
this.elementAdded((Openable) fragment,
@@ -2203,7 +2203,7 @@
if (newTimeStamp == 0) {
this.state.getCustomTimeStamps().remove(
fragment.getPath());
- ProjectIndexerManager.removeLibrary(
+ ProjectIndexerManager.removeProjectFragment(
scriptProject, fragment.getPath());
if (fragment instanceof Openable) {
this.elementRemoved((Openable) fragment,
@@ -2215,7 +2215,7 @@
fragment.getPath(),
new Long(newTimeStamp));
// index new library
- ProjectIndexerManager.indexLibrary(
+ ProjectIndexerManager.indexProjectFragment(
scriptProject, fragment.getPath());
if (fragment instanceof Openable) {
this.contentChanged((Openable) fragment);
diff --git a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java
index 3394f5e..1d018eb 100644
--- a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java
+++ b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java
@@ -35,6 +35,7 @@
import org.eclipse.dltk.core.IProjectFragment;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.ISourceElementParser;
+import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.core.environment.IFileHandle;
import org.eclipse.dltk.core.search.BasicSearchEngine;
import org.eclipse.dltk.core.search.IDLTKSearchScope;
@@ -42,6 +43,7 @@
import org.eclipse.dltk.core.search.index.Index;
import org.eclipse.dltk.core.search.index.MixinIndex;
import org.eclipse.dltk.internal.core.Model;
+import org.eclipse.dltk.internal.core.ModelManager;
import org.eclipse.dltk.internal.core.ScriptProject;
import org.eclipse.dltk.internal.core.search.PatternSearchJob;
import org.eclipse.dltk.internal.core.search.ProjectIndexerManager;
@@ -317,7 +319,7 @@
// should only be reachable for query jobs
// IF you put an index in the cache, then AddArchiveFileToIndex
// fails because it thinks there is nothing to do
- if (!createIfMissing && !mixin) {
+ if (!createIfMissing) {
this.rebuildIndex(indexLocation, containerPath);
return null;
}
@@ -524,30 +526,35 @@
return;
}
- Object target = Model.getTarget(workspace.getRoot(), containerPath,
- true);
+ String cp = containerPath.toString();
+ if (cp.startsWith(SPECIAL_MIXIN)) {
+ cp = cp.substring(SPECIAL_MIXIN.length());
+ }
+ Path pathCP = new Path(cp);
+
+ Object target = Model.getTarget(workspace.getRoot(), pathCP, true);
// Try to search for specified container path using model
- // if (target == null || target instanceof IFileHandle) {
- // try {
- // IScriptProject[] scriptProjects = ModelManager
- // .getModelManager().getModel().getScriptProjects();
- // for (IScriptProject project : scriptProjects) {
- // IProjectFragment[] fragments = project
- // .getProjectFragments();
- // for (IProjectFragment fragment : fragments) {
- // if (fragment.getPath().equals(containerPath)) {
- // target = fragment;
- // break;
- // }
- // }
- // if (target != null) {
- // break;
- // }
- // }
- // } catch (ModelException e) {
- // DLTKCore.error("Failed to obtain list of DLTK projects", e);
- // }
- // }
+ if (target == null || target instanceof IFileHandle) {
+ try {
+ IScriptProject[] scriptProjects = ModelManager
+ .getModelManager().getModel().getScriptProjects();
+ for (IScriptProject project : scriptProjects) {
+ IProjectFragment[] fragments = project
+ .getProjectFragments();
+ for (IProjectFragment fragment : fragments) {
+ if (fragment.getPath().equals(pathCP)) {
+ target = fragment;
+ break;
+ }
+ }
+ if (target != null) {
+ break;
+ }
+ }
+ } catch (ModelException e) {
+ DLTKCore.error("Failed to obtain list of DLTK projects", e);
+ }
+ }
if (target == null) {
return;
}
@@ -567,8 +574,7 @@
}
} else if (target instanceof IProjectFragment) {
ProjectIndexerManager.indexProjectFragment(
- ((IProjectFragment) target).getScriptProject(),
- containerPath);
+ ((IProjectFragment) target).getScriptProject(), pathCP);
return;
} else if (target instanceof IFile) {
// request = new AddArchiveFileToIndex((IFile) target, this);
diff --git a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java
index d0abbf2..dcc5123 100644
--- a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java
+++ b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java
@@ -21,6 +21,7 @@
import org.eclipse.dltk.core.IProjectFragment;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.core.search.SearchEngine;
import org.eclipse.dltk.core.search.SearchParticipant;
import org.eclipse.dltk.core.search.index.Index;
@@ -79,8 +80,26 @@
}
public void indexProjectFragment(IScriptProject project, IPath path) {
- // TODO optimize
- requestIfNotWaiting(new ProjectRequest(this, project, true));
+ IProjectFragment fragmentToIndex = null;
+ try {
+ IProjectFragment[] fragments = project.getProjectFragments();
+ for (IProjectFragment fragment : fragments) {
+ if (fragment.getPath().equals(path)) {
+ fragmentToIndex = fragment;
+ break;
+ }
+ }
+ } catch (ModelException e) {
+ DLTKCore.error("Failed to index fragment:" + path.toString(), e);
+ }
+ if (fragmentToIndex == null || !fragmentToIndex.isExternal()
+ || fragmentToIndex.isBuiltin()) {
+ requestIfNotWaiting(new ProjectRequest(this, project, true));
+ return;
+ }
+ requestIfNotWaiting(new ExternalProjectFragmentRequest(this,
+ fragmentToIndex, DLTKLanguageManager
+ .getLanguageToolkit(project)));
}
public void indexSourceModule(ISourceModule module,