Search in sources :

Example 26 with Delta

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

the class AbstractCachingResourceDescriptionManager method getAffectedResources.

/**
 * Bulk method to return all resources (managed by this manager) which are affected by the given set of deltas.
 *
 * @param deltas
 *          deltas
 * @param filter
 *          filter for affected resources
 * @param context
 *          context index
 * @return collection of affected resources
 */
protected Set<URI> getAffectedResources(final Collection<Delta> deltas, final Predicate<URI> filter, final IResourceDescriptions2 context) {
    // NOPMD
    final Set<IResourceDescription> changedOrDeletedResources = Sets.newHashSet();
    final Set<IEObjectDescription> changedOrDeletedObjects = Sets.newHashSet();
    final SetMultimap<String, IResourceDescription> addedResources = HashMultimap.create();
    final SetMultimap<String, IEObjectDescription> addedObjects = HashMultimap.create();
    final IAllContainersState containersState = containersStateProvider.get(context);
    for (Delta delta : deltas) {
        if (delta.haveEObjectDescriptionsChanged()) {
            if (delta instanceof ResourceDescriptionDelta && ((ResourceDescriptionDelta) delta).hasObjectFingerprints()) {
                ResourceDescriptionDelta detailedDelta = (ResourceDescriptionDelta) delta;
                changedOrDeletedObjects.addAll(detailedDelta.getChangedObjects());
                changedOrDeletedObjects.addAll(detailedDelta.getDeletedObjects());
                addedObjects.putAll(containersState.getContainerHandle(delta.getUri()), detailedDelta.getAddedObjects());
            } else {
                IResourceDescription oldDesc = delta.getOld();
                IResourceDescription newDesc = delta.getNew();
                if (oldDesc != null) {
                    changedOrDeletedResources.add(newDesc != null ? newDesc : oldDesc);
                } else {
                    addedResources.put(containersState.getContainerHandle(delta.getUri()), newDesc);
                }
            }
        }
    }
    // find all resources matching provided filter with physical references to changed-or-deleted resources and objects
    Set<URI> references = Sets.newHashSet(Iterables.filter(Iterables.transform(Iterables.concat(context.findAllReferencingResources(changedOrDeletedResources, ReferenceMatchPolicy.REFERENCES), context.findExactReferencingResources(changedOrDeletedObjects, ReferenceMatchPolicy.REFERENCES)), new Function<IResourceDescription, URI>() {

        @Override
        public URI apply(final IResourceDescription from) {
            return from.getURI();
        }
    }), filter));
    // find all resources matching provided filter with physical or imported name references to added resources and objects
    for (String container : addedResources.keySet()) {
        // using ReferenceMatchPolicy.UNRESOLVED_IMPORTED_NAMES is not enough: a lower index layer may contain physical references
        for (IResourceDescription res : context.findAllReferencingResources(addedResources.get(container), ReferenceMatchPolicy.ALL)) {
            URI uri = res.getURI();
            if (!references.contains(uri) && filter.apply(uri) && containersState.getVisibleContainerHandles(containersState.getContainerHandle(uri)).contains(container)) {
                references.add(uri);
            }
        }
    }
    for (String container : addedObjects.keySet()) {
        // using ReferenceMatchPolicy.UNRESOLVED_IMPORTED_NAMES is not enough: a lower index layer may contain physical references
        for (IResourceDescription res : context.findExactReferencingResources(addedObjects.get(container), ReferenceMatchPolicy.ALL)) {
            URI uri = res.getURI();
            if (!references.contains(uri) && filter.apply(uri) && containersState.getVisibleContainerHandles(containersState.getContainerHandle(uri)).contains(container)) {
                references.add(uri);
            }
        }
    }
    return references;
}
Also used : IAllContainersState(org.eclipse.xtext.resource.containers.IAllContainersState) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) URI(org.eclipse.emf.common.util.URI) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta)

Example 27 with Delta

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

the class FormatBuilderParticipantTest method beforeAllTests.

/**
 * Prepare mocks for all tests.
 */
@Override
protected void beforeAllTests() {
    super.beforeAllTests();
    participant = new FormatBuilderParticipant();
    delta = mock(Delta.class);
    uriCorrect = mock(URI.class);
    when(delta.getUri()).thenReturn(uriCorrect);
}
Also used : FormatBuilderParticipant(com.avaloq.tools.ddk.xtext.format.ui.builder.FormatBuilderParticipant) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) URI(org.eclipse.emf.common.util.URI)

Example 28 with Delta

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

the class BuilderUtil method print.

/**
 */
public static String print(ImmutableList<Delta> deltas) {
    int i = 1;
    String buff = "Deltas : \n";
    for (Delta delta : deltas) {
        buff += "Delta " + i + "[" + delta.getUri() + "]: {\n";
        buff += " old : " + toString(delta.getOld()) + "\n";
        buff += " new : " + toString(delta.getNew()) + "\n";
        buff += "}\n\n";
        i++;
    }
    return buff;
}
Also used : Delta(org.eclipse.xtext.resource.IResourceDescription.Delta)

Example 29 with Delta

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

the class Indexer method computeAndIndexAffected.

/**
 * Compute an updated index.
 */
