KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > spoon > examples > distcalc > template > _MemoryCellType_


1 package spoon.examples.distcalc.template;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.List JavaDoc;
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 JavaDoc<CtParameter<?>> _parameters_;
24
25     @Parameter("_fields_")
26     List JavaDoc<CtField<?>> __fields_;
27
28     @Parameter
29     int _nParameters_;
30
31     @Parameter
32     Class JavaDoc _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 JavaDoc> _parameterTests_;
45
46     List JavaDoc<CtField<?>> _fields_;
47
48     _ReturnType_ result;
49
50     public _MemoryCellType_(_ReturnType_ result, List JavaDoc<CtParameter> _parameters_) {
51         _parameterAssignments_.S();
52         this.result = result;
53     }
54
55     @Local
56     public _MemoryCellType_(Factory f, CtTypeReference<?> nodeInterfType,
57             Class JavaDoc returnType, String JavaDoc serviceName,
58             List JavaDoc<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 JavaDoc<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 JavaDoc> eq = null;
76         CtBinaryOperator<Boolean JavaDoc> 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 JavaDoc<CtParameter> _parameters_) {
93         return _parameterTests_.S();
94     }
95
96     public _ReturnType_ proceed(List JavaDoc<CtParameter> _parameters_) {
97         return result;
98     }
99 }
100
Popular Tags