Java源码示例:org.eclipse.xtext.resource.impl.ResourceDescriptionChangeEvent
示例1
/**
* @since 2.22
*/
protected void notifyListeners(IResourceDescription prevDirtyDescription, IDirtyResource dirtyResource) {
IResourceDescription.Delta delta = new IResourceDescription.Delta() {
@Override
public boolean haveEObjectDescriptionsChanged() {
return true;
}
@Override
public IResourceDescription getOld() {
return prevDirtyDescription;
}
@Override
public IResourceDescription getNew() {
return dirtyResource.getDescription();
}
@Override
public URI getUri() {
return dirtyResource.getURI();
}
};
notifyListeners(new ResourceDescriptionChangeEvent(Collections.singletonList(delta)));
}
示例2
protected Pair<IResourceDescription.Event, Integer> mergePendingDeltas() {
Map<URI, IResourceDescription.Delta> uriToDelta = Maps.newLinkedHashMap();
Iterator<IResourceDescription.Delta> iter = pendingChanges.iterator();
int size = 0;
while(iter.hasNext()) {
IResourceDescription.Delta delta = iter.next();
URI uri = delta.getUri();
IResourceDescription.Delta prev = uriToDelta.get(uri);
if (prev == null) {
uriToDelta.put(uri, delta);
} else if (prev.getOld() != delta.getNew()){
uriToDelta.put(uri, createDelta(delta, prev));
} else {
uriToDelta.remove(uri);
}
size++;
}
IResourceDescription.Event event = new ResourceDescriptionChangeEvent(uriToDelta.values());
return Tuples.create(event, size);
}
示例3
public void dirtyDescriptionsChanged(IResourceDescription.Event event) {
if (event instanceof CoarseGrainedChangeEvent) {
notifyListeners(event);
return;
}
ResourceDescriptionChangeEvent changeEvent = new ResourceDescriptionChangeEvent(
Iterables.transform(event.getDeltas(), new Function<IResourceDescription.Delta, IResourceDescription.Delta>() {
@Override
public IResourceDescription.Delta apply(IResourceDescription.Delta from) {
IResourceDescription.Delta result = from;
if (from.getNew() == null) {
result = createDelta(from.getOld(), globalDescriptions.getResourceDescription(from.getUri()));
} else if (from.getOld() == null) {
result = createDelta(globalDescriptions.getResourceDescription(from.getUri()), from.getNew());
}
return result;
}
}));
notifyListeners(changeEvent);
}
示例4
@Override
public synchronized ImmutableList<IResourceDescription.Delta> update(BuildData buildData, IProgressMonitor monitor) {
ensureLoaded();
final SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.AbstractBuilderState_0, 1);
subMonitor.subTask(Messages.AbstractBuilderState_0);
if (buildData.isEmpty())
return ImmutableList.of();
if (monitor.isCanceled())
throw new OperationCanceledException();
final ResourceDescriptionsData newData = getCopiedResourceDescriptionsData();
final Collection<IResourceDescription.Delta> result = doUpdate(buildData, newData, subMonitor.split(1));
if (monitor.isCanceled())
throw new OperationCanceledException();
final ResourceDescriptionChangeEvent event = new ResourceDescriptionChangeEvent(result);
// update the reference
setResourceDescriptionsData(newData);
notifyListeners(event);
return event.getDeltas();
}
示例5
public void globalDescriptionsChanged(IResourceDescription.Event event) {
ResourceDescriptionChangeEvent changeEvent = new ResourceDescriptionChangeEvent(
Iterables.filter(event.getDeltas(), new Predicate<IResourceDescription.Delta>() {
@Override
public boolean apply(Delta input) {
URI uri = input.getUri();
return !dirtyStateManager.hasContent(uri);
}
}));
notifyListeners(changeEvent);
}
示例6
@Override
@Test public void testBug352214() {
container.getResourceDescriptions(); // initialize uri map
ResourceDescriptionChangeEvent event = new ResourceDescriptionChangeEvent(Collections.<IResourceDescription.Delta>singletonList(
new ChangedResourceDescriptionDelta(resourceDescription, null)));
simulateEmpty = true;
container.descriptionsChanged(event);
assertEquals(0, container.getResourceDescriptionCount());
assertTrue(Iterables.all(container.getResourceDescriptions(), Predicates.notNull()));
assertFalse(container.hasResourceDescription(uri));
assertNull(container.getResourceDescription(uri));
}
示例7
@Override
@SuppressWarnings("PMD.AvoidInstanceofChecksInCatchClause")
public synchronized ImmutableList<Delta> update(final BuildData buildData, final IProgressMonitor monitor) {
ensureLoaded();
final SubMonitor subMonitor = SubMonitor.convert(monitor, org.eclipse.xtext.builder.builderState.Messages.AbstractBuilderState_0, 1);
subMonitor.subTask(org.eclipse.xtext.builder.builderState.Messages.AbstractBuilderState_0);
checkForCancellation(monitor);
final ResourceDescriptionsData newData = getCopiedResourceDescriptionsData();
Collection<IResourceDescription.Delta> result = null;
try {
result = doUpdate(buildData, newData, subMonitor.newChild(1));
// update the reference
setResourceDescriptionsData(newData, monitor);
// CHECKSTYLE:CHECK-OFF IllegalCatch
} catch (Throwable t) {
// CHECKSTYLE:CHECK-ON IllegalCatch
if (!operationCanceledManager.isOperationCanceledException(t)) {
LOGGER.error("Failed to update index. Executing rollback.", t); //$NON-NLS-1$
}
if (newData instanceof AbstractResourceDescriptionsData) {
((AbstractResourceDescriptionsData) newData).rollbackChanges();
}
throw t;
}
final ResourceDescriptionChangeEvent event = new ResourceDescriptionChangeEvent(result);
notifyListeners(event);
return event.getDeltas();
}
示例8
@Override
public synchronized ImmutableList<IResourceDescription.Delta> clean(final Set<URI> toBeRemoved, final IProgressMonitor monitor) {
ensureLoaded();
Set<URI> toBeRemovedCopy = ensureNotNull(toBeRemoved);
SubMonitor subMonitor = SubMonitor.convert(monitor, org.eclipse.xtext.builder.builderState.Messages.AbstractBuilderState_0, 2);
subMonitor.subTask(org.eclipse.xtext.builder.builderState.Messages.AbstractBuilderState_0);
if (toBeRemovedCopy.isEmpty()) {
return ImmutableList.of();
}
checkForCancellation(monitor);
Collection<IResourceDescription.Delta> deltas = doClean(toBeRemovedCopy, subMonitor.newChild(1));
final ResourceDescriptionsData newData = getCopiedResourceDescriptionsData();
checkForCancellation(monitor);
try {
for (IResourceDescription.Delta delta : deltas) {
newData.removeDescription(delta.getOld().getURI());
}
ResourceDescriptionChangeEvent event = new ResourceDescriptionChangeEvent(deltas);
checkForCancellation(monitor);
updateDeltas(event.getDeltas(), null, subMonitor.newChild(1));
// update the reference
setResourceDescriptionsData(newData, monitor);
// CHECKSTYLE:CHECK-OFF IllegalCatch
notifyListeners(event);
return event.getDeltas();
} catch (Throwable t) {
// CHECKSTYLE:CHECK-ON IllegalCatch
if (newData instanceof AbstractResourceDescriptionsData) {
((AbstractResourceDescriptionsData) newData).rollbackChanges();
}
throw t;
}
}
示例9
/**
* {@inheritDoc} Schedules a full clean build if the target platform changes.
*/
@Override
public void platformChanged(final IXtextTargetPlatform newPlatform, final Collection<Delta> deltas, final boolean mustRebuild) {
if (newPlatform == null) {
// Hmmm... context deactivated. Events for removing the project from the index will be generated anyway, so no build necessary.
// TODO: check!
setDerivedObjectAssociationsStore(null);
setResourceDescriptionsData(new NullResourceDescriptionsData());
isBinaryModelStorageAvailable = false;
return;
}
// Deltas?
if (isLoaded()) {
// If we're not loaded yet, then this event is due to the initial loading of the platform in super.load. In this case,
// we are in a build anyway, aren't we?
// TODO: this is pretty convoluted. We should try to disentangle this OO spaghetti code. Is it good enough to simply not notify listeners in
// AbstractXtextTargetPlatformManager if it was the initial load?
ResourceDescriptionsData data = (ResourceDescriptionsData) newPlatform.getIResourceDescriptionsData();
if (data instanceof AbstractResourceDescriptionsData) {
((AbstractResourceDescriptionsData) data).beginChanges();
}
setDerivedObjectAssociationsStore(newPlatform.getAssociationsStore());
setResourceDescriptionsData(data);
updateBinaryStorageAvailability(newPlatform);
ResourceDescriptionChangeEvent event = new ResourceDescriptionChangeEvent(deltas);
notifyListeners(event);
}
if (mustRebuild) {
buildTrigger.scheduleFullBuild();
}
}
示例10
private void notifyListeners(IResourceDescription.Delta delta) {
notifyListeners(new ResourceDescriptionChangeEvent(Collections.singletonList(delta)));
}
示例11
private IResourceDescription.Event getAsResourceDescriptionChange(IJavaElementDelta delta) {
List<IResourceDescription.Delta> deltas = deltaConverter.convert(delta);
if (deltas == null || deltas.isEmpty())
return null;
return new ResourceDescriptionChangeEvent(deltas);
}