Search in sources :

Example 36 with Fix

use of org.eclipse.xtext.ui.editor.quickfix.Fix in project xtext-eclipse by eclipse.

the class XtextGrammarQuickfixProvider method fixInvalidMetaModelName.

@Fix(INVALID_METAMODEL_NAME)
public void fixInvalidMetaModelName(final Issue issue, IssueResolutionAcceptor acceptor) {
    final String metaModelName = issue.getData()[0];
    acceptor.accept(issue, "Fix metamodel name '" + metaModelName + "'", "Fix metamodel name '" + metaModelName + "'", NULL_QUICKFIX_IMAGE, new IModification() {

        @Override
        public void apply(IModificationContext context) throws Exception {
            context.getXtextDocument().replace(issue.getOffset(), issue.getLength(), Strings.toFirstLower(metaModelName));
        }
    });
}
Also used : IModificationContext(org.eclipse.xtext.ui.editor.model.edit.IModificationContext) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) BadLocationException(org.eclipse.jface.text.BadLocationException) IOException(java.io.IOException) IModification(org.eclipse.xtext.ui.editor.model.edit.IModification) Fix(org.eclipse.xtext.ui.editor.quickfix.Fix)

Example 37 with Fix

use of org.eclipse.xtext.ui.editor.quickfix.Fix in project xtext-eclipse by eclipse.

the class XtextGrammarQuickfixProvider method fixTerminalRuleName.

@Fix(INVALID_TERMINALRULE_NAME)
public void fixTerminalRuleName(final Issue issue, IssueResolutionAcceptor acceptor) {
    if (issue.getData().length == 1) {
        final String upperCase = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, issue.getData()[0]).toString();
        acceptor.accept(issue, "Change name to " + upperCase, "Change name to " + upperCase, "upcase.png", new IModification() {

            @Override
            public void apply(IModificationContext context) throws Exception {
                final IXtextDocument xtextDocument = context.getXtextDocument();
                xtextDocument.replace(issue.getOffset(), issue.getLength(), upperCase);
                xtextDocument.modify(new IUnitOfWork.Void<XtextResource>() {

                    @Override
                    public void process(XtextResource state) throws Exception {
                        final EObject terminalRule = state.getEObject(issue.getUriToProblem().fragment());
                        Iterable<RuleCall> candidates = Iterables.filter(Iterables.filter(Lists.newArrayList(state.getAllContents()), RuleCall.class), new Predicate<RuleCall>() {

                            @Override
                            public boolean apply(RuleCall ruleCall) {
                                return ruleCall.getRule() == terminalRule;
                            }
                        });
                        for (RuleCall ruleCall : candidates) {
                            List<INode> nodes = NodeModelUtils.findNodesForFeature(ruleCall, XtextPackage.eINSTANCE.getRuleCall_Rule());
                            for (INode node : nodes) {
                                ITextRegion textRegion = node.getTextRegion();
                                xtextDocument.replace(textRegion.getOffset(), textRegion.getLength(), upperCase);
                            }
                        }
                    }
                });
            }
        });
    }
}
Also used : INode(org.eclipse.xtext.nodemodel.INode) XtextResource(org.eclipse.xtext.resource.XtextResource) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) BadLocationException(org.eclipse.jface.text.BadLocationException) IOException(java.io.IOException) RuleCall(org.eclipse.xtext.RuleCall) ITextRegion(org.eclipse.xtext.util.ITextRegion) EObject(org.eclipse.emf.ecore.EObject) IModificationContext(org.eclipse.xtext.ui.editor.model.edit.IModificationContext) IModification(org.eclipse.xtext.ui.editor.model.edit.IModification) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument) Fix(org.eclipse.xtext.ui.editor.quickfix.Fix)

Example 38 with Fix

use of org.eclipse.xtext.ui.editor.quickfix.Fix in project xtext-eclipse by eclipse.

the class XtextGrammarQuickfixProvider method fixConvertTerminalFragmentToTerminalRule.

