public V param(ParameterRequirement parameterRequirement) { parameterRequirements.add(parameterRequirement); return castThis(); }
@Override public void validate(ExecutableElement executableElement, ElementValidation validation) { super.validate(executableElement, validation); for (VariableElement parameter : executableElement.getParameters()) { ParameterRequirement foundParameter = null; for (ParameterRequirement expectedParameter : getParamRequirements()) { if (expectedParameter.isSatisfied(parameter)) { satisfiedParameterRequirements.add(expectedParameter); foundParameter = expectedParameter; break; } } if (foundParameter == null) { invalidate(executableElement, validation); return; } if (!foundParameter.multiple()) { getParamRequirements().remove(foundParameter); } } for (ParameterRequirement expectedParameter : getParamRequirements()) { if (expectedParameter.required() && !satisfiedParameterRequirements.contains(expectedParameter)) { invalidate(executableElement, validation); return; } } }
@Override public void validate(ExecutableElement executableElement, ElementValidation validation) { super.validate(executableElement, validation); for (VariableElement parameter : executableElement.getParameters()) { ParameterRequirement foundParameter = null; for (ParameterRequirement expectedParameter : getParamRequirements()) { if (expectedParameter.isSatisfied(parameter)) { satisfiedParameterRequirements.add(expectedParameter); foundParameter = expectedParameter; break; } } if (foundParameter == null) { invalidate(executableElement, validation); return; } if (!foundParameter.multiple()) { getParamRequirements().remove(foundParameter); } } for (ParameterRequirement expectedParameter : getParamRequirements()) { if (expectedParameter.required() && !satisfiedParameterRequirements.contains(expectedParameter)) { invalidate(executableElement, validation); return; } } }
@Override public void validate(ExecutableElement executableElement, ElementValidation validation) { super.validate(executableElement, validation); nextParameterRequirement(); for (VariableElement parameter : executableElement.getParameters()) { if (!validate(parameter)) { invalidate(executableElement, validation); return; } } for (ParameterRequirement expectedParameter : getParamRequirements()) { if (expectedParameter.required() && !satisfiedParameterRequirements.contains(expectedParameter)) { invalidate(executableElement, validation); return; } } }
protected void invalidate(ExecutableElement element, ElementValidation validation) { validation.addError("%s can only have the following parameters: " + createMessage(element)); }
public V type(String qualifiedName) { return param(new ExactTypeParameterRequirement(qualifiedName)); }
public V anyOfTypes(String... types) { return param(new AnyOfTypesParameterRequirement(types)); }
public V primitiveOrWrapper(TypeKind primitive) { return param(new PrimitiveOrWrapperParameterRequirement(primitive)); }
public V anyType() { return param(new AnyTypeParameterRequirement()); }
public V param(ParameterRequirement parameterRequirement) { parameterRequirements.add(parameterRequirement); return castThis(); }
public V annotatedWith(Class<? extends Annotation> annotationClass) { return param(new AnnotatedWithParameterRequirement(annotationClass)); }
public V extendsAnyOfTypes(String... types) { return param(new ExtendsAnyOfTypesParameterRequirement(types)); }
public V extendsType(String qualifiedName) { return param(new ExtendsTypeParameterRequirement(qualifiedName)); }
@Override protected String createMessage(ExecutableElement element) { return super.createMessage(element) + " in the order above"; } }
@Override protected String createMessage(ExecutableElement element) { return super.createMessage(element) + " in any order"; } }
@Override public void validate(ExecutableElement executableElement, ElementValidation validation) { super.validate(executableElement, validation); nextParameterRequirement(); for (VariableElement parameter : executableElement.getParameters()) { if (!validate(parameter)) { invalidate(executableElement, validation); return; } } for (ParameterRequirement expectedParameter : getParamRequirements()) { if (expectedParameter.required() && !satisfiedParameterRequirements.contains(expectedParameter)) { invalidate(executableElement, validation); return; } } }
protected void invalidate(ExecutableElement element, ElementValidation validation) { validation.addError("%s can only have the following parameters: " + createMessage(element)); }
public V anyType() { return param(new AnyTypeParameterRequirement()); }