Skip to content

Commit

Permalink
Merge pull request #23050 Do not expose named domain object list
Browse files Browse the repository at this point in the history
Fixes #23016

Co-authored-by: József Bartók <jbartok@gradle.com>
  • Loading branch information
bot-gradle and jbartok committed Dec 9, 2022
2 parents dbbdd06 + 88908c8 commit c9e574e
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 25 deletions.
Expand Up @@ -1547,6 +1547,22 @@
"Class is now abstract"
]
},
{
"type": "org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler",
"member": "Method org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler.repositories()",
"acceptation": "method addition backport to 7.6.1",
"changes": [
"Method added to interface"
]
},
{
"type": "org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler",
"member": "Method org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler.size()",
"acceptation": "method addition backport to 7.6.1",
"changes": [
"Method added to interface"
]
},
{
"type": "org.gradle.kotlin.dsl.ClientModuleScope",
"member": "Class org.gradle.kotlin.dsl.ClientModuleScope",
Expand Down
Expand Up @@ -296,7 +296,7 @@ class JavaToolchainDownloadSpiIntegrationTest extends AbstractJavaToolchainDownl
}
}
println(\"\"\"Explicitly requested toolchains: \${toolchainManagement.jvm.getJavaRepositories().collect { it.getName() }}.\"\"\")
println(\"\"\"Explicitly requested toolchains: \${toolchainManagement.jvm.getJavaRepositories().repositories().collect { it.getName() }}.\"\"\")
"""

buildFile << """
Expand Down Expand Up @@ -382,13 +382,13 @@ class JavaToolchainDownloadSpiIntegrationTest extends AbstractJavaToolchainDownl
SystemInfo systemInfo = NativeServices.getInstance().get(SystemInfo.class)
switch (systemInfo.architecture) {
case SystemInfo.Architecture.i386:
return "x32";
return "x32"
case SystemInfo.Architecture.amd64:
return "x64";
return "x64"
case SystemInfo.Architecture.aarch64:
return "aarch64";
return "aarch64"
default:
return "unknown";
return "unknown"
}
}

Expand Down
Expand Up @@ -18,7 +18,8 @@

import org.gradle.api.Action;
import org.gradle.api.Incubating;
import org.gradle.api.NamedDomainObjectList;

import java.util.List;

/**
* {@link org.gradle.api.NamedDomainObjectList} based handler for configuring an
Expand All @@ -27,12 +28,27 @@
* @since 7.6
*/
@Incubating
public interface JavaToolchainRepositoryHandler extends NamedDomainObjectList<JavaToolchainRepository> {
public interface JavaToolchainRepositoryHandler {

/**
* Utility method for creating a named {@link JavaToolchainRepository} based on
* a configuration block.
*/
void repository(String name, Action<? super JavaToolchainRepository> configureAction);

/**
* Returns a list of repositories that have been added so far. The list order
* reflects the order in which the repositories have been declared.
*
* @since 7.6.1
*/
List<JavaToolchainRepository> repositories();

/**
* Returns the count of the repositories added so far.
*
* @since 7.6.1
*/
int size();

}
Expand Up @@ -32,12 +32,13 @@
import org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler;

import javax.inject.Inject;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class DefaultJavaToolchainRepositoryHandler extends DefaultNamedDomainObjectList<JavaToolchainRepository>
implements JavaToolchainRepositoryHandler {
public class DefaultJavaToolchainRepositoryHandler implements JavaToolchainRepositoryHandler {

private final JavaToolchainResolverRegistryInternal registry;
private final DefaultNamedDomainObjectList<JavaToolchainRepository> repositories;

private final Instantiator instantiator;

Expand All @@ -49,14 +50,17 @@ public class DefaultJavaToolchainRepositoryHandler extends DefaultNamedDomainObj

@Inject
public DefaultJavaToolchainRepositoryHandler(
JavaToolchainResolverRegistryInternal registry,
Instantiator instantiator,
ObjectFactory objectFactory,
ProviderFactory providerFactory,
AuthenticationSchemeRegistry authenticationSchemeRegistry
) {
super(JavaToolchainRepository.class, instantiator, new RepositoryNamer(), CollectionCallbackActionDecorator.NOOP);
this.registry = registry;
this.repositories = new DefaultNamedDomainObjectList<JavaToolchainRepository>(JavaToolchainRepository.class, instantiator, new RepositoryNamer(), CollectionCallbackActionDecorator.NOOP) {
@Override
public String getTypeDisplayName() {
return "repository";
}
};
this.instantiator = instantiator;
this.objectFactory = objectFactory;
this.providerFactory = providerFactory;
Expand All @@ -81,14 +85,19 @@ public void repository(String name, Action<? super JavaToolchainRepository> conf
DefaultJavaToolchainRepository repository = objectFactory.newInstance(DefaultJavaToolchainRepository.class, name, authenticationContainer, authenticationSupporter, providerFactory);
configureAction.execute(repository);

boolean isNew = registry.getRepositories().add(repository);
boolean isNew = repositories.add(repository);
if (!isNew) {
throw new GradleException("Duplicate configuration for repository '" + name + "'.");
}
}

@Override
public String getTypeDisplayName() {
return "repository";
public List<JavaToolchainRepository> repositories() {
return Collections.unmodifiableList(repositories);
}

@Override
public int size() {
return repositories.size();
}
}
Expand Up @@ -29,7 +29,6 @@
import org.gradle.internal.authentication.AuthenticationSchemeRegistry;
import org.gradle.internal.reflect.Instantiator;
import org.gradle.jvm.toolchain.JavaToolchainRepository;
import org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler;
import org.gradle.jvm.toolchain.JavaToolchainResolver;

import javax.inject.Inject;
Expand All @@ -47,7 +46,7 @@ public abstract class DefaultJavaToolchainResolverRegistry implements JavaToolch

private final BuildServiceRegistry sharedServices;

private final DefaultJavaToolchainRepositoryHandler repositories;
private final DefaultJavaToolchainRepositoryHandler repositoryHandler;

private final List<RealizedJavaToolchainRepository> realizedRepositories = new ArrayList<>();

Expand All @@ -62,12 +61,12 @@ public DefaultJavaToolchainResolverRegistry(
AuthenticationSchemeRegistry authenticationSchemeRegistry
) {
this.sharedServices = gradle.getSharedServices();
this.repositories = objectFactory.newInstance(DefaultJavaToolchainRepositoryHandler.class, this, instantiator, objectFactory, providerFactory, authenticationSchemeRegistry);
this.repositoryHandler = objectFactory.newInstance(DefaultJavaToolchainRepositoryHandler.class, instantiator, objectFactory, providerFactory, authenticationSchemeRegistry);
}

@Override
public JavaToolchainRepositoryHandler getRepositories() {
return repositories;
public DefaultJavaToolchainRepositoryHandler getRepositories() {
return repositoryHandler;
}

@Override
Expand All @@ -82,7 +81,7 @@ public <T extends JavaToolchainResolver> void register(Class<T> implementationTy

@Override
public List<RealizedJavaToolchainRepository> requestedRepositories() {
if (realizedRepositories.size() != repositories.size()) {
if (realizedRepositories.size() != repositoryHandler.size()) {
realizeRepositories();
}
return realizedRepositories;
Expand All @@ -92,7 +91,7 @@ private void realizeRepositories() {
realizedRepositories.clear();

Set<Class<?>> resolvers = new HashSet<>();
for (JavaToolchainRepository repository : repositories) {
for (JavaToolchainRepository repository : repositoryHandler.repositories()) {
if (!resolvers.add(repository.getResolverClass().get())) {
throw new GradleException("Duplicate configuration for repository implementation '" + repository.getResolverClass().get().getName() + "'.");
}
Expand Down
Expand Up @@ -17,13 +17,12 @@
package org.gradle.jvm.toolchain.internal;

import org.gradle.jvm.toolchain.JavaToolchainResolverRegistry;
import org.gradle.jvm.toolchain.JavaToolchainRepositoryHandler;

import java.util.List;

public interface JavaToolchainResolverRegistryInternal extends JavaToolchainResolverRegistry {

JavaToolchainRepositoryHandler getRepositories();
DefaultJavaToolchainRepositoryHandler getRepositories();

List<? extends RealizedJavaToolchainRepository> requestedRepositories();
}

0 comments on commit c9e574e

Please sign in to comment.