Search in sources :

Example 6 with WorkspaceConfigSnapshot

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);
}
Also used : WorkspaceConfigSnapshot(org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot)

Example 7 with WorkspaceConfigSnapshot

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;
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) WorkspaceConfigSnapshot(org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot) HashSet(java.util.HashSet) ResourceChangeSet(org.eclipse.n4js.xtext.ide.server.ResourceChangeSet) LinkedHashSet(java.util.LinkedHashSet) ImmutableSet(com.google.common.collect.ImmutableSet) Set(java.util.Set) URI(org.eclipse.emf.common.util.URI) ResourceDescriptionChangeEvent(org.eclipse.xtext.resource.impl.ResourceDescriptionChangeEvent) ProjectConfigSnapshot(org.eclipse.n4js.xtext.workspace.ProjectConfigSnapshot) Delta(org.eclipse.xtext.resource.IResourceDescription.Delta) DefaultResourceDescriptionDelta(org.eclipse.xtext.resource.impl.DefaultResourceDescriptionDelta) BuildOrderIterator(org.eclipse.n4js.xtext.workspace.BuildOrderIterator)

Example 8 with WorkspaceConfigSnapshot

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;
}
Also used : WorkspaceConfigSnapshot(org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot) ProjectConfigSnapshot(org.eclipse.n4js.xtext.workspace.ProjectConfigSnapshot)

Example 9 with WorkspaceConfigSnapshot

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;
}
Also used : WorkspaceConfigSnapshot(org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) XtextResourceSet(org.eclipse.xtext.resource.XtextResourceSet)

