in plugins/lifecycle/src/main/java/co/elastic/gradle/lifecycle/MultiArchLifecyclePlugin.java [188:217]
private Stream<String> getDependentTaskName(Task taskToCheck, Object dep) {
final String depTaskName;
if ((dep instanceof Task) || (dep instanceof TaskProvider) || (dep instanceof String)) {
if (dep instanceof Task) {
depTaskName = ((Task) dep).getName();
} else if (dep instanceof String) {
depTaskName = (String) dep;
} else {
// This call can lead to tasks being created which can race with similar calls elsewhere, so we protect
// against ConcurrentModificationException by retrying
depTaskName = RetryUtils.retry(() -> {
final Object provided = ((TaskProvider) dep).get();
return ((Task) provided).getName();
})
.maxAttempt(3)
.execute();
}
} else {
if (dep instanceof TaskDependency) {
// This is used by assemble to auto view task dependencies, unlikely to be something manual
return ((TaskDependency) dep).getDependencies(taskToCheck).stream()
.map(Task::getName);
}
if (dep instanceof NamedDomainObjectProvider) {
return Stream.of(((NamedDomainObjectProvider) dep).getName());
}
throw new GradleException("Unsupported dependency '" + dep + "' for " + taskToCheck + "(" + dep.getClass() + ")");
}
return Stream.of(depTaskName);
}