throw new IllegalArgumentException("Interface " + interfaze.getName()
+ " cannot inherit workflow implementation method annotated with @Execute: "
+ getMethodFullName(method));
}
DataConverter converter = createConverter(workflowAnnotation.dataConverter(), converterOverride);
workflowImplementationMethod = new MethodConverterPair(method, converter);
workflowType = getWorkflowType(interfaceName, method, executeAnnotation);
WorkflowRegistrationOptions registrationOptionsAnnotation = interfaze.getAnnotation(WorkflowRegistrationOptions.class);
SkipTypeRegistration skipRegistrationAnnotation = interfaze.getAnnotation(SkipTypeRegistration.class);
if (skipRegistrationAnnotation == null) {
if (registrationOptionsAnnotation == null) {
throw new IllegalArgumentException(
"@WorkflowRegistrationOptions is required for the interface that contains method annotated with @Execute");
}
registrationOptions = createRegistrationOptions(registrationOptionsAnnotation);
}
else {
if (registrationOptionsAnnotation != null) {
throw new IllegalArgumentException(
"@WorkflowRegistrationOptions is not allowed for the interface annotated with @SkipTypeRegistration.");
}
}
}
if (signalAnnotation != null) {
String signalName = signalAnnotation.name();
if (signalName == null || signalName.isEmpty()) {
signalName = method.getName();
}
DataConverter signalConverter = createConverter(workflowAnnotation.dataConverter(), converterOverride);
signals.put(signalName, new MethodConverterPair(method, signalConverter));
}
if (getStateAnnotation != null) {
if (getStateMethod != null) {
throw new IllegalArgumentException(
"Interface annotated with @Workflow is allowed to have only one method annotated with @GetState. Found "
+ getMethodFullName(getStateMethod.getMethod()) + " and " + getMethodFullName(method));
}
if (method.getReturnType().equals(void.class) || (Promise.class.isAssignableFrom(method.getReturnType()))) {
throw new IllegalArgumentException(
"Workflow method annotated with @GetState cannot have void or Promise return type: "
+ getMethodFullName(method));
}
DataConverter converter = createConverter(workflowAnnotation.dataConverter(), converterOverride);
getStateMethod = new MethodConverterPair(method, converter);
}
}
if (workflowImplementationMethod == null) {
throw new IllegalArgumentException("Workflow definition does not implement any method annotated with @Execute. "