use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatHyperlinkHelper method createHyperlinksByOffset.
/**
* {@inheritDoc}
*/
@Override
public void createHyperlinksByOffset(final XtextResource resource, final int offset, final IHyperlinkAcceptor acceptor) {
final IParseResult parseResult = resource.getParseResult();
if (parseResult == null || parseResult.getRootNode() == null) {
// Return, no need to call in super.createAdditionalHyperlinks
return;
}
// Check if the current parse tree node represents an override keyword, in which case we want to link
// to the overridden rule
INode node = NodeModelUtils.findLeafNodeAtOffset(parseResult.getRootNode(), offset);
if (node != null && isOverrideKeyword(node.getGrammarElement())) {
Rule rule = (Rule) eObjectAtOffsetHelper.resolveElementAt(resource, offset);
Region region = new Region(node.getOffset(), node.getLength());
List<Rule> extendedRules = getExtendedRules(rule);
for (Rule extendedRule : extendedRules) {
createHyperlinksTo(resource, region, extendedRule, acceptor);
}
}
super.createHyperlinksByOffset(resource, offset, acceptor);
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatHyperlinkHelper method getExtendedRules.
/**
* Gets all extended rules.
*
* @param rule
* the rule
* @return list with all extended rules
*/
private List<Rule> getExtendedRules(final Rule rule) {
FormatConfiguration model = EObjectUtil.eContainer(rule, FormatConfiguration.class);
List<Rule> result = Lists.newArrayList();
for (FormatConfiguration extendedModel : getExtendedModels(model)) {
for (Rule candidate : extendedModel.getRules()) {
if (//
rule instanceof GrammarRule && candidate instanceof GrammarRule && ((GrammarRule) rule).getTargetRule().equals(((GrammarRule) candidate).getTargetRule())) {
result.add(candidate);
} else if (rule instanceof WildcardRule && candidate instanceof WildcardRule) {
result.add(candidate);
}
}
}
return result;
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatQuickfixProvider method setOverride.
/**
* Semantic quickfix setting the override flag for a rule.
*
* @param issue
* the issue
* @param acceptor
* the acceptor
*/
@Fix(FormatValidator.OVERRIDE_MISSING_CODE)
public void setOverride(final Issue issue, final IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, "Set override", "Set override flag.", null, new IModification() {
@Override
public void apply(final IModificationContext context) throws BadLocationException {
context.getXtextDocument().modify(new IUnitOfWork<Void, XtextResource>() {
@Override
public java.lang.Void exec(final XtextResource state) {
Rule rule = (Rule) state.getEObject(issue.getUriToProblem().fragment());
rule.setOverride(true);
return null;
}
});
}
});
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatGeneratorUtil method getAllGrammarRules.
/**
* Gets all GrammarRules in the inheritance hierarchy, including overridden rules.
*
* @param model
* the model
* @return the all grammar rules
*/
private static List<GrammarRule> getAllGrammarRules(final FormatConfiguration model) {
List<GrammarRule> allRules = Lists.newArrayList();
if (model.getExtendedFormatConfiguration() != null && !model.getExtendedFormatConfiguration().eIsProxy()) {
allRules.addAll(getAllGrammarRules(model.getExtendedFormatConfiguration()));
}
Predicate<Rule> resolvedGrammarRules = new Predicate<Rule>() {
@Override
public boolean apply(final Rule input) {
return input instanceof GrammarRule && ((GrammarRule) input).getTargetRule() != null && !((GrammarRule) input).getTargetRule().eIsProxy();
}
};
for (Rule rule : Iterables.filter(model.getRules(), resolvedGrammarRules)) {
allRules.add((GrammarRule) rule);
}
return allRules;
}
Aggregations