Example usage for org.eclipse.jdt.core ElementChangedEvent ElementChangedEvent

List of usage examples for org.eclipse.jdt.core ElementChangedEvent ElementChangedEvent

Introduction

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

Prototype

public ElementChangedEvent(IJavaElementDelta delta, int type) 

Source Link

Document

Creates an new element changed event (based on a IJavaElementDelta).

Usage

From source file:com.codenvy.ide.ext.java.server.internal.core.DeltaProcessor.java

License:Open Source License

private void notifyListeners(IJavaElementDelta deltaToNotify, int eventType,
        IElementChangedListener[] listeners, int[] listenerMask, int listenerCount) {
    final ElementChangedEvent extraEvent = new ElementChangedEvent(deltaToNotify, eventType);
    for (int i = 0; i < listenerCount; i++) {
        if ((listenerMask[i] & eventType) != 0) {
            final IElementChangedListener listener = listeners[i];
            long start = -1;
            if (VERBOSE) {
                System.out.print("Listener #" + (i + 1) + "=" + listener.toString());//$NON-NLS-1$//$NON-NLS-2$
                start = System.currentTimeMillis();
            }//from   w w  w.  j a v  a  2s  .  c  o  m
            // wrap callbacks with Safe runnable for subsequent listeners to be called when some are causing grief
            SafeRunner.run(new ISafeRunnable() {
                public void handleException(Throwable exception) {
                    Util.log(exception, "Exception occurred in listener of Java element change notification"); //$NON-NLS-1$
                }

                public void run() throws Exception {
                    PerformanceStats stats = null;
                    if (PERF) {
                        //                     stats = PerformanceStats.getStats(JavaModelManager.DELTA_LISTENER_PERF, listener);
                        //                     stats.startRun();
                    }
                    listener.elementChanged(extraEvent);
                    if (PERF) {
                        stats.endRun();
                    }
                }
            });
            if (VERBOSE) {
                System.out.println(" -> " + (System.currentTimeMillis() - start) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
            }
        }
    }
}

From source file:com.redhat.ceylon.eclipse.core.classpath.CeylonClasspathContainer.java

License:Apache License

void notifyUpdateClasspathEntries() {
    // Changes to resolved classpath are not announced by JDT Core
    // and so PackageExplorer does not properly refresh when we update
    // the classpath container.
    // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=154071
    DeltaProcessingState s = JavaModelManager.getJavaModelManager().deltaState;
    synchronized (s) {
        IElementChangedListener[] listeners = s.elementChangedListeners;
        for (int i = 0; i < listeners.length; i++) {
            if (listeners[i] instanceof PackageExplorerContentProvider) {
                JavaElementDelta delta = new JavaElementDelta(javaProject);
                delta.changed(IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED);
                listeners[i].elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
            }/*from  ww  w . j a  v a2  s .  co  m*/
        }
    }
    //I've disabled this because I don't really like having it, but
    //it does seem to help with the issue of archives appearing
    //empty in the package manager
    /*try {
      javaProject.getProject().refreshLocal(IResource.DEPTH_ONE, null);
    } 
    catch (CoreException e) {
      e.printStackTrace();
    }*/
}

From source file:com.redhat.ceylon.eclipse.core.classpath.CeylonProjectModulesContainer.java

License:Apache License

void notifyUpdateClasspathEntries() {
    // Changes to resolved classpath are not announced by JDT Core
    // and so PackageExplorer does not properly refresh when we update
    // the classpath container.
    // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=154071
    DeltaProcessingState s = JavaModelManager.getJavaModelManager().deltaState;
    synchronized (s) {
        IElementChangedListener[] listeners = s.elementChangedListeners;
        for (int i = 0; i < listeners.length; i++) {
            if (listeners[i] instanceof PackageExplorerContentProvider) {
                JavaElementDelta delta = new JavaElementDelta(javaProject);
                delta.changed(IJavaElementDelta.F_RESOLVED_CLASSPATH_CHANGED);
                listeners[i].elementChanged(new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
            }/*  w  w  w .  j av  a 2  s .c  o m*/
        }
    }
    //I've disabled this because I don't really like having it, but
    //it does seem to help with the issue of archives appearing
    //empty in the package manager
    /*try {
    javaProject.getProject().refreshLocal(IResource.DEPTH_ONE, null);
    } 
    catch (CoreException e) {
    e.printStackTrace();
    }*/
}

From source file:org.jboss.tools.ws.jaxrs.core.internal.metamodel.builder.JaxrsHttpMethodChangedListener.java

License:Open Source License

/**
 * Will attempt to create {@link JaxrsResourceMethod} when a new
 * {@link JaxrsHttpMethod} has been created, or will remove some existing
 * {@link JaxrsResourceMethod} when a {@link JaxrsHttpMethod} has been
 * removed (if relevant)./*from   w w w . java  2  s .c om*/
 * 
 * @param delta
 *            the JAX-RS changed that occurred and that should be processed,
 *            if relevant
 */
@Override
public void notifyElementChanged(final JaxrsElementDelta delta) {
    // FIXME: report this whole fix in a separate JIRA
    if (delta != null && delta.getElement().getElementKind() == EnumElementKind.HTTP_METHOD) {
        try {
            final JaxrsHttpMethod httpMethod = (JaxrsHttpMethod) delta.getElement();
            // ignore events on built-in HTTP Methods
            if (httpMethod.isBuiltIn()) {
                return;
            }
            final JaxrsMetamodel metamodel = (JaxrsMetamodel) delta.getElement().getMetamodel();
            final Set<IMethod> affectedMethods = getAffectedMethods(delta);
            final JavaElementDelta affectedMethodsDelta = new JavaElementDelta(metamodel.getJavaProject(), null,
                    IJavaElementDelta.CHANGED, 0);
            for (IMethod affectedMethod : affectedMethods) {
                final CompilationUnit ast = JdtUtils.parse(affectedMethod, new NullProgressMonitor());
                final JavaElementDelta affectedMethodDelta = new JavaElementDelta(affectedMethod, ast,
                        IJavaElementDelta.CHANGED, 0);
                final Annotation httpMethodAnnotation = JdtUtils.resolveAnnotation(affectedMethod, ast,
                        httpMethod.getJavaClassName());
                if (httpMethodAnnotation != null) {
                    affectedMethodDelta.addAffectedAnnotation(new JavaElementDelta(
                            httpMethodAnnotation.getJavaAnnotation(), ast, delta.getDeltaKind(), 0));
                    affectedMethodsDelta.addAffectedElementDelta(affectedMethodDelta);
                }
            }
            final JavaElementChangedBuildJob job = new JavaElementChangedBuildJob(
                    new ElementChangedEvent(affectedMethodsDelta, ElementChangedEvent.POST_CHANGE));
            final IProject project = metamodel.getProject();
            job.setRule(project.getWorkspace().getRuleFactory().modifyRule(project));
            job.schedule();
        } catch (CoreException e) {
            Logger.error("Failed to process change after HTTP Method addition/removal", e);
        }
    }
}

From source file:org.jboss.tools.ws.jaxrs.ui.cnf.UriPathTemplateCategory.java

License:Open Source License

/**
 * Triggers a Refresh for all elements in this tree and ensures that the parent {@link UriMappingsContentProvider}
 * is registered against the {@link IJaxrsMetamodel} to be notified of further changes
 */// w  w w  . j  a v  a  2  s. co  m
public void refreshContent() {
    try {
        final IJaxrsMetamodel metamodel = JaxrsMetamodelLocator.get(javaProject, true);
        if (metamodel != null) {
            final JavaElementDelta delta = new JavaElementDelta(javaProject, null, IJavaElementDelta.ADDED, 0);
            final ElementChangedEvent event = new ElementChangedEvent(delta,
                    ElementChangedEvent.POST_RECONCILE);
            final JavaElementChangedBuildJob job = new JavaElementChangedBuildJob(event);
            job.setRule(javaProject.getProject().getWorkspace().getRuleFactory().buildRule());
            job.schedule();
            job.addJobChangeListener(new JobChangeAdapter() {
                @Override
                public void done(final IJobChangeEvent event) {
                    parent.refreshContent(metamodel);
                }
            });

        }
    } catch (CoreException e) {
        Logger.error("Failed to determine the problem severity for the JAX-RS Web Services", e);
    }

}

From source file:org.maven.ide.eclipse.embedder.BuildPathManager.java

License:Apache License

void setClasspathContainer(Map resolved, IProgressMonitor monitor) throws CoreException {
    monitor.setTaskName("Setting classpath containers");
    for (Iterator it = resolved.entrySet().iterator(); it.hasNext();) {
        Map.Entry entry = (Map.Entry) it.next();
        IJavaProject javaProject = JavaCore.create((IProject) entry.getKey());
        IClasspathContainer container = (IClasspathContainer) entry.getValue();
        if (javaProject != null && container != null) {

            JavaCore.setClasspathContainer(container.getPath(), new IJavaProject[] { javaProject },
                    new IClasspathContainer[] { container }, monitor);

            // XXX In Eclipse 3.3, changes to resolved classpath are not announced by JDT Core
            // and PackageExplorer does not properly refresh when we update Maven
            // classpath container.
            // As a temporary workaround, send F_CLASSPATH_CHANGED notifications
            // to all PackageExplorerContentProvider instances listening to
            // java ElementChangedEvent. 
            // Note that even with this hack, build clean is sometimes necessary to
            // reconcile PackageExplorer with actual classpath
            // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=154071
            if (getJDTVersion().startsWith("3.3")) {
                DeltaProcessingState state = JavaModelManager.getJavaModelManager().deltaState;
                synchronized (state) {
                    IElementChangedListener[] listeners = state.elementChangedListeners;
                    for (int i = 0; i < listeners.length; i++) {
                        if (listeners[i] instanceof PackageExplorerContentProvider) {
                            JavaElementDelta delta = new JavaElementDelta(javaProject);
                            delta.changed(IJavaElementDelta.F_CLASSPATH_CHANGED);
                            listeners[i].elementChanged(
                                    new ElementChangedEvent(delta, ElementChangedEvent.POST_CHANGE));
                        }//from w  w  w .java2 s . c  o m
                    }
                }
            }
        }
    }
}