Java源码示例:org.eclipse.xtext.resource.impl.ProjectDescription
示例1
/** Mark the given document as saved. */
public XBuildManager.XBuildable didSave(URI uri) {
WorkspaceChanges notifiedChanges = WorkspaceChanges.createUrisChanged(ImmutableList.of(uri));
WorkspaceChanges workspaceChanges = ((XIWorkspaceConfig) getWorkspaceConfig()).update(uri,
projectName -> projectName2ProjectManager.get(projectName).getProjectDescription());
Map<String, ImmutableSet<String>> dependencyChanges = new HashMap<>();
for (IProjectConfig pc : workspaceChanges.getProjectsWithChangedDependencies()) {
XProjectManager pm = projectName2ProjectManager.get(pc.getName());
ProjectDescription pd = pm != null ? pm.getProjectDescription() : null;
if (pd != null) {
dependencyChanges.put(pd.getName(), ImmutableSet.copyOf(pd.getDependencies()));
}
}
if (!dependencyChanges.isEmpty()) {
fullIndex.setVisibleContainers(dependencyChanges);
}
workspaceChanges.merge(notifiedChanges);
return getIncrementalGenerateBuildable(workspaceChanges);
}
示例2
/** @return the set of projects that may contain resources that need to be rebuild given the list of changes */
protected Set<ProjectDescription> getAffectedProjects(List<IResourceDescription.Delta> changes) {
Set<String> changedProjectsNames = new HashSet<>();
for (IResourceDescription.Delta change : changes) {
XProjectManager projectManager = workspaceManager.getProjectManager(change.getUri());
ProjectDescription pd = projectManager.getProjectDescription();
changedProjectsNames.add(pd.getName());
}
Set<ProjectDescription> affectedProjects = new HashSet<>();
for (String changedProjectName : changedProjectsNames) {
affectedProjects.addAll(inversedDependencies.get(changedProjectName));
}
return affectedProjects;
}
示例3
/** Computes the build order of all projects in the workspace */
protected void computeOrder(ProjectDescription pd, LinkedHashSet<String> orderedProjects,
LinkedHashSet<String> projectStack) {
String pdName = pd.getName();
if (projectStack.contains(pdName)) {
for (String cyclicPD : projectStack) {
reportDependencyCycle(cyclicPD);
}
} else {
projectStack.add(pdName);
for (String depName : pd.getDependencies()) {
XProjectManager pm = workspaceManager.getProjectManager(depName);
if (pm != null) { // can be null if project not on disk
ProjectDescription depPd = pm.getProjectDescription();
computeOrder(depPd, orderedProjects, projectStack);
}
}
orderedProjects.add(pdName);
projectStack.remove(pdName);
}
}
示例4
/**
* Run a full build on the workspace
*
* @return the delta.
*/
public List<IResourceDescription.Delta> doInitialBuild(List<ProjectDescription> projects,
CancelIndicator indicator) {
lspLogger.log("Initial build ...");
ProjectBuildOrderInfo projectBuildOrderInfo = projectBuildOrderInfoProvider.get();
ProjectBuildOrderIterator pboIterator = projectBuildOrderInfo.getIterator(projects);
printBuildOrder();
List<IResourceDescription.Delta> result = new ArrayList<>();
while (pboIterator.hasNext()) {
ProjectDescription description = pboIterator.next();
String projectName = description.getName();
XProjectManager projectManager = workspaceManager.getProjectManager(projectName);
XBuildResult partialresult = projectManager.doInitialBuild(indicator);
result.addAll(partialresult.getAffectedResources());
}
lspLogger.log("... initial build done.");
return result;
}
示例5
@Override
public ProjectDescription getProjectDescription(IProjectConfig config) {
ProjectDescription projectDescription = super.getProjectDescription(config);
N4JSProjectConfig casted = (N4JSProjectConfig) config;
IN4JSProject project = casted.toProject();
if (project.getProjectType() == ProjectType.PLAINJS) {
return projectDescription;
}
FluentIterable
.from(project.getSortedDependencies())
.transform(IN4JSProject::getProjectName)
.transform(N4JSProjectName::getRawName)
.copyInto(projectDescription.getDependencies());
if (project.getProjectType() == ProjectType.DEFINITION) {
projectDescription.getDependencies().add(project.getDefinesPackageName().getRawName());
}
return projectDescription;
}
示例6
protected BuildRequest newBuildRequest(Procedure1<? super BuildRequest> init) {
BuildRequest result = new BuildRequest();
ResourceDescriptionsData newIndex = indexState.getResourceDescriptions().copy();
result.setBaseDir(uri(""));
XtextResourceSet rs = resourceSetProvider.get();
rs.getURIConverter().getURIHandlers().clear();
rs.getURIConverter().getURIHandlers().add(inMemoryURIHandler);
rs.setClasspathURIContext(AbstractIncrementalBuilderTest.class.getClassLoader());
ProjectDescription projectDescription = new ProjectDescription();
projectDescription.setName("test-project");
projectDescription.attachToEmfObject(rs);
ChunkedResourceDescriptions index = new ChunkedResourceDescriptions(Collections.emptyMap(), rs);
index.setContainer(projectDescription.getName(), newIndex);
result.setResourceSet(rs);
result.setDirtyFiles(new ArrayList<>());
result.setDeletedFiles(new ArrayList<>());
result.setAfterValidate((uri, issues) -> {
Iterables.addAll(this.issues, issues);
return Iterables.isEmpty(issues);
});
result.setAfterDeleteFile(f -> deleted.add(f));
result.setAfterGenerateFile((source, target) -> generated.put(source, target));
result.setState(new IndexState(newIndex, indexState.getFileMappings().copy()));
init.apply(result);
return result;
}
示例7
/** Adds a project to the workspace */
synchronized public void addProject(IProjectConfig projectConfig) {
XProjectManager projectManager = projectManagerProvider.get();
ProjectDescription projectDescription = projectDescriptionFactory.getProjectDescription(projectConfig);
projectManager.initialize(projectDescription, projectConfig, fullIndex, issueRegistry);
projectName2ProjectManager.put(projectDescription.getName(), projectManager);
fullIndex.setVisibleContainers(projectDescription.getName(), projectDescription.getDependencies());
}
示例8
/**
* Perform a build on all projects
*
* @param cancelIndicator
* cancellation support
*/
public void doInitialBuild(CancelIndicator cancelIndicator) {
List<ProjectDescription> newProjects = new ArrayList<>();
for (IProjectConfig projectConfig : getWorkspaceConfig().getProjects()) {
ProjectDescription projectDescription = projectDescriptionFactory.getProjectDescription(projectConfig);
newProjects.add(projectDescription);
}
List<Delta> deltas = buildManager.doInitialBuild(newProjects, cancelIndicator);
afterBuild(deltas);
}
示例9
@Override
public ProjectBuildOrderIterator visit(Collection<ProjectDescription> projectDescriptions) {
for (ProjectDescription prj : projectDescriptions) {
visitProjectNames.add(prj.getName());
}
return this;
}
示例10
/** Creates a new instance of {@link ProjectBuildOrderIterator}. The given set of projects will be visited only. */
@Override
public ProjectBuildOrderIterator getIterator(Collection<ProjectDescription> projectDescriptions) {
ProjectBuildOrderIterator iterator = getIterator();
iterator.visit(projectDescriptions);
return iterator;
}
示例11
private Map<ProjectDescription, Set<URI>> computeProjectToUriMap(Collection<URI> uris) {
Map<ProjectDescription, Set<URI>> project2uris = new HashMap<>();
for (URI uri : uris) {
XProjectManager projectManager = workspaceManager.getProjectManager(uri);
if (projectManager == null) {
continue; // happens when editing a package.json file in a newly created project
}
ProjectDescription projectDescription = projectManager.getProjectDescription();
if (!project2uris.containsKey(projectDescription)) {
project2uris.put(projectDescription, new HashSet<>());
}
project2uris.get(projectDescription).add(uri);
}
return project2uris;
}
示例12
/** Prints build order */
protected void printBuildOrder() {
if (LOG.isInfoEnabled()) {
ProjectBuildOrderInfo projectBuildOrderInfo = projectBuildOrderInfoProvider.get();
ProjectBuildOrderIterator visitAll = projectBuildOrderInfo.getIterator().visitAll();
String output = "Project build order:\n "
+ IteratorExtensions.join(visitAll, "\n ", ProjectDescription::getName);
LOG.info(output);
}
}
示例13
/** Initialize this project. */
@SuppressWarnings("hiding")
public void initialize(ProjectDescription description, IProjectConfig projectConfig,
ConcurrentChunkedIndex fullIndex, ConcurrentIssueRegistry issueRegistry) {
this.projectDescription = description;
this.projectConfig = projectConfig;
this.fullIndex = fullIndex;
this.issueRegistry = issueRegistry;
this.resourceSet = createNewResourceSet(new XIndexState().getResourceDescriptions());
}
示例14
@Override
public Set<OutputConfiguration> getOutputConfigurations(ResourceSet context) {
EList<Resource> resources = context.getResources();
if (resources.isEmpty()) {
ProjectDescription description = ProjectDescription.findInEmfObject(context);
IN4JSProject project = n4jsCore.findProject(new N4JSProjectName(description.getName())).orNull();
return getOutputConfigurationSet(project);
}
return getOutputConfigurations(resources.get(0));
}
示例15
/** Bring the given project description up-to-date with the receiving project configuration's internal state. */
public void updateProjectDescription(ProjectDescription projectDescriptionToUpdate) {
String currName = ((N4JSProject) delegate).getProjectName().getRawName();
List<String> currDeps = ((N4JSProject) delegate).getAllDependenciesAndImplementedApiNames();
projectDescriptionToUpdate.setName(currName);
projectDescriptionToUpdate.setDependencies(currDeps);
}
示例16
@Override
public void setUp() throws Exception {
super.setUp();
if (ReusedTypeProviderTest.typeProvider == null) {
String pathToSources = "/org/eclipse/xtext/common/types/testSetups";
List<String> files = ReusedTypeProviderTest.readResource(pathToSources + "/files.list");
ResourceDescriptionsData part = new ResourceDescriptionsData(Collections.emptySet());
XtextResourceSet resourceSet = resourceSetProvider.get();
ProjectDescription projectDesc = new ProjectDescription();
projectDesc.setName("my-test-project");
projectDesc.attachToEmfObject(resourceSet);
ChunkedResourceDescriptions index = new ChunkedResourceDescriptions(Collections.emptyMap(), resourceSet);
index.setContainer(projectDesc.getName(), part);
resourceSet.setClasspathURIContext(ReusedTypeProviderTest.class.getClassLoader());
typeProviderFactory.createTypeProvider(resourceSet);
BuildRequest buildRequest = new BuildRequest();
for (String file : files) {
if (file != null) {
String fullPath = pathToSources + "/" + file;
URL url = ReusedTypeProviderTest.class.getResource(fullPath);
buildRequest.getDirtyFiles().add(URI.createURI(url.toExternalForm()));
}
}
buildRequest.setResourceSet(resourceSet);
buildRequest.setState(new IndexState(part, new Source2GeneratedMapping()));
builder.build(buildRequest, (URI it) -> {
return resourceServiceProviderRegistry.getResourceServiceProvider(it);
});
ReusedTypeProviderTest.typeProvider = typeProviderFactory.findTypeProvider(resourceSet);
}
}
示例17
@Test
public void testGetIndexedJvmTypeByURI() throws ClassNotFoundException {
ProjectDescription projectDescription = new ProjectDescription();
projectDescription.setName("test-project");
ChunkedResourceDescriptions index = new ChunkedResourceDescriptions(Collections.emptyMap(), resourceSet);
ResourceDescriptionsData data = new ResourceDescriptionsData(new ArrayList<>());
index.setContainer(projectDescription.getName(), data);
ResourceDescriptionsData.ResourceSetAdapter.installResourceDescriptionsData(resourceSet, data);
Resource resource = resourceSet.createResource(URI.createURI("test.typesRefactoring"));
BinaryClass binaryClass = BinaryClass.forName("testdata.Outer", getClass().getClassLoader());
JvmDeclaredType outerType = declaredTypeFactory.createType(binaryClass);
resource.getContents().add(outerType);
JvmDeclaredType innerType = findType(outerType, "Inner");
JvmDeclaredType innerMostType = findType(outerType, "InnerMost");
IResourceServiceProvider serviceProvider = IResourceServiceProvider.Registry.INSTANCE.getResourceServiceProvider(resource.getURI());
IResourceDescription description = serviceProvider.getResourceDescriptionManager().getResourceDescription(resource);
data.addDescription(description.getURI(), description);
URI javaObjectURI = EcoreUtil.getURI(getOperation(outerType, "getOuter").getReturnType().getType());
EObject outerTypeFromIndex = indexedJvmTypeAccess.getIndexedJvmType(javaObjectURI , resourceSet);
assertSame(outerType, outerTypeFromIndex);
javaObjectURI = EcoreUtil.getURI(getOperation(outerType, "getInner").getReturnType().getType());
EObject innerTypeFromIndex = indexedJvmTypeAccess.getIndexedJvmType(javaObjectURI , resourceSet);
assertSame(innerType, innerTypeFromIndex);
javaObjectURI = EcoreUtil.getURI(getOperation(outerType, "getInnerMost").getReturnType().getType());
EObject innerMostTypeFromIndex = indexedJvmTypeAccess.getIndexedJvmType(javaObjectURI , resourceSet);
assertSame(innerMostType, innerMostTypeFromIndex);
}
示例18
@Override
public IContainer getContainer(IResourceDescription desc, IResourceDescriptions resourceDescriptions) {
ChunkedResourceDescriptions descriptions = getChunkedResourceDescriptions(resourceDescriptions);
if (descriptions == null)
throw new IllegalArgumentException("Expected " + ChunkedResourceDescriptions.class.getName());
return createContainer(resourceDescriptions, descriptions,
ProjectDescription.findInEmfObject(descriptions.getResourceSet()).getName());
}
示例19
@Override
public List<IContainer> getVisibleContainers(IResourceDescription desc,
IResourceDescriptions resourceDescriptions) {
ChunkedResourceDescriptions descriptions = getChunkedResourceDescriptions(resourceDescriptions);
if (descriptions == null)
throw new IllegalArgumentException("Expected " + ChunkedResourceDescriptions.class.getName());
ProjectDescription projectDescription = ProjectDescription.findInEmfObject(descriptions.getResourceSet());
List<IContainer> allContainers = new ArrayList<>();
allContainers.add(createContainer(resourceDescriptions, descriptions, projectDescription.getName()));
for (String name : projectDescription.getDependencies())
allContainers.add(createContainer(resourceDescriptions, descriptions, name));
return allContainers;
}
示例20
public void assertEquals(final List<ProjectDescription> expected, final List<ProjectDescription> actual) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("Expected: ");
String _asString = this.asString(expected);
_builder.append(_asString);
_builder.append(" but was ");
String _asString_1 = this.asString(actual);
_builder.append(_asString_1);
Assert.assertEquals(_builder.toString(), expected, actual);
}
示例21
/**
* Run an initial build
*
* @return the delta.
*/
public List<IResourceDescription.Delta> doInitialBuild(List<ProjectDescription> projects,
CancelIndicator indicator) {
List<ProjectDescription> sortedDescriptions = sortByDependencies(projects);
List<IResourceDescription.Delta> result = new ArrayList<>();
for (ProjectDescription description : sortedDescriptions) {
IncrementalBuilder.Result partialresult = workspaceManager.getProjectManager(description.getName())
.doInitialBuild(indicator);
result.addAll(partialresult.getAffectedResources());
}
return result;
}
示例22
public void initialize(ProjectDescription description, IProjectConfig projectConfig,
Procedure2<? super URI, ? super Iterable<Issue>> acceptor,
IExternalContentSupport.IExternalContentProvider openedDocumentsContentProvider,
Provider<Map<String, ResourceDescriptionsData>> indexProvider, CancelIndicator cancelIndicator) {
this.projectDescription = description;
this.projectConfig = projectConfig;
this.baseDir = projectConfig.getPath();
this.issueAcceptor = acceptor;
this.openedDocumentsContentProvider = openedDocumentsContentProvider;
this.indexProvider = indexProvider;
}
示例23
public List<ProjectDescription> sortByDependencies(Iterable<ProjectDescription> descriptions,
Procedure1<? super ProjectDescription> cyclicAcceptor) {
this.cyclicAcceptor = cyclicAcceptor::apply;
name2entry = new LinkedHashMap<>();
for (ProjectDescription project : descriptions) {
Entry entry = new TopologicalSorter.Entry(project);
name2entry.put(entry.description.getName(), entry);
}
result = new LinkedHashSet<>();
name2entry.values().forEach(it -> visit(it));
return Lists.newArrayList(result);
}
示例24
@Override
public ProjectDescription getProjectDescription(IProjectConfig config) {
ProjectDescription result = new ProjectDescription();
result.setName(config.getName());
return result;
}
示例25
@Override
public ProjectDescription next() {
return iteratorDelegate.next();
}
示例26
/** Run the build on the workspace */
protected List<IResourceDescription.Delta> doIncrementalBuild(boolean doGenerate, CancelIndicator cancelIndicator) {
lspLogger.log("Building ...");
try {
Set<URI> dirtyFilesToBuild = new LinkedHashSet<>(this.dirtyFiles);
Set<URI> deletedFilesToBuild = new LinkedHashSet<>(this.deletedFiles);
if (doGenerate) {
dirtyFilesToBuild.addAll(this.dirtyFilesAwaitingGeneration);
deletedFilesToBuild.addAll(this.deletedFilesAwaitingGeneration);
}
Map<ProjectDescription, Set<URI>> project2dirty = computeProjectToUriMap(dirtyFilesToBuild);
Map<ProjectDescription, Set<URI>> project2deleted = computeProjectToUriMap(deletedFilesToBuild);
SetView<ProjectDescription> changedPDs = Sets.union(project2dirty.keySet(), project2deleted.keySet());
ProjectBuildOrderInfo projectBuildOrderInfo = projectBuildOrderInfoProvider.get();
ProjectBuildOrderIterator pboIterator = projectBuildOrderInfo.getIterator(changedPDs);
while (pboIterator.hasNext()) {
ProjectDescription descr = pboIterator.next();
XProjectManager projectManager = workspaceManager.getProjectManager(descr.getName());
Set<URI> projectDirty = project2dirty.getOrDefault(descr, Collections.emptySet());
Set<URI> projectDeleted = project2deleted.getOrDefault(descr, Collections.emptySet());
// the projectResult might contain partial information in case the build was cancelled
XBuildResult projectResult = projectManager.doIncrementalBuild(projectDirty, projectDeleted,
allBuildDeltas, doGenerate, cancelIndicator);
List<Delta> newlyBuiltDeltas = projectResult.getAffectedResources();
recordBuildProgress(newlyBuiltDeltas, doGenerate);
pboIterator.visitAffected(newlyBuiltDeltas);
}
List<IResourceDescription.Delta> result = allBuildDeltas;
allBuildDeltas = new ArrayList<>();
lspLogger.log("... build done.");
return result;
} catch (CancellationException ce) {
lspLogger.log("... build canceled.");
throw ce;
} catch (Throwable th) {
if (operationCanceledManager.isOperationCanceledException(th)) {
lspLogger.log("... build canceled.");
operationCanceledManager.propagateIfCancelException(th);
}
// unknown exception or error (and not a cancellation case):
// recover and also discard the build queue - state is undefined afterwards.
this.dirtyFiles.clear();
this.deletedFiles.clear();
this.dirtyFilesAwaitingGeneration.clear();
this.deletedFilesAwaitingGeneration.clear();
String eStr = th.getMessage() + " (" + th.getClass().getSimpleName() + ")";
lspLogger.log("... build ABORTED due to exception: " + eStr);
throw th;
}
}
示例27
/** Getter */
public ProjectDescription getProjectDescription() {
return projectDescription;
}
示例28
/** Creates a new instance of {@link IOrderIterator}. The given set of projects will be visited only. */
public IOrderIterator<T> getIterator(Collection<ProjectDescription> elements);
示例29
@Override
public WorkspaceChanges update(URI changedResource, Function<String, ProjectDescription> pdProvider) {
// TODO Auto-generated method stub
return null;
}
示例30
/** Updates internal data based on changes of the given resource */
WorkspaceChanges update(URI changedResource, Function<String, ProjectDescription> pdProvider);