Skip to content

Commit

Permalink
194: initial implementation of quickfix
Browse files Browse the repository at this point in the history
that does not work due to formatting problems

Task-Url: http://github.com/LorenzoBettini/edelta/issues/194
  • Loading branch information
LorenzoBettini committed Jun 15, 2020
1 parent 0051406 commit 23f2de0
Showing 1 changed file with 34 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,22 @@
*/
package edelta.ui.quickfix;

import static edelta.util.EdeltaModelUtil.getContainingBlockXExpression;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.ui.editor.model.edit.IModificationContext;
import org.eclipse.xtext.ui.editor.quickfix.Fix;
import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor;
import org.eclipse.xtext.validation.Issue;
import org.eclipse.xtext.xbase.XBlockExpression;
import org.eclipse.xtext.xbase.annotations.ui.quickfix.XbaseWithAnnotationsQuickfixProvider;

import com.google.inject.Inject;

import edelta.edelta.EdeltaEcoreReference;
import edelta.edelta.EdeltaProgram;
import edelta.resource.derivedstate.EdeltaDerivedStateHelper;
import edelta.util.EdeltaModelUtil;
import edelta.validation.EdeltaValidator;

Expand All @@ -23,6 +30,9 @@
*/
public class EdeltaQuickfixProvider extends XbaseWithAnnotationsQuickfixProvider {

@Inject
private EdeltaDerivedStateHelper derivedStateHelper;

@Fix(EdeltaValidator.INVALID_SUBPACKAGE_IMPORT)
public void importRootPackage(final Issue issue, final IssueResolutionAcceptor acceptor) {
final String rootPackageName = issue.getData()[0];
Expand Down Expand Up @@ -94,4 +104,28 @@ public void removeDuplicateMetamodelImport(final Issue issue, final IssueResolut
);
}

@Fix(EdeltaValidator.INTERPRETER_ACCESS_NOT_YET_EXISTING_ELEMENT)
public void moveToRightPosition(final Issue issue, final IssueResolutionAcceptor acceptor) {
acceptor.accept(
issue,
"Move to the right position",
"Move to the right position",
"EObject.gif",
(EObject element, IModificationContext context) -> {
var ecoreRef = (EdeltaEcoreReference) element;
var blockExp = getContainingBlockXExpression(ecoreRef);
var sourceBlock = (XBlockExpression) blockExp.eContainer();
var responsibleExpression =
derivedStateHelper.getLastResponsibleExpression(ecoreRef.getEnamedelement());
var responsibleExpressionBlockExp = getContainingBlockXExpression(responsibleExpression);
var destBlock = (XBlockExpression) responsibleExpression.eContainer();
var expressions = destBlock.getExpressions();
sourceBlock.getExpressions().remove(blockExp);
var responsibleExpressionPosition =
expressions.indexOf(responsibleExpressionBlockExp);
expressions.add(responsibleExpressionPosition + 1, blockExp);
}
);
}

}

0 comments on commit 23f2de0

Please sign in to comment.