3m9 compatible;
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / core / JavaCore.java
index a191779..2f93f00 100644 (file)
@@ -26,6 +26,7 @@ import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.ISavedState;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.IWorkspaceRunnable;
@@ -34,8 +35,13 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import net.sourceforge.phpdt.internal.core.util.Util;
+import org.osgi.framework.BundleContext;
 
 public class JavaCore {
 
@@ -3613,7 +3619,7 @@ public static void setOptions(Hashtable newOptions) {
 //
 //             // retrieve variable values
 //             JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new JavaModelManager.PluginPreferencesListener());
-////   TODO khartlage temp-del
+////   TODO : jsurfer temp-del
 ////           manager.loadVariablesAndContainers();
 //
 //             IWorkspace workspace = ResourcesPlugin.getWorkspace();
@@ -3778,4 +3784,93 @@ public static void setOptions(Hashtable newOptions) {
 //             }
 //     }
 //}
+/* (non-Javadoc)
+ * Startup the JavaCore plug-in.
+ * <p>
+ * Registers the JavaModelManager as a resource changed listener and save participant.
+ * Starts the background indexing, and restore saved classpath variable values.
+ * <p>
+ * @throws Exception
+ * @see org.eclipse.core.runtime.Plugin#start(BundleContext)
+ */
+public static void start(final Plugin plugin, BundleContext context) throws Exception {
+//     super.start(context);
+       
+       final JavaModelManager manager = JavaModelManager.getJavaModelManager();
+       try {
+               manager.configurePluginDebugOptions();
+
+               // request state folder creation (workaround 19885)
+               JavaCore.getPlugin().getStateLocation();
+
+               // retrieve variable values
+               JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new JavaModelManager.PluginPreferencesListener());
+//             manager.loadVariablesAndContainers();
+
+               final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+               workspace.addResourceChangeListener(
+                       manager.deltaState,
+                       IResourceChangeEvent.PRE_BUILD
+                               | IResourceChangeEvent.POST_BUILD
+                               | IResourceChangeEvent.POST_CHANGE
+                               | IResourceChangeEvent.PRE_DELETE
+                               | IResourceChangeEvent.PRE_CLOSE);
+
+//             startIndexing();
+               
+               // process deltas since last activated in indexer thread so that indexes are up-to-date.
+               // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38658
+               Job processSavedState = new Job(Util.bind("savedState.jobName")) { //$NON-NLS-1$
+                       protected IStatus run(IProgressMonitor monitor) {
+                               try {
+                                       // add save participant and process delta atomically
+                                       // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=59937
+                                       workspace.run(
+                                               new IWorkspaceRunnable() {
+                                                       public void run(IProgressMonitor progress) throws CoreException {
+//                                                             ISavedState savedState = workspace.addSaveParticipant(JavaCore.this, manager);
+                                                               ISavedState savedState = workspace.addSaveParticipant(plugin, manager);
+                                                               if (savedState != null) {
+                                                                       // the event type coming from the saved state is always POST_AUTO_BUILD
+                                                                       // force it to be POST_CHANGE so that the delta processor can handle it
+                                                                       manager.deltaState.getDeltaProcessor().overridenEventType = IResourceChangeEvent.POST_CHANGE;
+                                                                       savedState.processResourceChangeEvents(manager.deltaState);
+                                                               }
+                                                       }
+                                               },
+                                               monitor);
+                               } catch (CoreException e) {
+                                       return e.getStatus();
+                               }
+                               return Status.OK_STATUS;
+                       }
+               };
+               processSavedState.setSystem(true);
+               processSavedState.setPriority(Job.SHORT); // process asap
+               processSavedState.schedule();
+       } catch (RuntimeException e) {
+               manager.shutdown();
+               throw e;
+       }
+}
+/* (non-Javadoc)
+ * Shutdown the JavaCore plug-in.
+ * <p>
+ * De-registers the JavaModelManager as a resource changed listener and save participant.
+ * <p>
+ * @see org.eclipse.core.runtime.Plugin#stop(BundleContext)
+ */
+public static void stop(Plugin plugin, BundleContext context) throws Exception {
+       try {
+               plugin.savePluginPreferences();
+               IWorkspace workspace = ResourcesPlugin.getWorkspace();
+               workspace.removeResourceChangeListener(JavaModelManager.getJavaModelManager().deltaState);
+               workspace.removeSaveParticipant(plugin);
+
+               JavaModelManager.getJavaModelManager().shutdown();
+       } finally {
+               // ensure we call super.stop as the last thing
+//             super.stop(context);
+       }
+}
 }
\ No newline at end of file