Fix for Bug 331866 - [ui] Show when callin marker creator is waiting for java indexes
diff --git a/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/internal/ui/callinmarkers/CallinMarkerCreator2.java b/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/internal/ui/callinmarkers/CallinMarkerCreator2.java
index c41fcb8..27d2309 100644
--- a/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/internal/ui/callinmarkers/CallinMarkerCreator2.java
+++ b/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/internal/ui/callinmarkers/CallinMarkerCreator2.java
@@ -1,7 +1,7 @@
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
- * Copyright 2003, 2008 Fraunhofer Gesellschaft, Munich, Germany,
+ * Copyright 2003, 2010 Fraunhofer Gesellschaft, Munich, Germany,
* for its Fraunhofer Institute for Computer Architecture and Software
* Technology (FIRST), Berlin, Germany and Technical University Berlin,
* Germany.
@@ -52,9 +52,11 @@
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.IJavaSearchScope;
+import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.core.search.SearchMatch;
import org.eclipse.jdt.core.search.SearchPattern;
import org.eclipse.jdt.core.search.SearchRequestor;
+import org.eclipse.jdt.core.search.TypeNameRequestor;
import org.eclipse.jdt.internal.ui.javaeditor.IClassFileEditorInput;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.preference.IPreferenceStore;
@@ -102,6 +104,7 @@
private Set<IClassFile> m_cachedMarkersForJavaElements = new HashSet<IClassFile>();
private boolean m_enabled = false;
protected AnnotationHelper annotationHelper;
+ private boolean isInitialized = false;
/**
* Typical usage:
@@ -793,7 +796,47 @@
}
}
- protected void schedule(final CallinMarkerJob job, IStatusLineManager statusLine)
+ /** chained scheduling:<ul>
+ * <li> first wait until the indexes are ready (only on first invocation),
+ * <li> only then schedule our job.
+ */
+ protected synchronized void schedule(final CallinMarkerJob job, final IStatusLineManager statusLine)
+ {
+ if (this.isInitialized) {
+ doSchedule(job, statusLine);
+ return;
+ } else {
+ this.isInitialized = true;
+ Job waitForIndex = new Job(OTDTUIPlugin.getResourceString("CallinMarkerCreator2.wait_for_index_message")) { //$NON-NLS-1$
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ // dummy query for waiting until the indexes are ready (see AbstractJavaModelTest)
+ new SearchEngine().searchAllTypeNames(
+ null,
+ SearchPattern.R_EXACT_MATCH,
+ "!@$#!@".toCharArray(), //$NON-NLS-1$
+ SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE,
+ IJavaSearchConstants.CLASS,
+ SearchEngine.createWorkspaceScope(),
+ new TypeNameRequestor() {
+ public void acceptType(int modifiers,char[] packageName,char[] simpleTypeName,char[][] enclosingTypeNames,String path) {}
+ },
+ IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
+ null);
+ } catch (CoreException e) {
+ } finally {
+ // chaining:
+ doSchedule(job, statusLine);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ waitForIndex.setPriority(Job.DECORATE);
+ waitForIndex.schedule(100);
+ }
+ }
+ protected void doSchedule(final CallinMarkerJob job, IStatusLineManager statusLine)
{
job.addJobChangeListener(new JobListener(statusLine) {
protected void jobFinished(int status) {
diff --git a/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTDTUIPlugin.java b/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTDTUIPlugin.java
index a0f1414..fb57345 100644
--- a/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTDTUIPlugin.java
+++ b/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTDTUIPlugin.java
@@ -23,8 +23,6 @@
import java.util.MissingResourceException;
import java.util.ResourceBundle;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
diff --git a/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTPluginResources.properties b/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTPluginResources.properties
index 0e1a817..2844d19 100644
--- a/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTPluginResources.properties
+++ b/plugins/org.eclipse.objectteams.otdt.ui/src/org/eclipse/objectteams/otdt/ui/OTPluginResources.properties
@@ -62,6 +62,7 @@
CallinMarkerCreator2.search_failed_message=Searching for bound base methods failed -- no markers will be shown.
CallinMarkerCreator2.search_canceled_message=Searching for bound base methods canceled -- no markers will be shown.
CallinMarkerCreator2.line_number_error_message=Cannot compute line number for callin marker
+CallinMarkerCreator2.wait_for_index_message=OTDT Waiting for Java Indexes
#Team activation tab:
TeamConfig.tab_title=Team Activation