/** * */ package it.xsemantics.example.fj.typing; import it.xsemantics.example.fj.typesystem.fj.FJTypeSystemDefinition; import it.xsemantics.example.fj.util.ContainingClassFinder; import it.xtypes.runtime.TypeSystemResult; import it.xtypes.runtime.TypingJudgmentEnvironment; import org.eclipse.emf.ecore.EObject; import com.google.inject.Inject; import it.xsemantics.example.fj.fj.Class; import it.xsemantics.example.fj.fj.Expression; import it.xsemantics.example.fj.fj.Field; import it.xsemantics.example.fj.fj.Method; import it.xsemantics.example.fj.fj.Program; import it.xsemantics.example.fj.fj.util.FjSwitch; /** * This class is superseded by the generated type system FjTypeSystemDefinition, * it is here only as a wrapper for FjTypeSystemDefinition, for old unit tests * * @author Lorenzo Bettini * */ public class FJTypeChecker extends FjSwitch<String> { @Inject FJTypeSystemDefinition typeSystem; ContainingClassFinder containingClassFinder = new ContainingClassFinder(); public String typeCheck(Expression object) { return getResultErrors(typeSystem.typeAsType( environmentForThis(object), object)); } public String typeCheck(Field object) { return getResultErrors(typeSystem.typeAsString( environmentForThis(object), object)); } public String typeCheck(Method object) { return getResultErrors(typeSystem.typeAsString(object)); } public String typeCheck(Program object) { return getResultErrors(typeSystem.typeAsString(object)); } public String typeCheck(Class object) { return getResultErrors(typeSystem.typeAsString(object)); } /** * @param result * @return */ protected String getResultErrors(TypeSystemResult<?> result) { return (result.getFailure() != null ? result.getFailure().getMessage() : ""); } protected TypingJudgmentEnvironment environmentForThis(EObject object) { return containingClassFinder.environmentForThis(object); } }