Example 10 with WorkspaceConfigSnapshot

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);
}
Also used : Path(java.nio.file.Path) DidChangeTextDocumentParams(org.eclipse.lsp4j.DidChangeTextDocumentParams) CliTools(org.eclipse.n4js.cli.helper.CliTools) FileTime(java.nio.file.attribute.FileTime) FileUtils(org.eclipse.n4js.utils.io.FileUtils) N4JSPackageName(org.eclipse.n4js.workspace.utils.N4JSPackageName) UriExtensions(org.eclipse.xtext.ide.server.UriExtensions) Collections.singletonList(java.util.Collections.singletonList) DidSaveTextDocumentParams(org.eclipse.lsp4j.DidSaveTextDocumentParams) FluentIterable(com.google.common.collect.FluentIterable) N4JSLanguageConstants(org.eclipse.n4js.N4JSLanguageConstants) Optional(com.google.common.base.Optional) BasicFileAttributeView(java.nio.file.attribute.BasicFileAttributeView) Map(java.util.Map) Path(java.nio.file.Path) LinkedHashMultimap(com.google.common.collect.LinkedHashMultimap) ProjectType(org.eclipse.n4js.packagejson.projectDescription.ProjectType) DiagnosticSeverity(org.eclipse.lsp4j.DiagnosticSeverity) AfterClass(org.junit.AfterClass) Set(java.util.Set) NameAndExtension(org.eclipse.n4js.ide.tests.helper.server.TestWorkspaceManager.NameAndExtension) WrappedException(org.eclipse.emf.common.util.WrappedException) LocationLink(org.eclipse.lsp4j.LocationLink) SystemOutRedirecter(org.eclipse.n4js.cli.helper.SystemOutRedirecter) ConcurrentIndex(org.eclipse.n4js.xtext.ide.server.build.ConcurrentIndex) Stream(java.util.stream.Stream) Assert.assertFalse(org.junit.Assert.assertFalse) Pair(org.eclipse.xtext.xbase.lib.Pair) GlobalRegistries(org.eclipse.xtext.testing.GlobalRegistries) Joiner(com.google.common.base.Joiner) Iterables(com.google.common.collect.Iterables) URI(org.eclipse.emf.common.util.URI) ApplyWorkspaceEditParams(org.eclipse.lsp4j.ApplyWorkspaceEditParams) IResourceServiceProvider(org.eclipse.xtext.resource.IResourceServiceProvider) IIdeTestLanguageClientListener(org.eclipse.n4js.ide.tests.helper.client.IdeTestLanguageClient.IIdeTestLanguageClientListener) Diagnostic(org.eclipse.lsp4j.Diagnostic) ArrayList(java.util.ArrayList) Multimaps(com.google.common.collect.Multimaps) Strings(com.google.common.base.Strings) FileChangeType(org.eclipse.lsp4j.FileChangeType) TextDocumentItem(org.eclipse.lsp4j.TextDocumentItem) BuilderFrontend(org.eclipse.n4js.xtext.ide.server.build.BuilderFrontend) TextEdit(org.eclipse.lsp4j.TextEdit) Lists(com.google.common.collect.Lists) TextDocumentEdit(org.eclipse.lsp4j.TextDocumentEdit) VersionedTextDocumentIdentifier(org.eclipse.lsp4j.VersionedTextDocumentIdentifier) LanguageInfo(org.eclipse.xtext.LanguageInfo) TextDocumentContentChangeEvent(org.eclipse.lsp4j.TextDocumentContentChangeEvent) LinkedHashSet(java.util.LinkedHashSet) Before(org.junit.Before) Files(java.nio.file.Files) N4JSLanguageUtils(org.eclipse.n4js.utils.N4JSLanguageUtils) DidChangeWatchedFilesParams(org.eclipse.lsp4j.DidChangeWatchedFilesParams) IOException(java.io.IOException) GlobalStateMemento(org.eclipse.xtext.testing.GlobalRegistries.GlobalStateMemento) Assert.assertNotEquals(org.junit.Assert.assertNotEquals) File(java.io.File) SourceFolderSnapshot(org.eclipse.n4js.xtext.workspace.SourceFolderSnapshot) Assert.assertNull(org.junit.Assert.assertNull) WorkspaceEdit(org.eclipse.lsp4j.WorkspaceEdit) Assert(org.junit.Assert) Assert.assertEquals(org.junit.Assert.assertEquals) ResourceOperation(org.eclipse.lsp4j.ResourceOperation) Module(com.google.inject.Module) ProcessResult(org.eclipse.n4js.cli.helper.ProcessResult) BiFunction(java.util.function.BiFunction) Inject(com.google.inject.Inject) MessageType(org.eclipse.lsp4j.MessageType) TextDocumentIdentifier(org.eclipse.lsp4j.TextDocumentIdentifier) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) FileEvent(org.eclipse.lsp4j.FileEvent) After(org.junit.After) Location(org.eclipse.lsp4j.Location) Either(org.eclipse.lsp4j.jsonrpc.messages.Either) Assert.fail(org.junit.Assert.fail) DidCloseTextDocumentParams(org.eclipse.lsp4j.DidCloseTextDocumentParams) FileURI(org.eclipse.n4js.workspace.locations.FileURI) ImmutableSet(com.google.common.collect.ImmutableSet) Collection(java.util.Collection) StandardOpenOption(java.nio.file.StandardOpenOption) ProjectConfigSnapshot(org.eclipse.n4js.xtext.workspace.ProjectConfigSnapshot) ResourceDescriptionsData(org.eclipse.xtext.resource.impl.ResourceDescriptionsData) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) DefinitionParams(org.eclipse.lsp4j.DefinitionParams) Objects(java.util.Objects) CompletionItem(org.eclipse.lsp4j.CompletionItem) List(java.util.List) DidOpenTextDocumentParams(org.eclipse.lsp4j.DidOpenTextDocumentParams) N4jsLibsAccess(org.eclipse.n4js.cli.helper.N4jsLibsAccess) Entry(java.util.Map.Entry) Pattern(java.util.regex.Pattern) BuildOrderFactory(org.eclipse.n4js.xtext.workspace.BuildOrderFactory) CompletionParams(org.eclipse.lsp4j.CompletionParams) BeforeClass(org.junit.BeforeClass) XLanguageServerImpl(org.eclipse.n4js.xtext.ide.server.XLanguageServerImpl) BuildOrderIterator(org.eclipse.n4js.xtext.workspace.BuildOrderIterator) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) Range(org.eclipse.lsp4j.Range) Multimap(com.google.common.collect.Multimap) Function(java.util.function.Function) XDocument(org.eclipse.n4js.xtext.ide.server.XDocument) N4JSGlobals(org.eclipse.n4js.N4JSGlobals) MessageParams(org.eclipse.lsp4j.MessageParams) ResourceChange(org.eclipse.lsp4j.ResourceChange) Position(org.eclipse.lsp4j.Position) CompletionList(org.eclipse.lsp4j.CompletionList) IdeTestLanguageClient(org.eclipse.n4js.ide.tests.helper.client.IdeTestLanguageClient) PrintStream(java.io.PrintStream) Assert.assertNotNull(org.junit.Assert.assertNotNull) SetView(com.google.common.collect.Sets.SetView) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes) WorkspaceConfigSnapshot(org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot) IterableExtensions(org.eclipse.xtext.xbase.lib.IterableExtensions) Comparator(java.util.Comparator) Collections(java.util.Collections) WorkspaceConfigSnapshot(org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot)

Aggregations

WorkspaceConfigSnapshot (org.eclipse.n4js.xtext.workspace.WorkspaceConfigSnapshot)20 ProjectConfigSnapshot (org.eclipse.n4js.xtext.workspace.ProjectConfigSnapshot)10 URI (org.eclipse.emf.common.util.URI)7 ArrayList (java.util.ArrayList)5 BuildOrderIterator (org.eclipse.n4js.xtext.workspace.BuildOrderIterator)5 IResourceDescription (org.eclipse.xtext.resource.IResourceDescription)5 ImmutableSet (com.google.common.collect.ImmutableSet)4 LinkedHashSet (java.util.LinkedHashSet)4 Set (java.util.Set)4 Collections (java.util.Collections)3 HashSet (java.util.HashSet)3 List (java.util.List)3 FluentIterable (com.google.common.collect.FluentIterable)2 Iterables (com.google.common.collect.Iterables)2 Sets (com.google.common.collect.Sets)2 Path (java.nio.file.Path)2 Collection (java.util.Collection)2 Map (java.util.Map)2 Collectors (java.util.stream.Collectors)2 Delta (org.eclipse.xtext.resource.IResourceDescription.Delta)2