@Fix(INVALID_HIDDEN_TOKEN_FRAGMENT)
@Fix(INVALID_TERMINAL_FRAGMENT_RULE_REFERENCE)
public void fixConvertTerminalFragmentToTerminalRule(Issue issue, IssueResolutionAcceptor acceptor) {
    // 
    acceptor.accept(// 
    issue, // 
    "Convert terminal fragment to terminal rule", // 
    "Convert terminal fragment to terminal rule", // 
    NULL_QUICKFIX_IMAGE, (context) -> {
        IXtextDocument xtextDocument = context.getXtextDocument();
        xtextDocument.modify(new IUnitOfWork.Void<XtextResource>() {

            @Override
            public void process(XtextResource state) throws Exception {
                if (state == null) {
                    return;
                }
                EObject eObject = state.getEObject(issue.getUriToProblem().fragment());
                AbstractRule rule = null;
                if (eObject instanceof Grammar) {
                    rule = ((Grammar) eObject).getHiddenTokens().get(Integer.valueOf(issue.getData()[0]).intValue());
                } else if (eObject instanceof ParserRule) {
                    rule = ((ParserRule) eObject).getHiddenTokens().get(Integer.valueOf(issue.getData()[0]).intValue());
                } else if (eObject instanceof RuleCall) {
                    RuleCall ruleCall = (RuleCall) state.getEObject(issue.getUriToProblem().fragment());
                    rule = ruleCall.getRule();
                }
                if (rule != null) {
                    ICompositeNode ruleNode = NodeModelUtils.findActualNodeFor(rule);
                    for (INode node : ruleNode.getAsTreeIterable()) {
                        if (node.getGrammarElement() != null && node.getGrammarElement() == grammarAccess.getTerminalRuleAccess().getFragmentFragmentKeyword_2_0_0_0()) {
                            ITextRegion fragmentRegion = node.getTextRegion();
                            ICompositeNode compositeNode = (ICompositeNode) node.getNextSibling();
                            if (compositeNode.getFirstChild().getGrammarElement() == grammarAccess.getWSRule()) {
                                xtextDocument.replace(fragmentRegion.getOffset(), fragmentRegion.getLength() + 1, "");
                            } else {
                                xtextDocument.replace(fragmentRegion.getOffset(), fragmentRegion.getLength(), "");
                            }
                            break;
                        }
                    }
                }
            }
        });
    });
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) INode(org.eclipse.xtext.nodemodel.INode) XtextResource(org.eclipse.xtext.resource.XtextResource) Grammar(org.eclipse.xtext.Grammar) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) BadLocationException(org.eclipse.jface.text.BadLocationException) IOException(java.io.IOException) RuleCall(org.eclipse.xtext.RuleCall) IUnitOfWork(org.eclipse.xtext.util.concurrent.IUnitOfWork) ITextRegion(org.eclipse.xtext.util.ITextRegion) EObject(org.eclipse.emf.ecore.EObject) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) AbstractRule(org.eclipse.xtext.AbstractRule) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument) Fix(org.eclipse.xtext.ui.editor.quickfix.Fix)

Example 39 with Fix

use of org.eclipse.xtext.ui.editor.quickfix.Fix in project xtext-eclipse by eclipse.

the class XbaseQuickfixProvider method fixTypeArguments.

@Fix(IssueCodes.INVALID_TYPE_ARGUMENTS_ON_TYPE_LITERAL)
public void fixTypeArguments(final Issue issue, IssueResolutionAcceptor acceptor) {
    String message = issue.getMessage();
    String fixup = "Remove invalid type arguments";
    if (message.contains("argument.")) {
        fixup = "Remove invalid type argument";
    }
    acceptor.accept(issue, fixup, fixup, null, new IModification() {

        @Override
        public void apply(IModificationContext context) throws Exception {
            IXtextDocument document = context.getXtextDocument();
            document.replace(issue.getOffset(), issue.getLength(), "");
        }
    });
}
Also used : IModificationContext(org.eclipse.xtext.ui.editor.model.edit.IModificationContext) WrappedException(org.eclipse.emf.common.util.WrappedException) BadLocationException(org.eclipse.jface.text.BadLocationException) IModification(org.eclipse.xtext.ui.editor.model.edit.IModification) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument) Fix(org.eclipse.xtext.ui.editor.quickfix.Fix)

Example 40 with Fix

use of org.eclipse.xtext.ui.editor.quickfix.Fix in project xtext-eclipse by eclipse.

the class XbaseQuickfixProvider method fixUnreachableCase.

