package org.example.entities.ui.quickfix; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.text.BadLocationException; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.diagnostics.Diagnostic; import org.eclipse.xtext.ui.editor.model.IXtextDocument; import org.eclipse.xtext.ui.editor.model.edit.IModificationContext; import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification; import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider; import org.eclipse.xtext.ui.editor.quickfix.Fix; import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor; import org.eclipse.xtext.validation.Issue; import org.example.entities.entities.EntitiesFactory; import org.example.entities.entities.Entity; import org.example.entities.entities.Model; import org.example.entities.validation.EntitiesValidator; /** * This is the Java implementation of the quickfix provider, but the one * that is being used is the one implemented in Xtend (EntitiesQuickfixProvider) * * @author Lorenzo Bettini * */ public class EntitiesJavaQuickfixProvider extends DefaultQuickfixProvider { @Fix(EntitiesValidator.HIERARCHY_CICLE) public void removeSuperType(final Issue issue, IssueResolutionAcceptor acceptor) { acceptor.accept(issue, "Remove supertype", // label "Remove supertype '" + issue.getData()[0] + "'", // description "delete_obj.gif", // icon new ISemanticModification() { public void apply(EObject element, IModificationContext context) { ((Entity) element).setSuperType(null); } } ); } @Fix(Diagnostic.LINKING_DIAGNOSTIC) public void createMissingEntity(final Issue issue, IssueResolutionAcceptor acceptor) { acceptor.accept(issue, "Create missing entity", // label "Create missing entity", // description "Entity.gif", // icon new ISemanticModification() { public void apply(EObject element, IModificationContext context) throws BadLocationException { IXtextDocument xtextDocument = context.getXtextDocument(); String missingEntityName = xtextDocument.get(issue.getOffset(), issue.getLength()); Entity newEntity = EntitiesFactory.eINSTANCE.createEntity(); newEntity.setName(missingEntityName); Entity currentEntity = EcoreUtil2.getContainerOfType(element, Entity.class); Model model = (Model) currentEntity.eContainer(); model.getEntities().add(model.getEntities().indexOf(currentEntity)+1, newEntity); } } ); } }