class DefaultBuildResumptionAnalyzer implements BuildResumptionAnalyzer {
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultBuildResumptionAnalyzer.class);

    @Override
    public Optional<BuildResumptionData> determineBuildResumptionData(final MavenExecutionResult result) {<FILL_FUNCTION_BODY>}
}

        if (!result.hasExceptions()) {
            return Optional.empty();
        }

        List<MavenProject> sortedProjects = result.getTopologicallySortedProjects();

        boolean hasNoSuccess =
                sortedProjects.stream().noneMatch(project -> result.getBuildSummary(project) instanceof BuildSuccess);

        if (hasNoSuccess) {
            return Optional.empty();
        }

        List<String> remainingProjects = sortedProjects.stream()
                .filter(project -> result.getBuildSummary(project) == null
                        || result.getBuildSummary(project) instanceof BuildFailure)
                .map(project -> project.getGroupId() + ":" + project.getArtifactId())
                .collect(Collectors.toList());

        if (remainingProjects.isEmpty()) {
            LOGGER.info("No remaining projects found, resuming the build would not make sense.");
            return Optional.empty();
        }

        return Optional.of(new BuildResumptionData(remainingProjects));
    
<no_super_class>