Search in sources :

Example 6 with Rule

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);
}
Also used : INode(org.eclipse.xtext.nodemodel.INode) Region(org.eclipse.jface.text.Region) IParseResult(org.eclipse.xtext.parser.IParseResult) WildcardRule(com.avaloq.tools.ddk.xtext.format.format.WildcardRule) GrammarRule(com.avaloq.tools.ddk.xtext.format.format.GrammarRule) Rule(com.avaloq.tools.ddk.xtext.format.format.Rule)

Example 7 with Rule

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;
}
Also used : FormatConfiguration(com.avaloq.tools.ddk.xtext.format.format.FormatConfiguration) WildcardRule(com.avaloq.tools.ddk.xtext.format.format.WildcardRule) GrammarRule(com.avaloq.tools.ddk.xtext.format.format.GrammarRule) WildcardRule(com.avaloq.tools.ddk.xtext.format.format.WildcardRule) GrammarRule(com.avaloq.tools.ddk.xtext.format.format.GrammarRule) Rule(com.avaloq.tools.ddk.xtext.format.format.Rule)

Example 8 with Rule

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;
                }
            });
        }
    });
}
Also used : IUnitOfWork(org.eclipse.xtext.util.concurrent.IUnitOfWork) IModificationContext(org.eclipse.xtext.ui.editor.model.edit.IModificationContext) XtextResource(org.eclipse.xtext.resource.XtextResource) Rule(com.avaloq.tools.ddk.xtext.format.format.Rule) BadLocationException(org.eclipse.jface.text.BadLocationException) IModification(org.eclipse.xtext.ui.editor.model.edit.IModification) Fix(org.eclipse.xtext.ui.editor.quickfix.Fix)

Example 9 with Rule

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;
}
Also used : GrammarRule(com.avaloq.tools.ddk.xtext.format.format.GrammarRule) EnumRule(org.eclipse.xtext.EnumRule) WildcardRule(com.avaloq.tools.ddk.xtext.format.format.WildcardRule) GrammarRule(com.avaloq.tools.ddk.xtext.format.format.GrammarRule) TerminalRule(org.eclipse.xtext.TerminalRule) ParserRule(org.eclipse.xtext.ParserRule) AbstractRule(org.eclipse.xtext.AbstractRule) Rule(com.avaloq.tools.ddk.xtext.format.format.Rule) Predicate(com.google.common.base.Predicate)

Aggregations

Rule (com.avaloq.tools.ddk.xtext.format.format.Rule)9 GrammarRule (com.avaloq.tools.ddk.xtext.format.format.GrammarRule)7 WildcardRule (com.avaloq.tools.ddk.xtext.format.format.WildcardRule)7 AbstractRule (org.eclipse.xtext.AbstractRule)5 EnumRule (org.eclipse.xtext.EnumRule)5 ParserRule (org.eclipse.xtext.ParserRule)5 TerminalRule (org.eclipse.xtext.TerminalRule)5 FormatConfiguration (com.avaloq.tools.ddk.xtext.format.format.FormatConfiguration)4 Predicate (com.google.common.base.Predicate)2 BadLocationException (org.eclipse.jface.text.BadLocationException)2 XtextResource (org.eclipse.xtext.resource.XtextResource)2 IModification (org.eclipse.xtext.ui.editor.model.edit.IModification)2 IModificationContext (org.eclipse.xtext.ui.editor.model.edit.IModificationContext)2 Fix (org.eclipse.xtext.ui.editor.quickfix.Fix)2 IUnitOfWork (org.eclipse.xtext.util.concurrent.IUnitOfWork)2 Check (org.eclipse.xtext.validation.Check)2 Region (org.eclipse.jface.text.Region)1 INode (org.eclipse.xtext.nodemodel.INode)1 IParseResult (org.eclipse.xtext.parser.IParseResult)1