public Indexer.IndexResult computeAndIndexAffected(BuildRequest request, BuildContext context) {
    ResourceDescriptionsData previousIndex = context.getOldState().getResourceDescriptions();
    ResourceDescriptionsData newIndex = request.getState().getResourceDescriptions();
    List<IResourceDescription.Delta> deltas = new ArrayList<>();
    deltas.addAll(getDeltasForDeletedResources(request, previousIndex, context));
    deltas.addAll(getDeltasForChangedResources(request.getDirtyFiles(), previousIndex, context));
    for (IResourceDescription.Delta delta : deltas) {
        newIndex.register(delta);
    }
    Set<IResourceDescription.Delta> allDeltas = new HashSet<>(deltas);
    allDeltas.addAll(request.getExternalDeltas());
    Set<URI> remainingURIs = FluentIterable.from(previousIndex.getAllResourceDescriptions()).transform(IResourceDescription::getURI).copyInto(new HashSet<>());
    remainingURIs.removeAll(FluentIterable.from(deltas).transform(Delta::getUri).toSet());
    List<URI> allAffected = FluentIterable.from(remainingURIs).filter(it -> {
        IResourceServiceProvider resourceServiceProvider = context.getResourceServiceProvider(it);
        if (resourceServiceProvider != null) {
            IResourceDescription.Manager manager = resourceServiceProvider.getResourceDescriptionManager();
            IResourceDescription resourceDescription = previousIndex.getResourceDescription(it);
            return isAffected(resourceDescription, manager, allDeltas, allDeltas, newIndex);
        } else {
            IResourceDescription.Delta delta = getDeltaForDeletedResource(it, previousIndex);
            if (delta != null) {
                deltas.add(delta);
            }
            return false;
        }
    }).toList();
    deltas.addAll(getDeltasForChangedResources(allAffected, previousIndex, context));
    return new Indexer.IndexResult(deltas, newIndex);
}
Also used : IReferenceDescription(org.eclipse.xtext.resource.IReferenceDescription) IResourceDescriptions(org.eclipse.xtext.resource.IResourceDescriptions) URI(org.eclipse.emf.common.util.URI) SerializableEObjectDescriptionProvider(org.eclipse.xtext.resource.persistence.SerializableEObjectDescriptionProvider) IResourceServiceProvider(org.eclipse.xtext.resource.IResourceServiceProvider) Inject(com.google.inject.Inject) CompilerPhases(org.eclipse.xtext.resource.CompilerPhases) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Logger(org.apache.log4j.Logger) ImmutableList(com.google.common.collect.ImmutableList) FluentIterable(com.google.common.collect.FluentIterable) Map(java.util.Map) AbstractResourceDescription(org.eclipse.xtext.resource.impl.AbstractResourceDescription) QualifiedName(org.eclipse.xtext.naming.QualifiedName) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) Collection(java.util.Collection) OperationCanceledManager(org.eclipse.xtext.service.OperationCanceledManager) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) Set(java.util.Set) ResourceDescriptionsData(org.eclipse.xtext.resource.impl.ResourceDescriptionsData) ToStringBuilder(org.eclipse.xtext.xbase.lib.util.ToStringBuilder) Maps(com.google.common.collect.Maps) List(java.util.List) IterableExtensions(org.eclipse.xtext.xbase.lib.IterableExtensions) Resource(org.eclipse.emf.ecore.resource.Resource) EObjectDescription(org.eclipse.xtext.resource.EObjectDescription) Collections(java.util.Collections) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription) InternalEObject(org.eclipse.emf.ecore.InternalEObject) DefaultResourceDescriptionDelta(org.eclipse.xtext.resource.impl.DefaultResourceDescriptionDelta) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) ArrayList(java.util.ArrayList) OperationCanceledManager(org.eclipse.xtext.service.OperationCanceledManager) URI(org.eclipse.emf.common.util.URI) ResourceDescriptionsData(org.eclipse.xtext.resource.impl.ResourceDescriptionsData) IResourceServiceProvider(org.eclipse.xtext.resource.IResourceServiceProvider) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) DefaultResourceDescriptionDelta(org.eclipse.xtext.resource.impl.DefaultResourceDescriptionDelta) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) HashSet(java.util.HashSet)

Example 30 with Delta

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

the class JdtToBeBuiltComputer method queueJavaChange.

protected void queueJavaChange(String typeName) {
    URI typeURI = URIHelperConstants.OBJECTS_URI.appendSegment(typeName);
    QualifiedName qualifiedName = QualifiedName.create(Strings.split(typeName, '.'));
    NameBasedEObjectDescription nameBasedEObjectDescription = new NameBasedEObjectDescription(qualifiedName);
    TypeResourceDescription oldDescription = new TypeResourceDescription(typeURI, Collections.<IEObjectDescription>singletonList(nameBasedEObjectDescription));
    Delta delta = new ChangedResourceDescriptionDelta(oldDescription, null);
    queuedBuildData.queueChange(delta);
}
Also used : ChangedResourceDescriptionDelta(org.eclipse.xtext.resource.impl.ChangedResourceDescriptionDelta) NameBasedEObjectDescription(org.eclipse.xtext.common.types.ui.notification.NameBasedEObjectDescription) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) ChangedResourceDescriptionDelta(org.eclipse.xtext.resource.impl.ChangedResourceDescriptionDelta) QualifiedName(org.eclipse.xtext.naming.QualifiedName) TypeResourceDescription(org.eclipse.xtext.common.types.ui.notification.TypeResourceDescription) URI(org.eclipse.emf.common.util.URI)

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