private Stream getDependentTaskName()

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);
    }