ArchiveProjectFragmentRequest support
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 f78751c..56ce780 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
@@ -55,9 +55,18 @@
 			final IProjectFragment fragment = project.findProjectFragment(path);
 			if (fragment != null) {
 				if (!path.segment(0).equals(IndexManager.SPECIAL_BUILTIN)) {
-					final IndexRequest request = new ExternalProjectFragmentRequest(
-							this, fragment,
-							DLTKLanguageManager.getLanguageToolkit(fragment));
+					final IndexRequest request;
+					if (fragment.isArchive()) {
+						request = new ArchiveProjectFragmentRequest(this,
+								fragment,
+								DLTKLanguageManager
+										.getLanguageToolkit(fragment));
+					} else {
+						request = new ExternalProjectFragmentRequest(this,
+								fragment,
+								DLTKLanguageManager
+										.getLanguageToolkit(fragment));
+					}
 					requestIfNotWaiting(request);
 				}
 			} else {
@@ -88,9 +97,17 @@
 			requestIfNotWaiting(new ProjectRequest(this, project));
 			return;
 		}
-		requestIfNotWaiting(new ExternalProjectFragmentRequest(this,
-				fragmentToIndex,
-				DLTKLanguageManager.getLanguageToolkit(project)));
+		final IndexRequest indexRequest;
+		if (fragmentToIndex.isArchive()) {
+			indexRequest = new ArchiveProjectFragmentRequest(this,
+					fragmentToIndex,
+					DLTKLanguageManager.getLanguageToolkit(project));
+		} else {
+			indexRequest = new ExternalProjectFragmentRequest(this,
+					fragmentToIndex,
+					DLTKLanguageManager.getLanguageToolkit(project));
+		}
+		requestIfNotWaiting(indexRequest);
 	}
 
 	public void indexSourceModule(ISourceModule module,