001    package sysModel.classFile.constantPool.visitors;
002    
003    import sysModel.classFile.constantPool.*;
004    
005    /**
006     * Abstract visitor in which all value cases call a default value method, and all reference cases call a default
007     * reference method.
008     *
009     * @author Mathias Ricken
010     */
011    public abstract class AValueReferencePoolInfoVisitor <R, D> implements IPoolInfoVisitor<R, D> {
012        /**
013         * Abstract default reference case.
014         *
015         * @param host  referece constant pool info item
016         * @param param visitor-specific parameter
017         *
018         * @return visitor-specific return value
019         */
020        public abstract R refCase(APoolInfo host, D param);
021    
022        /**
023         * Abstract default value case.
024         *
025         * @param host  value constant pool info item
026         * @param param visitor-specific parameter
027         *
028         * @return visitor-specific return value
029         */
030        public abstract R valueCase(APoolInfo host, D param);
031    
032        /**
033         * Case for class info.
034         *
035         * @param host  class info
036         * @param param visitor-specific parameter
037         *
038         * @return visitor-specific return value
039         */
040        public R classCase(ClassPoolInfo host, D param) {
041            return refCase(host, param);
042        }
043    
044        /**
045         * Case for string info.
046         *
047         * @param host  string info
048         * @param param visitor-specific parameter
049         *
050         * @return visitor-specific return value
051         */
052        public R stringCase(StringPoolInfo host, D param) {
053            return refCase(host, param);
054        }
055    
056        /**
057         * Case for field info.
058         *
059         * @param host  field info
060         * @param param visitor-specific parameter
061         *
062         * @return visitor-specific return value
063         */
064        public R fieldCase(FieldPoolInfo host, D param) {
065            return refCase(host, param);
066        }
067    
068        /**
069         * Case for method info.
070         *
071         * @param host  method info
072         * @param param visitor-specific parameter
073         *
074         * @return visitor-specific return value
075         */
076        public R methodCase(MethodPoolInfo host, D param) {
077            return refCase(host, param);
078        }
079    
080        /**
081         * Case for interface method info.
082         *
083         * @param host  interface method info info
084         * @param param visitor-specific parameter
085         *
086         * @return visitor-specific return value
087         */
088        public R interfaceMethodCase(InterfaceMethodPoolInfo host, D param) {
089            return refCase(host, param);
090        }
091    
092        /**
093         * Case for name and type info.
094         *
095         * @param host  name and type info
096         * @param param visitor-specific parameter
097         *
098         * @return visitor-specific return value
099         */
100        public R nameAndTypeCase(NameAndTypePoolInfo host, D param) {
101            return refCase(host, param);
102        }
103    
104        /**
105         * Case for int info.
106         *
107         * @param host  int info
108         * @param param visitor-specific parameter
109         *
110         * @return visitor-specific return value
111         */
112        public R intCase(IntegerPoolInfo host, D param) {
113            return valueCase(host, param);
114        }
115    
116        /**
117         * Case for float info.
118         *
119         * @param host  float info
120         * @param param visitor-specific parameter
121         *
122         * @return visitor-specific return value
123         */
124        public R floatCase(FloatPoolInfo host, D param) {
125            return valueCase(host, param);
126        }
127    
128        /**
129         * Case for long info.
130         *
131         * @param host  long info
132         * @param param visitor-specific parameter
133         *
134         * @return visitor-specific return value
135         */
136        public R longCase(LongPoolInfo host, D param) {
137            return valueCase(host, param);
138        }
139    
140        /**
141         * Case for double info.
142         *
143         * @param host  double info
144         * @param param visitor-specific parameter
145         *
146         * @return visitor-specific return value
147         */
148        public R doubleCase(DoublePoolInfo host, D param) {
149            return valueCase(host, param);
150        }
151    
152        /**
153         * Case for asciiz info.
154         *
155         * @param host  asciiz info
156         * @param param visitor-specific parameter
157         *
158         * @return visitor-specific return value
159         */
160        public R asciizCase(ASCIIPoolInfo host, D param) {
161            return valueCase(host, param);
162        }
163    
164        /**
165         * Case for unicode info.
166         *
167         * @param host  unicode info
168         * @param param visitor-specific parameter
169         *
170         * @return visitor-specific return value
171         */
172        public R unicodeCase(UnicodePoolInfo host, D param) {
173            return valueCase(host, param);
174        }
175    }