Skip to content

Commit ea9ad3d

Browse files
authored
Config avoidance (#1737)
* Avoiding registering the task when there are no plugins available * Adding variant configurations * Enhancing config dependency count check
1 parent f071a02 commit ea9ad3d

File tree

1 file changed

+47
-16
lines changed

1 file changed

+47
-16
lines changed

byte-buddy-gradle-plugin/android-plugin/src/main/java/net/bytebuddy/build/gradle/android/ByteBuddyAndroidPlugin.java

+47-16
Original file line numberDiff line numberDiff line change
@@ -160,32 +160,60 @@ protected VariantAction(Project project, Configuration configuration) {
160160
* {@inheritDoc}
161161
*/
162162
public void execute(Variant variant) {
163-
if (variant.getBuildType() == null) {
163+
String buildType = variant.getBuildType();
164+
if (buildType == null) {
164165
throw new GradleException("Build type for " + variant + " was null");
165166
}
166-
Configuration configuration = configurations.get(variant.getBuildType());
167-
if (configuration == null) {
168-
configuration = project.getConfigurations().create(variant.getBuildType() + "ByteBuddy", new VariantConfigurationConfigurationAction(project,
169-
this.configuration,
170-
variant.getBuildType()));
171-
Configuration previous = configurations.putIfAbsent(variant.getBuildType(), configuration);
172-
if (previous != null) {
173-
configuration = previous;
174-
}
167+
String variantName = variant.getName();
168+
String configurationSuffix = "ByteBuddy";
169+
ConfigurationConfigurationAction declarableConfigurationAction = new ConfigurationConfigurationAction();
170+
171+
// Example of declarable build config names: "debugByteBuddy, releaseByteBuddy".
172+
Configuration buildTypeDeclarableConfiguration = getBuildTypeConfiguration(buildType, configurationSuffix, declarableConfigurationAction);
173+
174+
// Example of declarable variant config names for a "demo" flavor name: "demoDebugByteBuddy, demoReleaseByteBuddy".
175+
String variantDeclarableConfigurationName = variantName + configurationSuffix;
176+
Configuration variantDeclarableConfiguration;
177+
if (variantDeclarableConfigurationName.equals(buildTypeDeclarableConfiguration.getName())) {
178+
// When there are no "flavors" defined, the variant and build type names are the same.
179+
variantDeclarableConfiguration = buildTypeDeclarableConfiguration;
180+
} else {
181+
variantDeclarableConfiguration = project.getConfigurations().maybeCreate(variantDeclarableConfigurationName);
182+
declarableConfigurationAction.execute(variantDeclarableConfiguration);
183+
variantDeclarableConfiguration.extendsFrom(buildTypeDeclarableConfiguration);
175184
}
185+
186+
// Example of resolvable variant config names: "demoDebugByteBuddyClasspath, demoReleaseByteBuddyClasspath".
187+
Configuration variantResolvableConfiguration = project.getConfigurations().create(variantDeclarableConfigurationName + "Classpath", new VariantConfigurationConfigurationAction(
188+
project, variantDeclarableConfiguration, buildType
189+
));
176190
if (TRANSFORMATION_DISPATCHER instanceof TransformationDispatcher.ForApk74CompatibleAndroid) {
177-
TRANSFORMATION_DISPATCHER.accept(project, variant, configuration, null);
191+
TRANSFORMATION_DISPATCHER.accept(project, variant, variantResolvableConfiguration, null);
178192
} else {
179-
Provider<ByteBuddyAndroidService> byteBuddyAndroidServiceProvider = project.getGradle().getSharedServices().registerIfAbsent(variant.getName() + "ByteBuddyAndroidService",
193+
Provider<ByteBuddyAndroidService> byteBuddyAndroidServiceProvider = project.getGradle().getSharedServices().registerIfAbsent(variantName + "ByteBuddyAndroidService",
180194
ByteBuddyAndroidService.class,
181195
new ByteBuddyAndroidService.ConfigurationAction(project.getExtensions().getByType(BaseExtension.class)));
182196
FileCollection classPath = RuntimeClassPathResolver.INSTANCE.apply(variant);
183197
variant.getInstrumentation().transformClassesWith(ByteBuddyAsmClassVisitorFactory.class, InstrumentationScope.ALL, new ByteBuddyTransformationConfiguration(project,
184-
configuration,
198+
variantResolvableConfiguration,
185199
byteBuddyAndroidServiceProvider,
186200
classPath));
187-
TRANSFORMATION_DISPATCHER.accept(project, variant, configuration, classPath);
201+
TRANSFORMATION_DISPATCHER.accept(project, variant, variantResolvableConfiguration, classPath);
202+
}
203+
}
204+
205+
private Configuration getBuildTypeConfiguration(String buildType, String configurationSuffix, Action<Configuration> configurationAction) {
206+
Configuration configuration = configurations.get(buildType);
207+
if (configuration == null) {
208+
configuration = project.getConfigurations().maybeCreate(buildType + configurationSuffix);
209+
configurationAction.execute(configuration);
210+
configuration.extendsFrom(this.configuration);
211+
Configuration previous = configurations.putIfAbsent(buildType, configuration);
212+
if (previous != null) {
213+
configuration = previous;
214+
}
188215
}
216+
return configuration;
189217
}
190218
}
191219

@@ -346,7 +374,7 @@ protected static class VariantConfigurationConfigurationAction implements Action
346374
private final Project project;
347375

348376
/**
349-
* The general Byte Buddy configuration.
377+
* The configuration to extend from.
350378
*/
351379
private final Configuration configuration;
352380

@@ -359,7 +387,7 @@ protected static class VariantConfigurationConfigurationAction implements Action
359387
* Creates a new variant configuration for a {@link Configuration}.
360388
*
361389
* @param project The current Gradle project.
362-
* @param configuration The general Byte Buddy configuration.
390+
* @param configuration The configuration to extend from.
363391
* @param buildType The name of the build type.
364392
*/
365393
protected VariantConfigurationConfigurationAction(Project project, Configuration configuration, String buildType) {
@@ -583,6 +611,9 @@ protected ForApk74CompatibleAndroid(Method forScope, Method use, Method toTransf
583611
* {@inheritDoc}
584612
*/
585613
public void accept(Project project, Variant variant, Configuration configuration, FileCollection classPath) {
614+
if (configuration.getAllDependencies().isEmpty()) {
615+
return;
616+
}
586617
TaskProvider<ByteBuddyLocalClassesEnhancerTask> provider = project.getTasks().register(variant.getName() + "BytebuddyTransform",
587618
ByteBuddyLocalClassesEnhancerTask.class,
588619
new ByteBuddyLocalClassesEnhancerTask.ConfigurationAction(ByteBuddyViewConfiguration.toClassPath(project, configuration),

0 commit comments

Comments
 (0)