use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatQuickfixProvider method removeOverride.
/**
* Semantic quickfix removing the override flag for a rule.
*
* @param issue
* the issue
* @param acceptor
* the acceptor
*/
@Fix(FormatJavaValidator.OVERRIDE_ILLEGAL_CODE)
public void removeOverride(final Issue issue, final IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, "Remove override", "Remove override.", 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(false);
return null;
}
});
}
});
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatExtensions 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;
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatJavaValidator method checkOverrideMissing.
/**
* Checks that rules declare overrides when there is a corresponding inherited rule.
*
* @param model
* the model
*/
@Check
public void checkOverrideMissing(final FormatConfiguration model) {
FormatConfiguration extendedModel = model.getExtendedFormatConfiguration();
if (extendedModel == null || extendedModel.eIsProxy()) {
return;
}
Iterable<Rule> nonOverrideRules = Iterables.filter(model.getRules(), Predicates.not(IS_OVERRIDE));
Iterable<Rule> overriddenRules = collectRules(extendedModel);
Map<AbstractRule, GrammarRule> localAbstractRuleMap = Maps.newHashMap();
for (GrammarRule rule : Iterables.filter(nonOverrideRules, GrammarRule.class)) {
localAbstractRuleMap.put(TARGET_RULE.apply(rule), rule);
}
// Check GrammarRules
for (GrammarRule overriddenRule : Iterables.filter(overriddenRules, GrammarRule.class)) {
if (localAbstractRuleMap.containsKey(TARGET_RULE.apply(overriddenRule))) {
GrammarRule localRule = localAbstractRuleMap.get(TARGET_RULE.apply(overriddenRule));
error(OVERRIDE_MISSING_MESSAGE, localRule, FormatPackage.Literals.GRAMMAR_RULE__TARGET_RULE, OVERRIDE_MISSING_CODE);
}
}
// Check WildcardRule
if (!Iterables.isEmpty(Iterables.filter(nonOverrideRules, WildcardRule.class)) && !Iterables.isEmpty(Iterables.filter(overriddenRules, WildcardRule.class))) {
error(OVERRIDE_MISSING_MESSAGE, Iterables.filter(nonOverrideRules, WildcardRule.class).iterator().next(), null, OVERRIDE_MISSING_CODE);
}
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatJavaValidator method collectRules.
/**
* Collect all rules contained by the given model (including any of its extended configurations).
*
* @param model
* the model
* @return all rules
*/
private Iterable<Rule> collectRules(final FormatConfiguration model) {
Iterable<Rule> result = model.getRules();
FormatConfiguration extendedModel = model.getExtendedFormatConfiguration();
if (extendedModel != null && !extendedModel.eIsProxy()) {
result = Iterables.concat(result, collectRules(extendedModel));
}
return result;
}
use of com.avaloq.tools.ddk.xtext.format.format.Rule in project dsl-devkit by dsldevkit.
the class FormatJavaValidator method checkIllegalOverride.
/**
* Checks that no rule declares override when there is no corresponding inherited rule.
*
* @param model
* the model
*/
@Check
public void checkIllegalOverride(final FormatConfiguration model) {
Iterable<Rule> overrideRules = Iterables.filter(model.getRules(), IS_OVERRIDE);
Iterable<Rule> overrideableRules = Lists.newArrayList();
FormatConfiguration extendedModel = model.getExtendedFormatConfiguration();
if (extendedModel != null && !extendedModel.eIsProxy()) {
overrideableRules = collectRules(extendedModel);
}
Map<AbstractRule, GrammarRule> overrideableAbstractRuleMap = Maps.newHashMap();
for (GrammarRule rule : Iterables.filter(overrideableRules, GrammarRule.class)) {
overrideableAbstractRuleMap.put(TARGET_RULE.apply(rule), rule);
}
// Check GrammarRules
for (GrammarRule overrideRule : Iterables.filter(overrideRules, GrammarRule.class)) {
if (!overrideableAbstractRuleMap.containsKey(TARGET_RULE.apply(overrideRule))) {
error(OVERRIDE_ILLEGAL_MESSAGE, overrideRule, FormatPackage.Literals.GRAMMAR_RULE__TARGET_RULE, OVERRIDE_ILLEGAL_CODE);
}
}
// Check WildcardRule
if (!Iterables.isEmpty(Iterables.filter(overrideRules, WildcardRule.class)) && Iterables.isEmpty(Iterables.filter(overrideableRules, WildcardRule.class))) {
error(OVERRIDE_ILLEGAL_MESSAGE, Iterables.filter(overrideRules, WildcardRule.class).iterator().next(), null, OVERRIDE_ILLEGAL_CODE);
}
}
Aggregations