diff --git a/CHANGELOG.md b/CHANGELOG.md index 97d849a4e5..aa519112bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +### Added +- Support for Java versions > 8 + ### Changed - Upgrade [Legman](https://github.com/sdorra/legman) to v1.6.2 in order to fix execution on Java versions > 8 - Upgrade [Lombok](https://projectlombok.org/) to version 1.18.10 in order to fix build on Java versions > 8 diff --git a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java index 080d66ebf2..586f28761b 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java @@ -91,6 +91,7 @@ public final class RepositoryService implements Closeable { private final PreProcessorUtil preProcessorUtil; private final RepositoryServiceProvider provider; private final Repository repository; + @SuppressWarnings("rawtypes") private final Set protocolProviders; private final WorkdirProvider workdirProvider; @@ -104,7 +105,10 @@ public final class RepositoryService implements Closeable { */ RepositoryService(CacheManager cacheManager, RepositoryServiceProvider provider, Repository repository, - PreProcessorUtil preProcessorUtil, Set protocolProviders, WorkdirProvider workdirProvider) { + PreProcessorUtil preProcessorUtil, + @SuppressWarnings("rawtypes") Set protocolProviders, + WorkdirProvider workdirProvider + ) { this.cacheManager = cacheManager; this.provider = provider; this.repository = repository; @@ -445,19 +449,23 @@ public final class RepositoryService implements Closeable { return provider.getSupportedFeatures().contains(feature); } - public Stream getSupportedProtocols() { + public Stream getSupportedProtocols() { return protocolProviders.stream() .filter(protocolProvider -> protocolProvider.getType().equals(getRepository().getType())) - .map(this::createProviderInstanceForRepository); + .map(this::createProviderInstanceForRepository); } - private T createProviderInstanceForRepository(ScmProtocolProvider protocolProvider) { + @SuppressWarnings("rawtypes") + private ScmProtocol createProviderInstanceForRepository(ScmProtocolProvider protocolProvider) { return protocolProvider.get(repository); } + @SuppressWarnings("unchecked") public T getProtocol(Class clazz) { - return this.getSupportedProtocols() + return this.getSupportedProtocols() .filter(scmProtocol -> clazz.isAssignableFrom(scmProtocol.getClass())) + // no idea how to fix this, without cast + .map(p -> (T) p) .findFirst() .orElseThrow(() -> new IllegalArgumentException(String.format("no implementation for %s and repository type %s", clazz.getName(),getRepository().getType()))); }