Skip to content

Commit

Permalink
Use serializable lambdas
Browse files Browse the repository at this point in the history
This is an attempt to fix #338
  • Loading branch information
melix committed Oct 17, 2022
1 parent 4e510e3 commit 26d81fd
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.graalvm.buildtools.gradle.internal.ConfigurationCacheSupport.serializableBiFunctionOf;
import static org.graalvm.buildtools.gradle.internal.ConfigurationCacheSupport.serializablePredicateOf;
import static org.graalvm.buildtools.gradle.internal.ConfigurationCacheSupport.serializableSupplierOf;
import static org.graalvm.buildtools.gradle.internal.ConfigurationCacheSupport.serializableTransformerOf;
Expand Down Expand Up @@ -292,7 +293,7 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
project, metadataRepositoryExtension);
task.getMetadataService().set(reachabilityMetadataService);
task.usesService(reachabilityMetadataService);
task.getUri().convention(task.getVersion().map(this::getReachabilityMetadataRepositoryUrlForVersion)
task.getUri().convention(task.getVersion().map(serializableTransformerOf(this::getReachabilityMetadataRepositoryUrlForVersion))
.orElse(metadataRepositoryExtension.getUri()));
task.getExcludedModules().convention(metadataRepositoryExtension.getExcludedModules());
task.getModuleToConfigVersion().convention(metadataRepositoryExtension.getModuleToConfigVersion());
Expand Down Expand Up @@ -348,7 +349,8 @@ private void configureAutomaticTaskCreation(Project project,
private void configureJvmReachabilityConfigurationDirectories(Project project, GraalVMExtension graalExtension,
NativeImageOptions options, SourceSet sourceSet) {
options.getConfigurationFileDirectories().from(graalVMReachabilityQuery(project, graalExtension, sourceSet,
configuration -> true, this::getConfigurationDirectory,
serializablePredicateOf(configuration -> true),
serializableBiFunctionOf(this::getConfigurationDirectory),
Collectors.toList()));
}

Expand All @@ -366,15 +368,15 @@ private <T, A, R> Provider<R> graalVMReachabilityQuery(Project project, GraalVME
Configuration classpath = project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName());
Set<String> excludedModules = extension.getExcludedModules().getOrElse(Collections.emptySet());
Map<String, String> forcedVersions = extension.getModuleToConfigVersion().getOrElse(Collections.emptyMap());
return graalVMReachabilityMetadataService(project, extension).map(service -> {
return graalVMReachabilityMetadataService(project, extension).map(serializableTransformerOf(service -> {
Set<ResolvedComponentResult> components = classpath.getIncoming().getResolutionResult().getAllComponents();
Stream<T> mapped = components.stream().flatMap(component -> {
ModuleVersionIdentifier moduleVersion = component.getModuleVersion();
Set<DirectoryConfiguration> configurations = service.findConfigurationsFor(excludedModules, forcedVersions, moduleVersion);
return configurations.stream().filter(filter).map(configuration -> mapper.apply(moduleVersion, configuration));
});
return mapped.collect(collector);
});
}));
}
return project.getProviders().provider(() -> Stream.<T>empty().collect(collector));
});
Expand All @@ -387,7 +389,7 @@ private Provider<GraalVMReachabilityMetadataService> graalVMReachabilityMetadata
.registerIfAbsent("nativeConfigurationService", GraalVMReachabilityMetadataService.class, spec -> {
LogLevel logLevel = determineLogLevel();
spec.getParameters().getLogLevel().set(logLevel);
spec.getParameters().getUri().set(repositoryExtension.getUri().map(configuredUri -> computeMetadataRepositoryUri(project, repositoryExtension, configuredUri, GraalVMLogger.of(project.getLogger()))));
spec.getParameters().getUri().set(repositoryExtension.getUri().map(serializableTransformerOf(configuredUri -> computeMetadataRepositoryUri(project, repositoryExtension, configuredUri, GraalVMLogger.of(project.getLogger())))));
spec.getParameters().getCacheDir().set(
new File(project.getGradle().getGradleUserHomeDir(), "native-build-tools/repositories"));
});
Expand Down Expand Up @@ -425,7 +427,7 @@ private static URI computeMetadataRepositoryUri(Project project,

private void configureJvmReachabilityExcludeConfigArgs(Project project, GraalVMExtension graalExtension, NativeImageOptions options, SourceSet sourceSet) {
GraalVMReachabilityMetadataRepositoryExtension repositoryExtension = reachabilityExtensionOn(graalExtension);
Provider<GraalVMReachabilityMetadataService> serviceProvider = project.getGradle()
project.getGradle()
.getSharedServices()
.registerIfAbsent("nativeConfigurationService", GraalVMReachabilityMetadataService.class, spec -> {
LogLevel logLevel = determineLogLevel();
Expand Down Expand Up @@ -514,7 +516,7 @@ private void configureNativeConfigurationRepo(ExtensionAware graalvmNative) {
GraalVMReachabilityMetadataRepositoryExtension configurationRepository = graalvmNative.getExtensions().create("metadataRepository", GraalVMReachabilityMetadataRepositoryExtension.class);
configurationRepository.getEnabled().convention(false);
configurationRepository.getVersion().convention(VersionInfo.METADATA_REPO_VERSION);
configurationRepository.getUri().convention(configurationRepository.getVersion().map(this::getReachabilityMetadataRepositoryUrlForVersion));
configurationRepository.getUri().convention(configurationRepository.getVersion().map(serializableTransformerOf(this::getReachabilityMetadataRepositoryUrlForVersion)));
configurationRepository.getExcludedModules().convention(Collections.emptySet());
configurationRepository.getModuleToConfigVersion().convention(Collections.emptyMap());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.gradle.api.Transformer;

import java.io.Serializable;
import java.util.function.BiFunction;
import java.util.function.Predicate;
import java.util.function.Supplier;

Expand Down Expand Up @@ -82,6 +83,17 @@ public static <OUT, IN> Transformer<OUT, IN> serializableTransformerOf(Serializa
return transformer;
}

/**
* Generates a serializable bifunction lambda.
* @param bifunction the bifunction
* @param <T> the type of the first parameter
* @param <U> the type of the second parameter
* @param <R> the type of the result
*/
public static <T, U, R> BiFunction<T, U, R> serializableBiFunctionOf(SerializableBiFunction<T, U, R> bifunction) {
return bifunction;
}

public interface SerializableSupplier<T> extends Supplier<T>, Serializable {

}
Expand All @@ -94,4 +106,8 @@ public interface SerializableTransformer<OUT, IN> extends Transformer<OUT, IN>,

}

public interface SerializableBiFunction<T, U, R> extends BiFunction<T, U, R>, Serializable {

}

}

0 comments on commit 26d81fd

Please sign in to comment.