package it.xsemantics.example.fj.typesystem.fj.rules; import it.xtypes.runtime.*; public class TClassOkTypeRule extends FJTypeSystemRule { protected Variable<it.xsemantics.example.fj.fj.Class> var_programClass = new Variable<it.xsemantics.example.fj.fj.Class>( createEClassifierType(basicPackage.getClass_())); protected Variable<it.xsemantics.example.fj.fj.Class> var_C = new Variable<it.xsemantics.example.fj.fj.Class>( createEClassifierType(basicPackage.getClass_())); protected Variable<String> right_var; protected TypingJudgmentEnvironment env_G = new TypingJudgmentEnvironment(); public TClassOkTypeRule() { this("TClassOk", "|-", ":"); } public TClassOkTypeRule(String ruleName, String typeJudgmentSymbol, String typeStatementRelation) { super(ruleName, typeJudgmentSymbol, typeStatementRelation); } @Override public Variable<it.xsemantics.example.fj.fj.Class> getLeft() { return var_C; } @Override public Variable<String> getRight() { if (right_var == null) right_var = new Variable<String>(createBasicType("String"), "OK"); return right_var; } @Override public TypingJudgmentEnvironment getEnvironment() { return env_G; } @Override public void setEnvironment(TypingJudgmentEnvironment environment) { if (environment != null) env_G = environment; } @Override public RuntimeRule newInstance() { return new TClassOkTypeRule("TClassOk", "|-", ":"); } @Override public void applyImpl() throws RuleFailedException { register("!exists " + stringRep(getAll(var_C.getValue(), "superclass", "superclass", it.xsemantics.example.fj.fj.Class.class))); try { boolean not_exist_temp_1 = true; try { for (java.util.Iterator<it.xsemantics.example.fj.fj.Class> iterator = getAll( var_C.getValue(), "superclass", "superclass", it.xsemantics.example.fj.fj.Class.class).iterator(); iterator .hasNext();) { var_programClass.setValue(iterator.next()); try { equals(var_programClass.getValue().getName(), var_C .getValue().getName()); not_exist_temp_1 = false; break; } catch (Throwable e) { registerFailure(e); if (!iterator.hasNext()) throw new RuleFailedException("exists failed", e); } } // if we're here exists succeeded, thus !exist failed } catch (RuleFailedException e) { // OK not_exist_temp_1 = true; } if (!not_exist_temp_1) throw new RuleFailedException("not exists failed"); } catch (Throwable e) { registerAndThrowFailure(e); } register("end " + "!exists " + stringRep(getAll(var_C.getValue(), "superclass", "superclass", it.xsemantics.example.fj.fj.Class.class))); } @Override protected String ruleFailureMessage() { return "class hierarchy is not acyclic for " + stringRep(var_C.getValue()); } @Override protected String failMessage() { return "cannot type"; } }