Search in sources :

Example 31 with Delta

use of org.eclipse.xtext.resource.IResourceDescription.Delta in project xtext-eclipse by eclipse.

the class ParallelBuilderParticipant method createRunnable.

/**
 * @since 2.9
 */
protected Runnable createRunnable(final ParallelBuildContext buildContext) {
    final IGenerator2 generator = getGenerator2();
    final Resource resource = buildContext.resource;
    if (resource != null) {
        generator.beforeGenerate(resource, buildContext.synchronousFileSystemAccess, buildContext.getGeneratorContext());
        buildContext.afterGenerateQueue.add(buildContext);
    }
    return new Runnable() {

        @Override
        public void run() {
            Delta delta = buildContext.delta;
            try {
                Set<IFile> derivedResources = getDerivedResources(delta, buildContext.outputConfigurations, buildContext.generatorMarkers);
                FileSystemAccessQueue fileSystemAccessQueue = buildContext.fileSystemAccessQueue;
                IFileSystemAccess2 fsa = getParallelFileSystemAccess(delta, buildContext, derivedResources, fileSystemAccessQueue, buildContext.synchronousFileSystemAccess);
                boolean generated = doGenerate(delta, buildContext, fsa);
                final Runnable derivedResourceCallback = getFlushAndCleanDerivedResourcesCallback(buildContext, derivedResources, generated);
                fileSystemAccessQueue.sendAsync(delta.getUri(), new Runnable() {

                    @Override
                    public void run() {
                        try {
                            derivedResourceCallback.run();
                        } finally {
                            if (resource != null) {
                                generator.afterGenerate(resource, buildContext.synchronousFileSystemAccess, buildContext.getGeneratorContext());
                                buildContext.afterGenerateQueue.remove(buildContext);
                            }
                        }
                    }
                });
            } catch (OperationCanceledException e) {
            // do nothing
            } catch (Throwable e) {
                addMarkerAndLogError(delta.getUri(), e);
            }
        }
    };
}
Also used : IFile(org.eclipse.core.resources.IFile) IFileSystemAccess2(org.eclipse.xtext.generator.IFileSystemAccess2) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) Resource(org.eclipse.emf.ecore.resource.Resource) IGenerator2(org.eclipse.xtext.generator.IGenerator2) FileSystemAccessQueue(org.eclipse.xtext.generator.FileSystemAccessQueue)

Example 32 with Delta

use of org.eclipse.xtext.resource.IResourceDescription.Delta in project xtext-eclipse by eclipse.

the class BuilderParticipant method doBuild.

/**
 * @since 2.7
 */
protected void doBuild(List<IResourceDescription.Delta> deltas, Map<String, OutputConfiguration> outputConfigurations, Map<OutputConfiguration, Iterable<IMarker>> generatorMarkers, IBuildContext context, EclipseResourceFileSystemAccess2 access, IProgressMonitor progressMonitor) throws CoreException {
    final int numberOfDeltas = deltas.size();
    SubMonitor subMonitor = SubMonitor.convert(progressMonitor, numberOfDeltas);
    SubMonitor currentMonitor = null;
    int clusterIndex = 0;
    for (int i = 0; i < numberOfDeltas; i++) {
        IResourceDescription.Delta delta = deltas.get(i);
        if (subMonitor.isCanceled()) {
            throw new OperationCanceledException();
        }
        currentMonitor = subMonitor.split(1);
        access.setMonitor(currentMonitor);
        if (logger.isDebugEnabled()) {
            logger.debug("Compiling " + delta.getUri() + " (" + i + " of " + numberOfDeltas + ")");
        }
        if (delta.getNew() != null && !clusteringPolicy.continueProcessing(context.getResourceSet(), delta.getUri(), clusterIndex)) {
            clearResourceSet(context.getResourceSet());
            clusterIndex = 0;
        }
        Set<IFile> derivedResources = getDerivedResources(delta, outputConfigurations, generatorMarkers);
        access.setPostProcessor(getPostProcessor(delta, context, derivedResources));
        if (doGenerate(delta, context, access)) {
            clusterIndex++;
            access.flushSourceTraces();
        }
        cleanDerivedResources(delta, derivedResources, context, access, currentMonitor);
    }
}
Also used : IFile(org.eclipse.core.resources.IFile) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) SubMonitor(org.eclipse.core.runtime.SubMonitor)

Example 33 with Delta

use of org.eclipse.xtext.resource.IResourceDescription.Delta in project xtext-eclipse by eclipse.

the class PersistableResourceDescriptionsTest method update.

private Map<URI, IResourceDescription.Delta> update(Set<URI> toBeUpdated, Set<URI> toBeDeleted) {
    ResourceSet resourceSet = createResourceSet();
    try {
        ToBeBuilt toBeBuilt = new ToBeBuilt();
        if (toBeDeleted != null)
            toBeBuilt.getToBeDeleted().addAll(toBeDeleted);
        if (toBeUpdated != null)
            toBeBuilt.getToBeUpdated().addAll(toBeUpdated);
        BuildData buildData = new BuildData("", resourceSet, toBeBuilt, builderInjector.getInstance(QueuedBuildData.class));
        ImmutableList<Delta> update = builderState.update(buildData, new NullProgressMonitor());
        return Maps.uniqueIndex(update, new Function<IResourceDescription.Delta, URI>() {

            @Override
            public URI apply(IResourceDescription.Delta from) {
                return from.getUri();
            }
        });
    } finally {
        resourceSet.getResources().clear();
    }
}
Also used : BuildData(org.eclipse.xtext.builder.impl.BuildData) QueuedBuildData(org.eclipse.xtext.builder.impl.QueuedBuildData) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ToBeBuilt(org.eclipse.xtext.builder.impl.ToBeBuilt) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) QueuedBuildData(org.eclipse.xtext.builder.impl.QueuedBuildData) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) URI(org.eclipse.emf.common.util.URI)

