- Timestamp:
- 07/10/13 22:41:02 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/params/ParamCandidate.java
r90 r99 73 73 protected final OneTime<Method> getter = new OneTime<>("getter"); 74 74 protected final OneTime<Method> caller = new OneTime<>("caller"); 75 protected final OneTime<Method> adder = new OneTime<>("adder"); 76 protected final OneTime<Method> remover = new OneTime<>("remover"); 75 77 76 78 protected final List<ParamAnnotation> annotations = new LinkedList<>(); … … 142 144 143 145 /** 146 * @return the getter 147 */ 148 public Method getAdder() { 149 return adder.get(); 150 } 151 152 /** 153 * @return the getter 154 */ 155 public Method getRemover() { 156 return remover.get(); 157 } 158 159 /** 144 160 * @return the annotations 145 161 */ … … 150 166 void validate() throws ConstructionException { 151 167 try { 168 if (adder.has() != remover.has()) { 169 throw new ConstructionException().msg("only one of event manipulator methods is defined"); 170 } 171 if (adder.has() && remover.has()) { 172 return; 173 } 152 174 if (caller.has()) { 153 175 if (!isPublic(caller)) { … … 174 196 throw new ConstructionException().msg("missing getter or field"); 175 197 } 198 if (getter.has() || field.has() || setter.has()) { 199 if (type.get().equals(Void.TYPE)) { 200 throw new ConstructionException().msg("type of field is void"); 201 } 202 } 176 203 } catch (ConstructionException e) { 177 204 throw e.arg("in", this); … … 183 210 return false; 184 211 } 212 if (adder.has() || remover.has()) { 213 return false; 214 } 185 215 if (Collection.class.isAssignableFrom(getRawType())) { 186 216 return false; … … 197 227 boolean isReadOnly() { 198 228 if (caller.has()) { 229 return false; 230 } 231 if (adder.has() || remover.has()) { 199 232 return false; 200 233 } … … 229 262 } 230 263 Type[] ps = m.getGenericParameterTypes(); 264 Class<?>[] pts = m.getParameterTypes(); 231 265 if (ps.length == 0) { 266 if (m.getReturnType().equals(Void.TYPE)) { 267 throw new ConstructionException().msg("failed to add getter of void return type"); 268 } 232 269 getter.set(m); 233 270 setType(m.getGenericReturnType()); … … 235 272 } 236 273 if (ps.length == 1) { 274 if (pts[0].equals(EventListener.class)) { 275 if (member.getName().startsWith("add")) { 276 adder.set(m); 277 setType(ps[0]); 278 return; 279 } 280 if (member.getName().startsWith("remove")) { 281 remover.set(m); 282 setType(ps[0]); 283 return; 284 } 285 throw new ConstructionException().msg("invalid name of event manipulator").arg("method", m).arg("in", this); 286 } 237 287 setter.set(m); 238 288 setType(ps[0]); … … 251 301 int f = 0; 252 302 if (isReadOnly()) { 253 f |= Flags.READONLY;303 f |= ParamFlags.READONLY; 254 304 } 255 305 return f;
Note: See TracChangeset
for help on using the changeset viewer.