Skip to content

Commit 5c2efe4

Browse files
committed
Remove dependency on the plugin API from the adapter interfaces
1 parent d66ccbe commit 5c2efe4

15 files changed

Lines changed: 104 additions & 134 deletions

‎build.gradle‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ testing {
7575
dependencies {
7676
implementation(platform('org.junit:junit-bom:5.10.2'))
7777
implementation('org.junit.jupiter:junit-jupiter')
78-
implementation('com.tngtech.archunit:archunit-junit5:1.2.1')
7978
}
8079
}
8180

‎src/develocityCompatibilityTest/java/com/gradle/ccud/adapters/develocity/DevelocityBuildCacheAdapterTest.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class DevelocityBuildCacheAdapterTest {
2323
@BeforeEach
2424
void setup() {
2525
cache = mock();
26-
adapter = BuildCacheAdapter.create(cache, DevelocityBuildCache.class);
26+
adapter = new DevelocityBuildCacheAdapter(cache);
2727
}
2828

2929
@Test

‎src/develocityCompatibilityTest/java/com/gradle/ccud/adapters/develocity/DevelocityConfigurationAdapterTest.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void setup() {
3030
buildScan = mock();
3131
configuration = mock();
3232
when(configuration.getBuildScan()).thenReturn(buildScan);
33-
adapter = DevelocityAdapter.create(configuration);
33+
adapter = new DevelocityConfigurationAdapter(configuration);
3434
}
3535

3636
@Test

‎src/enterpriseCompatibilityTest/java/com/gradle/ccud/adapters/enterprise/BuildScanExtension_1_X_AdapterTest.java‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import com.gradle.ccud.adapters.BuildResultAdapter;
44
import com.gradle.ccud.adapters.DevelocityAdapter;
55
import com.gradle.ccud.adapters.PublishedBuildScanAdapter;
6-
import com.gradle.ccud.adapters.enterprise.proxies.BuildScanExtensionProxy;
7-
import com.gradle.ccud.adapters.reflection.ProxyFactory;
86
import com.gradle.cuud.adapters.ActionMockFixtures.ArgCapturingAction;
97
import com.gradle.scan.plugin.BuildScanExtension;
108
import org.junit.jupiter.api.BeforeEach;
@@ -35,7 +33,7 @@ public class BuildScanExtension_1_X_AdapterTest {
3533
void setup() {
3634
extension = mock();
3735
// bypass Gradle version check
38-
adapter = new BuildScanExtension_1_X_Adapter(ProxyFactory.createProxy(extension, BuildScanExtensionProxy.class));
36+
adapter = new BuildScanExtension_1_X_Adapter(extension);
3937
}
4038

4139
@Test

‎src/enterpriseCompatibilityTest/java/com/gradle/ccud/adapters/enterprise/GradleEnterpriseBuildCacheAdapterTest.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.gradle.ccud.adapters.enterprise;
22

33
import com.gradle.ccud.adapters.BuildCacheAdapter;
4+
import com.gradle.ccud.adapters.enterprise.proxies.GradleEnterpriseBuildCacheProxy;
5+
import com.gradle.ccud.adapters.reflection.ProxyFactory;
46
import com.gradle.enterprise.gradleplugin.GradleEnterpriseBuildCache;
57
import org.junit.jupiter.api.BeforeEach;
68
import org.junit.jupiter.api.DisplayName;
@@ -23,7 +25,7 @@ public class GradleEnterpriseBuildCacheAdapterTest {
2325
@BeforeEach
2426
void setup() {
2527
cache = mock();
26-
adapter = BuildCacheAdapter.create(cache, GradleEnterpriseBuildCache.class);
28+
adapter = new GradleEnterpriseBuildCacheAdapter(ProxyFactory.createProxy(cache, GradleEnterpriseBuildCacheProxy.class));
2729
}
2830

2931
@Test

‎src/enterpriseCompatibilityTest/java/com/gradle/ccud/adapters/enterprise/GradleEnterpriseExtensionAdapterTest.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void setup() {
2727
buildScan = mock();
2828
extension = mock();
2929
when(extension.getBuildScan()).thenReturn(buildScan);
30-
adapter = DevelocityAdapter.create(extension);
30+
adapter = new GradleEnterpriseExtensionAdapter(extension);
3131
}
3232

3333
@Test
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.gradle;
2+
3+
import com.gradle.ccud.adapters.BuildCacheAdapter;
4+
import com.gradle.ccud.adapters.DevelocityAdapter;
5+
import com.gradle.ccud.adapters.develocity.DevelocityBuildCacheAdapter;
6+
import com.gradle.ccud.adapters.develocity.DevelocityConfigurationAdapter;
7+
import com.gradle.ccud.adapters.enterprise.BuildScanExtension_1_X_Adapter;
8+
import com.gradle.ccud.adapters.enterprise.GradleEnterpriseBuildCacheAdapter;
9+
import com.gradle.ccud.adapters.enterprise.GradleEnterpriseExtensionAdapter;
10+
import com.gradle.ccud.adapters.enterprise.proxies.GradleEnterpriseBuildCacheProxy;
11+
import com.gradle.ccud.adapters.reflection.ProxyFactory;
12+
import com.gradle.develocity.agent.gradle.buildcache.DevelocityBuildCache;
13+
import org.gradle.caching.configuration.AbstractBuildCache;
14+
15+
import java.util.Arrays;
16+
import java.util.stream.Stream;
17+
18+
import static com.gradle.Utils.isGradle5OrNewer;
19+
20+
class AdapterFactory {
21+
22+
private AdapterFactory() {
23+
}
24+
25+
private static final String DEVELOCITY_CONFIGURATION = "com.gradle.develocity.agent.gradle.DevelocityConfiguration";
26+
private static final String GRADLE_ENTERPRISE_EXTENSION = "com.gradle.enterprise.gradleplugin.GradleEnterpriseExtension";
27+
private static final String BUILD_SCAN_EXTENSION = "com.gradle.scan.plugin.BuildScanExtension";
28+
29+
static DevelocityAdapter createDevelocityAdapter(Object gradleEnterpriseOrDevelocity) {
30+
if (isDevelocityConfiguration(gradleEnterpriseOrDevelocity)) {
31+
return new DevelocityConfigurationAdapter(gradleEnterpriseOrDevelocity);
32+
} else if (isGradleEnterpriseExtension(gradleEnterpriseOrDevelocity)) {
33+
return new GradleEnterpriseExtensionAdapter(gradleEnterpriseOrDevelocity);
34+
} else if (!isGradle5OrNewer() && isBuildScanExtension(gradleEnterpriseOrDevelocity)) {
35+
// Build Scan plugin only exposes the buildScan extension with a limited functionality
36+
return new BuildScanExtension_1_X_Adapter(gradleEnterpriseOrDevelocity);
37+
}
38+
39+
throw new IllegalArgumentException("Provided extension of type '" + gradleEnterpriseOrDevelocity.getClass().getName() + "' is neither the Develocity configuration nor the Gradle Enterprise extension");
40+
}
41+
42+
static boolean isDevelocityConfiguration(Object gradleEnterpriseOrDevelocity) {
43+
return implementsInterface(gradleEnterpriseOrDevelocity, DEVELOCITY_CONFIGURATION);
44+
}
45+
46+
static boolean isGradleEnterpriseExtension(Object gradleEnterpriseOrDevelocity) {
47+
return implementsInterface(gradleEnterpriseOrDevelocity, GRADLE_ENTERPRISE_EXTENSION);
48+
}
49+
50+
static boolean isBuildScanExtension(Object gradleEnterpriseOrDevelocity) {
51+
return implementsInterface(gradleEnterpriseOrDevelocity, BUILD_SCAN_EXTENSION);
52+
}
53+
54+
static boolean implementsInterface(Object object, String interfaceName) {
55+
Class<?> clazz = object.getClass();
56+
while (clazz != null) {
57+
Class<?>[] interfaces = clazz.getInterfaces();
58+
boolean implementsInterface = Stream.concat(
59+
Arrays.stream(interfaces),
60+
Arrays.stream(interfaces).flatMap(it -> Arrays.stream(it.getInterfaces()))
61+
).anyMatch(it -> interfaceName.equals(it.getName()));
62+
63+
if (implementsInterface) {
64+
return true;
65+
}
66+
67+
clazz = clazz.getSuperclass();
68+
}
69+
70+
return false;
71+
}
72+
73+
static BuildCacheAdapter createBuildCacheAdapter(AbstractBuildCache cache, Class<? extends AbstractBuildCache> reportedCacheClass) {
74+
if (reportedCacheClass.getName().toLowerCase().contains("develocity")) {
75+
return new DevelocityBuildCacheAdapter((DevelocityBuildCache) cache);
76+
}
77+
78+
return new GradleEnterpriseBuildCacheAdapter(ProxyFactory.createProxy(cache, GradleEnterpriseBuildCacheProxy.class));
79+
}
80+
}

‎src/main/java/com/gradle/CommonCustomUserDataGradlePlugin.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.Arrays;
1515
import java.util.concurrent.atomic.AtomicBoolean;
1616

17+
import static com.gradle.AdapterFactory.createDevelocityAdapter;
1718
import static com.gradle.Utils.isGradle4OrNewer;
1819
import static com.gradle.Utils.isGradle5OrNewer;
1920
import static com.gradle.Utils.isGradle6OrNewer;
@@ -56,7 +57,7 @@ public static void apply(Object gradleEnterpriseOrDevelocity, ProviderFactory pr
5657
}
5758

5859
private static void applySettingsPlugin(Object gradleEnterpriseOrDevelocity, ProviderFactory providers, Settings settings) {
59-
DevelocityAdapter develocity = DevelocityAdapter.create(gradleEnterpriseOrDevelocity);
60+
DevelocityAdapter develocity = createDevelocityAdapter(gradleEnterpriseOrDevelocity);
6061
CustomDevelocityConfig customDevelocityConfig = new CustomDevelocityConfig();
6162

6263
customDevelocityConfig.configureDevelocity(develocity);
@@ -123,7 +124,7 @@ private void applyProjectPluginGradle4(Project project) {
123124
private void applyProjectPlugin(Project project, Object develocityOrBuildScanExtension) {
124125
CustomDevelocityConfig customDevelocityConfig = new CustomDevelocityConfig();
125126

126-
DevelocityAdapter develocity = DevelocityAdapter.create(develocityOrBuildScanExtension);
127+
DevelocityAdapter develocity = createDevelocityAdapter(develocityOrBuildScanExtension);
127128
customDevelocityConfig.configureDevelocity(develocity);
128129

129130
BuildScanAdapter buildScan = develocity.getBuildScan();

‎src/main/java/com/gradle/Overrides.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import java.time.Duration;
1111
import java.util.Optional;
1212

13+
import static com.gradle.AdapterFactory.createBuildCacheAdapter;
14+
1315
/**
1416
* Provide standardized Develocity configuration. By applying the plugin, these settings will automatically be applied.
1517
*/
@@ -69,7 +71,7 @@ void configureBuildCache(BuildCacheConfiguration buildCache, Class<? extends Abs
6971
});
7072
} else if (develocityCacheClass.isInstance(buildCache.getRemote())) {
7173
buildCache.remote(develocityCacheClass, remote -> {
72-
BuildCacheAdapter adapter = BuildCacheAdapter.create(remote, develocityCacheClass);
74+
BuildCacheAdapter adapter = createBuildCacheAdapter(remote, develocityCacheClass);
7375
sysPropertyOrEnvVariable(REMOTE_CACHE_SERVER, providers).ifPresent(adapter::setServer);
7476
sysPropertyOrEnvVariable(REMOTE_CACHE_PATH, providers).ifPresent(adapter::setPath);
7577
booleanSysPropertyOrEnvVariable(REMOTE_CACHE_ALLOW_UNTRUSTED_SERVER, providers).ifPresent(adapter::setAllowUntrustedServer);

‎src/main/java/com/gradle/ccud/adapters/BuildCacheAdapter.java‎

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
package com.gradle.ccud.adapters;
22

3-
import com.gradle.ccud.adapters.develocity.DevelocityBuildCacheAdapter;
4-
import com.gradle.ccud.adapters.enterprise.GradleEnterpriseBuildCacheAdapter;
5-
import com.gradle.ccud.adapters.enterprise.proxies.GradleEnterpriseBuildCacheProxy;
6-
import com.gradle.ccud.adapters.reflection.ProxyFactory;
7-
import com.gradle.develocity.agent.gradle.buildcache.DevelocityBuildCache;
8-
import org.gradle.caching.configuration.AbstractBuildCache;
93
import org.gradle.caching.configuration.BuildCache;
104

115
import javax.annotation.Nullable;
@@ -15,15 +9,6 @@
159
*/
1610
public interface BuildCacheAdapter extends BuildCache {
1711

18-
// if the method is called, we know that it is either a GE or DV cache
19-
static BuildCacheAdapter create(AbstractBuildCache cache, Class<? extends AbstractBuildCache> reportedCacheClass) {
20-
if (reportedCacheClass.getName().toLowerCase().contains("develocity")) {
21-
return new DevelocityBuildCacheAdapter((DevelocityBuildCache) cache);
22-
}
23-
24-
return new GradleEnterpriseBuildCacheAdapter(ProxyFactory.createProxy(cache, GradleEnterpriseBuildCacheProxy.class));
25-
}
26-
2712
@Nullable
2813
String getServer();
2914

0 commit comments

Comments
 (0)