use of org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot in project n4js by eclipse.
the class ConcurrentIndex method removeAllProjects.
/**
* Removes all projects and their indices.
*/
public void removeAllProjects() {
ImmutableSet<String> removedProjectIDs;
WorkspaceConfigSnapshot workspaceConfigNew;
synchronized (this) {
removedProjectIDs = ImmutableSet.copyOf(projectID2Index.keySet());
projectID2Index.clear();
workspaceConfigNew = configSnapshotFactory.clear(workspaceConfig);
workspaceConfig = workspaceConfigNew;
}
notifyListeners(workspaceConfigNew, ImmutableMap.of(), ImmutableList.of(), removedProjectIDs);
}
use of org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot in project n4js by eclipse.
the class XWorkspaceBuilder method doIncrementalBuild.
/**
* Run the build on the workspace
*/
private IResourceDescription.Event doIncrementalBuild(CancelIndicator cancelIndicator) {
lspLogger.log("Building ...");
WorkspaceConfigSnapshot workspaceConfig = workspaceManager.getWorkspaceConfig();
boolean hasDependencyCycle = workspaceConfig.hasDependencyCycle();
try {
Set<URI> dirtyFilesToBuild = new LinkedHashSet<>(this.dirtyFiles);
Set<URI> deletedFilesToBuild = new LinkedHashSet<>(this.deletedFiles);
Map<String, Set<URI>> project2dirty = computeProjectToUriMap(dirtyFilesToBuild);
Map<String, Set<URI>> project2deleted = computeProjectToUriMap(deletedFilesToBuild);
Set<String> changedProjects = Sets.union(project2dirty.keySet(), project2deleted.keySet());
List<ProjectConfigSnapshot> changedPCs = changedProjects.stream().map(workspaceConfig::findProjectByID).collect(Collectors.toList());
BuildOrderIterator pboIterator = buildOrderFactory.createBuildOrderIterator(workspaceConfig, changedPCs);
pboIterator.visit(affectedByDeletedProjects);
while (pboIterator.hasNext()) {
ProjectConfigSnapshot projectConfig = pboIterator.next();
String projectName = projectConfig.getName();
ProjectBuilder projectBuilder = workspaceManager.getProjectBuilder(projectName);
Set<URI> projectDirty = project2dirty.getOrDefault(projectName, Collections.emptySet());
Set<URI> projectDeleted = project2deleted.getOrDefault(projectName, Collections.emptySet());
XBuildResult projectResult;
AffectedResourcesRecordingFactory recordingFactory = new AffectedResourcesRecordingFactory(buildRequestFactory);
try {
projectResult = projectBuilder.doIncrementalBuild(recordingFactory, projectDirty, projectDeleted, toBeConsideredDeltas, cancelIndicator);
} catch (Throwable t) {
// re-schedule the affected files since a subsequent build may not detect those as affected
// anymore but we may have produced artifacts for these already
this.dirtyFiles.addAll(recordingFactory.getAffectedResources());
throw t;
}
List<Delta> newlyBuiltDeltas = projectResult.getAffectedResources();
recordBuildProgress(newlyBuiltDeltas);
pboIterator.visitAffected(newlyBuiltDeltas);
}
List<IResourceDescription.Delta> result = toBeConsideredDeltas;
onBuildDone(false, false, hasDependencyCycle, Optional.absent());
lspLogger.log("... build done.");
return new ResourceDescriptionChangeEvent(result);
} catch (Throwable th) {
boolean wasCanceled = operationCanceledManager.isOperationCanceledException(th);
onBuildDone(false, wasCanceled, hasDependencyCycle, Optional.of(th));
if (wasCanceled) {
lspLogger.log("... build canceled.");
operationCanceledManager.propagateIfCancelException(th);
}
// unknown exception or error (and not a cancellation case):
// QueueExecutorService will log this as an error with stack trace, so here we just use #log():
lspLogger.log("... build ABORTED due to exception: " + th.getMessage());
throw th;
}
}
use of org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot in project n4js by eclipse.
the class WorkspaceConfigAllContainerState method getContainerHandle.
@Override
public String getContainerHandle(URI uri) {
WorkspaceConfigSnapshot ws = getWorkspaceConfig();
ProjectConfigSnapshot project = ws != null ? ws.findProjectContaining(uri) : null;
return project != null ? project.getName() : null;
}
use of org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot in project n4js by eclipse.
the class WorkspaceAccess method getWorkspaceConfig.
/**
* Returns the current workspace configuration of the context defined by the given EMF {@link ResourceSet} or
* element contained in a resource set. Returns {@link N4JSWorkspaceConfigSnapshot#EMPTY} in case no workspace
* configuration can be found. Never returns <code>null</code>.
*/
public N4JSWorkspaceConfigSnapshot getWorkspaceConfig(Notifier context) {
ResourceSet resourceSet = EcoreUtil2.getResourceSet(context);
WorkspaceConfigSnapshot config = resourceSet != null ? WorkspaceConfigAdapter.getWorkspaceConfig(resourceSet) : null;
return config != null ? (N4JSWorkspaceConfigSnapshot) config : N4JSWorkspaceConfigSnapshot.EMPTY;
}
use of org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot in project n4js by eclipse.
the class AbstractIdeTest method assertProjectsInWorkspace.
/**
* Asserts the workspace contains the given project ids.
*/
protected void assertProjectsInWorkspace(String... expectedProjects) {
Path baseFolder = getRoot().toPath();
WorkspaceConfigSnapshot wc = concurrentIndex.getWorkspaceConfigSnapshot();
Set<String> actualProjectPathStrs = FluentIterable.from(wc.getProjects()).transform(p -> Path.of(p.getPath().toFileString())).transform(path -> baseFolder.relativize(path)).transform(Object::toString).toSet();
assertProjectsInWorkspace(expectedProjects, actualProjectPathStrs);
}
Aggregations