Example 34 with Delta

use of org.eclipse.xtext.resource.IResourceDescription.Delta in project xtext-eclipse by eclipse.

the class Bug486584Test method testNoFullBuildIfAttachmentChangeOnly.

@Test
public void testNoFullBuildIfAttachmentChangeOnly() throws CoreException, InterruptedException {
    IJavaProject project = setupProject();
    assertFalse(getEvents().isEmpty());
    getEvents().clear();
    IFile libaryFile = copyAndGetXtendExampleJar(project);
    IClasspathEntry libraryEntry = JavaCore.newLibraryEntry(libaryFile.getFullPath(), null, null);
    addToClasspath(project, libraryEntry);
    build();
    assertEquals(1, getEvents().size());
    Event singleEvent = getEvents().get(0);
    ImmutableList<Delta> deltas = singleEvent.getDeltas();
    assertEquals(1, deltas.size());
    getEvents().clear();
    IClasspathEntry[] classpath = project.getRawClasspath();
    for (int i = 0; i < classpath.length; ++i) {
        IPath entryPath = classpath[i].getPath();
        if (libraryEntry.getPath().equals(entryPath)) {
            IClasspathEntry[] newClasspath = new IClasspathEntry[classpath.length];
            System.arraycopy(classpath, 0, newClasspath, 0, classpath.length);
            classpath[i] = JavaCore.newLibraryEntry(libaryFile.getFullPath(), libaryFile.getFullPath(), null);
            project.setRawClasspath(classpath, null);
        }
    }
    build();
    assertEquals(0, getEvents().size());
}
Also used : IJavaProject(org.eclipse.jdt.core.IJavaProject) IFile(org.eclipse.core.resources.IFile) IPath(org.eclipse.core.runtime.IPath) IClasspathEntry(org.eclipse.jdt.core.IClasspathEntry) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) Event(org.eclipse.xtext.resource.IResourceDescription.Event) Test(org.junit.Test)

Example 35 with Delta

use of org.eclipse.xtext.resource.IResourceDescription.Delta in project xtext-eclipse by eclipse.

the class Bug486584Test method testFullBuildWhenClasspathChanged_1.

@Test
public void testFullBuildWhenClasspathChanged_1() throws CoreException, InterruptedException {
    IJavaProject project = setupProject();
    assertFalse(getEvents().isEmpty());
    getEvents().clear();
    IFile libaryFile = copyAndGetXtendExampleJar(project);
    IClasspathEntry libraryEntry = JavaCore.newLibraryEntry(libaryFile.getFullPath(), null, null);
    addToClasspath(project, libraryEntry);
    assertEquals(1, getEvents().size());
    Event singleEvent = getEvents().get(0);
    ImmutableList<Delta> deltas = singleEvent.getDeltas();
    assertEquals(1, deltas.size());
}
Also used : IJavaProject(org.eclipse.jdt.core.IJavaProject) IFile(org.eclipse.core.resources.IFile) IClasspathEntry(org.eclipse.jdt.core.IClasspathEntry) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) Event(org.eclipse.xtext.resource.IResourceDescription.Event) Test(org.junit.Test)

Aggregations

Delta (org.eclipse.xtext.resource.IResourceDescription.Delta)38 URI (org.eclipse.emf.common.util.URI)22 IResourceDescription (org.eclipse.xtext.resource.IResourceDescription)17 SubMonitor (org.eclipse.core.runtime.SubMonitor)13 DefaultResourceDescriptionDelta (org.eclipse.xtext.resource.impl.DefaultResourceDescriptionDelta)10 OperationCanceledException (org.eclipse.core.runtime.OperationCanceledException)8 Resource (org.eclipse.emf.ecore.resource.Resource)8 ResourceSet (org.eclipse.emf.ecore.resource.ResourceSet)7 IFile (org.eclipse.core.resources.IFile)5 IProject (org.eclipse.core.resources.IProject)5 IResourceDelta (org.eclipse.core.resources.IResourceDelta)5 WrappedException (org.eclipse.emf.common.util.WrappedException)4 IJavaProject (org.eclipse.jdt.core.IJavaProject)4 QualifiedName (org.eclipse.xtext.naming.QualifiedName)4 ArrayList (java.util.ArrayList)3 List (java.util.List)3 CoreException (org.eclipse.core.runtime.CoreException)3 IClasspathEntry (org.eclipse.jdt.core.IClasspathEntry)3 LoadOperationException (org.eclipse.xtext.builder.resourceloader.IResourceLoader.LoadOperationException)3 IContainer (org.eclipse.xtext.resource.IContainer)3