[lsp] added doRead method to access document and resource

This commit is contained in:
Sven Efftinge 2016-05-25 09:58:34 +02:00
parent 80c7da3224
commit 3cf774385d
2 changed files with 21 additions and 1 deletions

View file

@ -25,6 +25,7 @@ import org.eclipse.xtext.resource.impl.ResourceDescriptionsData
import org.eclipse.xtext.validation.Issue
import java.util.Map
import org.eclipse.xtext.build.IncrementalBuilder.Result
import org.eclipse.emf.ecore.resource.Resource
/**
* @author Sven Efftinge - Initial contribution and API
@ -42,6 +43,7 @@ class ProjectManager {
(URI, Iterable<Issue>)=>void issueAcceptor
Provider<Map<String, ResourceDescriptionsData>> indexProvider
IExternalContentProvider openedDocumentsContentProvider
XtextResourceSet resourceSet
def Result initialize(URI baseDir, (URI, Iterable<Issue>)=>void acceptor, IExternalContentProvider openedDocumentsContentProvider, Provider<Map<String, ResourceDescriptionsData>> indexProvider) {
val uris = newArrayList
@ -54,10 +56,12 @@ class ProjectManager {
}
def Result doBuild(List<URI> dirtyFiles, List<URI> deletedFiles) {
val result = incrementalBuilder.build(newBuildRequest(dirtyFiles, deletedFiles), [
val request = newBuildRequest(dirtyFiles, deletedFiles)
val result = incrementalBuilder.build(request, [
languagesRegistry.getResourceServiceProvider(it)
])
indexState = result.indexState
resourceSet = request.resourceSet
return result;
}
@ -87,4 +91,9 @@ class ProjectManager {
externalContentSupport.configureResourceSet(it, openedDocumentsContentProvider)
]
}
def Resource getResource(org.eclipse.emf.common.util.URI uri) {
resourceSet.getResource(uri, true)
}
}

View file

@ -20,6 +20,7 @@ import java.util.List
import java.util.Map
import org.eclipse.emf.common.util.URI
import org.eclipse.xtext.resource.IExternalContentSupport.IExternalContentProvider
import org.eclipse.xtext.resource.XtextResource
import org.eclipse.xtext.resource.impl.ResourceDescriptionsData
import org.eclipse.xtext.validation.Issue
@ -129,5 +130,15 @@ class WorkspaceManager {
def didSave(DidSaveTextDocumentParams changeEvent) {
// do nothing for now
}
def <T> void doRead(URI uri, (Document, XtextResource)=>T work) {
val projectMnr = getProjectManager(uri)
val doc = openDocuments.get(uri)
work.apply(doc, projectMnr.getResource(uri) as XtextResource)
}
def <T> void doWrite(URI uri, (Document, XtextResource)=>T work) {
}
}