use of org.eclipse.xtext.naming.IQualifiedNameProvider in project dsl-devkit by dsldevkit.
the class CheckMarkerHelpExtensionHelper method doUpdateExtension.
@Override
protected void doUpdateExtension(final CheckCatalog catalog, final IPluginExtension extension, final Iterable<IPluginElement> elements) throws CoreException {
final IQualifiedNameProvider nameProvider = getFromServiceProvider(IQualifiedNameProvider.class, catalog);
// Get current marker help element context IDs for this catalog
List<String> catalogContextIds = Lists.newArrayList();
for (final Check check : catalog.getAllChecks()) {
catalogContextIds.add(getQualifiedContextId(extension, check));
}
// Remove elements of this catalog
for (IPluginElement e : elements) {
if (e.getAttribute(CONTEXT_ID_ATTRIBUTE_TAG) != null) {
String contextId = e.getAttribute(CONTEXT_ID_ATTRIBUTE_TAG).getValue();
if (isCatalogContextId(nameProvider.apply(catalog), EcoreUtil.getURI(catalog), extension, contextId)) {
extension.remove(e);
}
}
}
// Add new elements
Iterable<? extends IPluginObject> updatedElements = getElements(catalog, extension);
for (IPluginObject object : updatedElements) {
extension.add(object);
}
}
use of org.eclipse.xtext.naming.IQualifiedNameProvider in project dsl-devkit by dsldevkit.
the class CheckMarkerHelpExtensionHelper method isExtensionUpdateRequired.
@Override
protected boolean isExtensionUpdateRequired(final CheckCatalog catalog, final IPluginExtension extension, final Iterable<IPluginElement> elements) {
// TODO should check if this check is too expensive; consider rewriting contents instead
if (!super.isExtensionUpdateRequired(catalog, extension, elements)) {
return false;
}
final IQualifiedNameProvider nameProvider = getFromServiceProvider(IQualifiedNameProvider.class, catalog);
// collect all data in the extension model: mapping<context id, pair<execution mode, issue code>>
HashMultimap<String, Pair<String, String>> contextToValue = HashMultimap.<String, Pair<String, String>>create();
for (IPluginElement e : elements) {
if (e.getAttribute(CONTEXT_ID_ATTRIBUTE_TAG) != null) {
String contextId = e.getAttribute(CONTEXT_ID_ATTRIBUTE_TAG).getValue();
String mode = e.getAttribute(MARKERTYPE_ATTRIBUTE_TAG).getValue();
if (isCatalogContextId(nameProvider.apply(catalog), EcoreUtil.getURI(catalog), extension, contextId)) {
for (IPluginObject o : e.getChildren()) {
if (o instanceof IPluginElement && ((IPluginElement) o).getAttribute(ATTRIBUTE_VALUE_TAG) != null) {
// NOPMD
IPluginAttribute attribute = ((IPluginElement) o).getAttribute(ATTRIBUTE_VALUE_TAG);
contextToValue.put(contextId, Tuples.create(mode, attribute.getValue()));
}
}
}
}
}
// check that the real model and the extension model have the same number of issue codes
Iterable<String> allExtensionIssueCodes = Iterables.transform(contextToValue.values(), new Function<Pair<String, String>, String>() {
@Override
public String apply(final Pair<String, String> input) {
return input.getSecond();
}
});
if (Iterables.size(allExtensionIssueCodes) != Sets.newHashSet(getAllIssueCodeValues(catalog)).size()) {
return true;
}
// check all relevant data, e.g. detect change of execution mode
for (final Check check : catalog.getAllChecks()) {
final Iterable<String> allModelIssueCodes = getIssueCodeValues(check);
for (final String issueCode : allModelIssueCodes) {
final String contextId = getQualifiedContextId(extension, check);
if (contextToValue.containsKey(contextId)) {
Set<Pair<String, String>> modeToValues = contextToValue.get(contextId);
try {
Iterables.find(modeToValues, new Predicate<Pair<String, String>>() {
@Override
public boolean apply(final Pair<String, String> input) {
return input.getFirst().equals(getCheckType(check)) && input.getSecond().equals(issueCode);
}
});
} catch (NoSuchElementException e) {
return true;
}
} else {
// context id not present in extension model
return true;
}
}
}
return false;
}
use of org.eclipse.xtext.naming.IQualifiedNameProvider in project dsl-devkit by dsldevkit.
the class CatalogFromExtensionPointScope method getAllLocalElements.
@Override
protected Iterable<IEObjectDescription> getAllLocalElements() {
loadDefinitions();
if (loadedModel == null) {
return ImmutableList.of();
}
XtextResource resource = (XtextResource) loadedModel.eResource();
IQualifiedNameProvider nameProvider = resource.getResourceServiceProvider().get(IQualifiedNameProvider.class);
return Scopes.scopedElementsFor(ImmutableList.of(loadedModel), nameProvider);
}
use of org.eclipse.xtext.naming.IQualifiedNameProvider in project xtext-core by eclipse.
the class DefaultResourceDescriptionManagerTest method setUp.
@Before
public void setUp() throws Exception {
EObject copy = EcoreUtil.copy(EcorePackage.eINSTANCE);
resource = new ResourceImpl();
resource.getContents().add(copy);
IQualifiedNameProvider nameProvider = new IQualifiedNameProvider.AbstractImpl() {
@Override
public QualifiedName getFullyQualifiedName(EObject obj) {
if (obj instanceof ENamedElement)
return QualifiedName.create(((ENamedElement) obj).getName());
return null;
}
};
DefaultResourceDescriptionStrategy descriptionStrategy = new DefaultResourceDescriptionStrategy();
descriptionStrategy.setQualifiedNameProvider(nameProvider);
resourceDescription = new DefaultResourceDescription(resource, descriptionStrategy) {
@Override
public Iterable<QualifiedName> getImportedNames() {
return importedNames;
}
};
manager = new DefaultResourceDescriptionManager();
importedNames = Collections.emptySet();
}
use of org.eclipse.xtext.naming.IQualifiedNameProvider in project xtext-core by eclipse.
the class ResourceSetBasedResourceDescriptionsTest method setUp.
@Before
public void setUp() throws Exception {
resourceSet = new ResourceSetImpl();
IQualifiedNameProvider qualifiedNameProvider = new IQualifiedNameProvider.AbstractImpl() {
@Override
public QualifiedName getFullyQualifiedName(EObject obj) {
return QualifiedName.create(((ENamedElement) obj).getName());
}
@Override
public QualifiedName apply(EObject from) {
return QualifiedName.create(((ENamedElement) from).getName());
}
};
resourceDescriptionManager = new DefaultResourceDescriptionManager();
resourceDescriptionManager.setCache(IResourceScopeCache.NullImpl.INSTANCE);
DefaultResourceDescriptionStrategy strategy = new DefaultResourceDescriptionStrategy();
strategy.setQualifiedNameProvider(qualifiedNameProvider);
resourceDescriptionManager.setStrategy(strategy);
resDescs = new ResourceSetBasedResourceDescriptions();
resDescs.setContext(resourceSet);
resDescs.setRegistry(this);
container = new ResourceDescriptionsBasedContainer(resDescs);
}
Aggregations