Index: C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtOperationalEnvFactory.java =================================================================== --- C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtOperationalEnvFactory.java (revision 6878) +++ C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/ast/env/QvtOperationalEnvFactory.java (revision 7014) @@ -25,6 +25,7 @@ import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EPackage.Registry; import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; +import org.eclipse.m2m.internal.qvt.oml.evaluator.QvtEvaluatorFactory; import org.eclipse.m2m.internal.qvt.oml.evaluator.QvtOperationalEvaluationVisitorImpl; import org.eclipse.m2m.internal.qvt.oml.expressions.Module; import org.eclipse.m2m.qvt.oml.util.IContext; @@ -139,7 +140,7 @@ return super.createEvaluationVisitor(env, evalEnv, extentMap); } - return QvtOperationalEvaluationVisitorImpl.createVisitor((QvtOperationalEnv)env, (QvtOperationalEvaluationEnv)evalEnv); + return QvtEvaluatorFactory.createVisitor((QvtOperationalEnv)env, (QvtOperationalEvaluationEnv)evalEnv); } private static EPackage.Registry copyPackageRegistry(EPackage.Registry registry) { Index: C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/evaluator/QvtEvaluatorFactory.java =================================================================== --- C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/evaluator/QvtEvaluatorFactory.java (revision 0) +++ C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/evaluator/QvtEvaluatorFactory.java (revision 7014) @@ -0,0 +1,57 @@ +package org.eclipse.m2m.internal.qvt.oml.evaluator; + +import java.util.Properties; +import java.util.regex.Pattern; + +import org.eclipse.m2m.internal.qvt.oml.ast.env.QvtOperationalEnv; +import org.eclipse.m2m.internal.qvt.oml.ast.env.QvtOperationalEvaluationEnv; + +public class QvtEvaluatorFactory { + + final public static String HOOK_VISITOR_DECORATOR = "VISITOR_CLASS"; + + QvtGenericVisitorDecorator decorators; + + public static InternalEvaluator createVisitor(QvtOperationalEnv env, QvtOperationalEvaluationEnv evalEnv) { + System.out.println("Attempting to create decorator visitor..."); + InternalEvaluator evaluator = new QvtOperationalEvaluationVisitorImpl(env, evalEnv).createInterruptibleVisitor(); + + InternalEvaluator decorated = decorate(evaluator); + + return decorated; + } + + private static InternalEvaluator decorate(InternalEvaluator evaluator) { + //TODO Make this hook mechanism less... sketchy (maybe add a Hook class or something) + + InternalEvaluator decorated = evaluator; + + String[] decoratorClasses = getDecoratorClasses(); + + for(String className : decoratorClasses) { + if (className != null && !className.isEmpty()) { + + try{ + Class clazz = Class.forName(className); + decorated = (InternalEvaluator) clazz.getDeclaredConstructor(InternalEvaluator.class).newInstance(evaluator); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + + + return decorated; + } + + private static String[] getDecoratorClasses() { + // TODO try with multiple decorators + String decoratorStr = System.getProperty(HOOK_VISITOR_DECORATOR); + if (decoratorStr != null) { + return decoratorStr.split(Pattern.quote(",")); + } + return new String[0]; + + } + +} Property changes on: C:/Users/cgerphei/Project/Code/qvto/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/evaluator/QvtEvaluatorFactory.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain