/**
*
*/
package it.xsemantics.example.lambda.ui.typing;
import it.xsemantics.example.lambda.lambda.Abstraction;
import it.xsemantics.example.lambda.lambda.Program;
import it.xsemantics.example.lambda.xsemantics.LambdaTypeModifier;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.model.IXtextDocument;
import org.eclipse.xtext.util.concurrent.IUnitOfWork;
import com.google.inject.Inject;
/**
* @author Lorenzo Bettini
*
*/
public class LambdaTermModifier {
@Inject
protected LambdaTypeModifier lambdaTypeModifier;
public void modifyAbstractionWithInferredType(
IXtextDocument xtextDocument) {
xtextDocument.modify(new IUnitOfWork.Void<XtextResource>() {
public void process(XtextResource resource) {
Program program = (Program) resource.getContents().get(0);
Abstraction abstraction = (Abstraction) (program.getTerm());
lambdaTypeModifier.modifyAbstractionParamType(abstraction);
}
});
}
public void modifyTermWithInferredType(IXtextDocument xtextDocument) {
xtextDocument.modify(new IUnitOfWork.Void<XtextResource>() {
public void process(XtextResource resource) {
Program program = (Program) resource.getContents().get(0);
lambdaTypeModifier.setAllTypes(program.getTerm());
}
});
}
}