Example usage for org.eclipse.jdt.internal.core JavaModelCache JavaModelCache

List of usage examples for org.eclipse.jdt.internal.core JavaModelCache JavaModelCache

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.core JavaModelCache JavaModelCache.

Prototype

public JavaModelCache() 

Source Link

Usage

From source file:org.eclipse.jdt.internal.core.JavaModelManager.java

License:Open Source License

public void startup() throws CoreException {
    try {//from   w  w w.j  a  v  a  2s .c  om
        configurePluginDebugOptions();

        // initialize Java model cache
        this.cache = new JavaModelCache();

        // request state folder creation (workaround 19885)
        JavaCore.getPlugin().getStateLocation();

        // Initialize eclipse preferences
        initializePreferences();

        // Listen to preference changes
        this.propertyListener = new IEclipsePreferences.IPreferenceChangeListener() {
            public void preferenceChange(PreferenceChangeEvent event) {
                JavaModelManager.this.optionsCache = null;
            }
        };
        InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID).addPreferenceChangeListener(this.propertyListener);

        // listen for encoding changes (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=255501 )
        this.resourcesPropertyListener = new IEclipsePreferences.IPreferenceChangeListener() {
            public void preferenceChange(PreferenceChangeEvent event) {
                if (ResourcesPlugin.PREF_ENCODING.equals(event.getKey())) {
                    JavaModelManager.this.optionsCache = null;
                }
            }
        };
        String resourcesPluginId = ResourcesPlugin.getPlugin().getBundle().getSymbolicName();
        InstanceScope.INSTANCE.getNode(resourcesPluginId)
                .addPreferenceChangeListener(this.resourcesPropertyListener);

        // Listen to content-type changes
        Platform.getContentTypeManager().addContentTypeChangeListener(this);

        // retrieve variable values
        long start = -1;
        if (VERBOSE)
            start = System.currentTimeMillis();
        loadVariablesAndContainers();
        if (VERBOSE)
            traceVariableAndContainers("Loaded", start); //$NON-NLS-1$

        // listen for resource changes
        this.deltaState.initializeRootsWithPreviousSession();
        final IWorkspace workspace = ResourcesPlugin.getWorkspace();
        workspace.addResourceChangeListener(this.deltaState,
                /* update spec in JavaCore#addPreProcessingResourceChangedListener(...) if adding more event types */
                IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.POST_BUILD
                        | IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_DELETE
                        | IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_REFRESH);

        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(Messages.savedState_jobName) {
            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.PLUGIN_ID,
                                    JavaModelManager.this);
                            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
                                JavaModelManager.this.deltaState
                                        .getDeltaProcessor().overridenEventType = IResourceChangeEvent.POST_CHANGE;
                                savedState.processResourceChangeEvents(JavaModelManager.this.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) {
        shutdown();
        throw e;
    }
}