@Fix(IssueCodes.UNREACHABLE_CASE)
public void fixUnreachableCase(final Issue issue, IssueResolutionAcceptor acceptor) {
    acceptor.accept(issue, "Remove case", "Remove case", null, new ISemanticModification() {

        @Override
        public void apply(EObject element, IModificationContext context) throws Exception {
            remove(element, XCasePart.class, context);
        }
    });
    acceptor.accept(issue, "Move case up", "Move case up", null, new ISemanticModification() {

        @Override
        public void apply(EObject element, IModificationContext context) throws Exception {
            XCasePart casePart = EcoreUtil2.getContainerOfType(element, XCasePart.class);
            if (casePart == null) {
                return;
            }
            ICompositeNode caseNode = NodeModelUtils.findActualNodeFor(casePart);
            if (caseNode == null) {
                return;
            }
            XSwitchExpression switchExpression = EcoreUtil2.getContainerOfType(casePart, XSwitchExpression.class);
            if (switchExpression == null) {
                return;
            }
            ITypeReferenceOwner owner = new StandardTypeReferenceOwner(services, switchExpression);
            LightweightTypeReference actualTypeReference = owner.toLightweightTypeReference(casePart.getTypeGuard());
            for (XCasePart previousCasePart : switchExpression.getCases()) {
                if (previousCasePart == casePart) {
                    return;
                }
                JvmTypeReference typeGuard = previousCasePart.getTypeGuard();
                if (typeGuard == null || previousCasePart.getCase() != null) {
                    continue;
                }
                LightweightTypeReference previousTypeReference = owner.toLightweightTypeReference(typeGuard);
                if (typesOrderUtil.isHandled(actualTypeReference, previousTypeReference)) {
                    ICompositeNode previousCaseNode = NodeModelUtils.findActualNodeFor(previousCasePart);
                    if (previousCaseNode == null) {
                        return;
                    }
                    moveUp(caseNode, previousCaseNode, context);
                    return;
                }
            }
        }
    });
}
Also used : LightweightTypeReference(org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference) JvmTypeReference(org.eclipse.xtext.common.types.JvmTypeReference) EObject(org.eclipse.emf.ecore.EObject) ISemanticModification(org.eclipse.xtext.ui.editor.model.edit.ISemanticModification) IModificationContext(org.eclipse.xtext.ui.editor.model.edit.IModificationContext) XCasePart(org.eclipse.xtext.xbase.XCasePart) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) XSwitchExpression(org.eclipse.xtext.xbase.XSwitchExpression) ITypeReferenceOwner(org.eclipse.xtext.xbase.typesystem.references.ITypeReferenceOwner) StandardTypeReferenceOwner(org.eclipse.xtext.xbase.typesystem.references.StandardTypeReferenceOwner) WrappedException(org.eclipse.emf.common.util.WrappedException) BadLocationException(org.eclipse.jface.text.BadLocationException) Fix(org.eclipse.xtext.ui.editor.quickfix.Fix)

Aggregations

Fix (org.eclipse.xtext.ui.editor.quickfix.Fix)43 IModificationContext (org.eclipse.xtext.ui.editor.model.edit.IModificationContext)35 BadLocationException (org.eclipse.jface.text.BadLocationException)29 EObject (org.eclipse.emf.ecore.EObject)25 ISemanticModification (org.eclipse.xtext.ui.editor.model.edit.ISemanticModification)18 IModification (org.eclipse.xtext.ui.editor.model.edit.IModification)17 CoreException (org.eclipse.core.runtime.CoreException)16 IXtextDocument (org.eclipse.xtext.ui.editor.model.IXtextDocument)16 XtextResource (org.eclipse.xtext.resource.XtextResource)13 List (java.util.List)9 WrappedException (org.eclipse.emf.common.util.WrappedException)9 ICompositeNode (org.eclipse.xtext.nodemodel.ICompositeNode)9 ReplacingAppendable (org.eclipse.xtext.xbase.ui.contentassist.ReplacingAppendable)7 ArrayList (java.util.ArrayList)5 EList (org.eclipse.emf.common.util.EList)5 URI (org.eclipse.emf.common.util.URI)5 INode (org.eclipse.xtext.nodemodel.INode)5 IOException (java.io.IOException)4 InvocationTargetException (java.lang.reflect.InvocationTargetException)4 ITextRegion (org.eclipse.xtext.util.ITextRegion)4