1 package spoon.examples.distcalc.template; 2 3 import java.util.ArrayList ; 4 import java.util.List ; 5 6 import spoon.examples.distcalc.processing.ServiceProcessor; 7 import spoon.examples.distcalc.processing._NodeInterf_; 8 import spoon.reflect.Factory; 9 import spoon.reflect.code.BinaryOperatorKind; 10 import spoon.reflect.code.CtBinaryOperator; 11 import spoon.reflect.declaration.CtField; 12 import spoon.reflect.declaration.CtParameter; 13 import spoon.reflect.reference.CtTypeReference; 14 import spoon.template.Local; 15 import spoon.template.Parameter; 16 import spoon.template.Template; 17 import spoon.template.TemplateParameter; 18 import spoon.template.TemplateParameterList; 19 20 public class _MemoryCellType_ implements _NodeInterf_, Template { 21 22 @Parameter 23 List <CtParameter<?>> _parameters_; 24 25 @Parameter("_fields_") 26 List <CtField<?>> __fields_; 27 28 @Parameter 29 int _nParameters_; 30 31 @Parameter 32 Class _ReturnType_; 33 34 @Parameter 35 CtTypeReference _NodeInterf_; 36 37 @Parameter 38 CtTypeReference _MemoryCellType_; 39 40 @Parameter 41 public TemplateParameterList<?> _parameterAssignments_; 42 43 @Parameter 44 public TemplateParameter<Boolean > _parameterTests_; 45 46 List <CtField<?>> _fields_; 47 48 _ReturnType_ result; 49 50 public _MemoryCellType_(_ReturnType_ result, List <CtParameter> _parameters_) { 51 _parameterAssignments_.S(); 52 this.result = result; 53 } 54 55 @Local 56 public _MemoryCellType_(Factory f, CtTypeReference<?> nodeInterfType, 57 Class returnType, String serviceName, 58 List <CtParameter<?>> parameters) { 59 this._NodeInterf_ = nodeInterfType; 60 this._parameters_ = parameters; 61 this._nParameters_ = parameters.size(); 62 this._ReturnType_ = returnType; 63 this._MemoryCellType_ = f.Type().createReference(nodeInterfType 64 .getPackage().toString() 65 + "." + ServiceProcessor.getMemoryCellTypeName(serviceName)); 66 this.__fields_ = new ArrayList <CtField<?>>(); 67 for (CtParameter<?> p : parameters) { 68 CtField field = f.Field().create(null, f.Code().modifiers(), p.getType(), p 69 .getSimpleName()); 70 field.setParent(f.Template().get(_MemoryCellType_.class)); 71 this.__fields_.add(field); 72 } 73 this._parameterAssignments_ = f.Code().createVariableAssignments( 74 __fields_, f.Code().createVariableAccesses(parameters)); 75 CtBinaryOperator<Boolean > eq = null; 76 CtBinaryOperator<Boolean > expr = null; 77 for (int i = 0; i < parameters.size(); i++) { 78 eq = f.Code().createBinaryOperator(f.Code().createVariableAccess( 79 this.__fields_.get(i).getReference(), false), f.Code() 80 .createVariableAccess(parameters.get(i).getReference(), 81 false), BinaryOperatorKind.EQ); 82 if (expr == null) { 83 expr = eq; 84 } else { 85 expr = f.Code().createBinaryOperator(expr, eq, 86 BinaryOperatorKind.AND); 87 } 88 } 89 _parameterTests_ = expr; 90 } 91 92 public boolean canProceed(List <CtParameter> _parameters_) { 93 return _parameterTests_.S(); 94 } 95 96 public _ReturnType_ proceed(List <CtParameter> _parameters_) { 97 return result; 98 } 99 } 100 | Popular Tags |