Skip to content

Commit 5a8d500

Browse files
authored
Replace project usages in ProGuardTask by injected Gradle services (#380)
fixes #254
1 parent 06c2d12 commit 5a8d500

File tree

2 files changed

+23
-23
lines changed

2 files changed

+23
-23
lines changed

gradle-plugin/src/main/java/proguard/gradle/ProGuardTask.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.gradle.api.DefaultTask;
2525
import org.gradle.api.file.*;
2626
import org.gradle.api.logging.*;
27+
import org.gradle.api.model.ObjectFactory;
2728
import org.gradle.api.tasks.*;
2829
import org.gradle.api.tasks.Optional;
2930
import org.gradle.util.GradleVersion;
@@ -32,6 +33,7 @@
3233
import proguard.classfile.util.ClassUtil;
3334
import proguard.util.ListUtil;
3435

36+
import javax.inject.Inject;
3537
import java.io.*;
3638
import java.net.*;
3739
import java.util.*;
@@ -44,6 +46,11 @@
4446
@CacheableTask
4547
public abstract class ProGuardTask extends DefaultTask
4648
{
49+
@Inject
50+
protected abstract ObjectFactory getObjectFactory();
51+
@Inject
52+
protected abstract ProjectLayout getProjectLayout();
53+
4754
// Accumulated input and output, for the sake of Gradle's lazy file
4855
// resolution and lazy task execution.
4956
private final List inJarFiles = new ArrayList();
@@ -63,16 +70,12 @@ public abstract class ProGuardTask extends DefaultTask
6370
private ClassSpecification classSpecification;
6471

6572
public static final String DEFAULT_CONFIG_RESOURCE_PREFIX = "/lib";
66-
private final String resolvedConfigurationFileNamePrefix = getProject().file(DEFAULT_CONFIG_RESOURCE_PREFIX).toString();
73+
private final String resolvedConfigurationFileNamePrefix = getProjectLayout().files(DEFAULT_CONFIG_RESOURCE_PREFIX).getSingleFile().toString();
6774

6875
// INTERNAL USE ONLY - write extra data entries to this jar
6976
private File extraJar;
7077

7178
public ProGuardTask() {
72-
if (GradleVersion.current().compareTo(GradleVersion.version("7.4")) >= 0) {
73-
// This method was added in Gradle 7.4
74-
notCompatibleWithConfigurationCache("https://github.com/Guardsquare/proguard/issues/254");
75-
}
7679
}
7780

7881
// Gradle task inputs and outputs, because annotations on the List fields
@@ -82,26 +85,26 @@ public ProGuardTask() {
8285
@Classpath
8386
public FileCollection getInJarFileCollection()
8487
{
85-
return getProject().files(inJarFiles);
88+
return getProjectLayout().files(inJarFiles);
8689
}
8790

8891
@OutputFiles
8992
public FileCollection getOutJarFileCollection()
9093
{
91-
return getProject().files(outJarFiles);
94+
return getProjectLayout().files(outJarFiles);
9295
}
9396

9497
@Classpath
9598
public FileCollection getLibraryJarFileCollection()
9699
{
97-
return getProject().files(libraryJarFiles);
100+
return getProjectLayout().files(libraryJarFiles);
98101
}
99102

100103
@InputFiles
101104
@PathSensitive(PathSensitivity.RELATIVE)
102105
public FileCollection getConfigurationFileCollection()
103106
{
104-
return getProject().files(configurationFiles);
107+
return getProjectLayout().files(configurationFiles);
105108
}
106109

107110
// Convenience methods to retrieve settings from outside the task.
@@ -672,7 +675,7 @@ public void printseeds()
672675
public void printseeds(Object printSeeds)
673676
throws ParseException
674677
{
675-
configuration.printSeeds = getProject().file(printSeeds);
678+
configuration.printSeeds = getProjectLayout().files(printSeeds).getSingleFile();
676679
}
677680

678681
@Optional
@@ -710,7 +713,7 @@ public void printusage()
710713
public void printusage(Object printUsage)
711714
throws ParseException
712715
{
713-
configuration.printUsage = getProject().file(printUsage);
716+
configuration.printUsage = getProjectLayout().files(printUsage).getSingleFile();
714717
}
715718

716719
@Optional
@@ -925,7 +928,7 @@ public void printmapping()
925928
public void printmapping(Object printMapping)
926929
throws ParseException
927930
{
928-
configuration.printMapping = getProject().file(printMapping);
931+
configuration.printMapping = getProjectLayout().files(printMapping).getSingleFile();
929932
}
930933

931934
@Optional
@@ -937,7 +940,7 @@ public File getPrintMappingFile() {
937940
public void applymapping(Object applyMapping)
938941
throws ParseException
939942
{
940-
configuration.applyMapping = getProject().file(applyMapping);
943+
configuration.applyMapping = getProjectLayout().files(applyMapping).getSingleFile();
941944
}
942945

943946
public void obfuscationdictionary(Object obfuscationDictionary)
@@ -1219,7 +1222,7 @@ public void android()
12191222
public void keystore(Object keyStore)
12201223
{
12211224
configuration.keyStores =
1222-
extendList(configuration.keyStores, getProject().file(keyStore));
1225+
extendList(configuration.keyStores, getProjectLayout().files(keyStore).getSingleFile());
12231226
}
12241227

12251228
public void keystorepassword(String keyStorePassword)
@@ -1321,7 +1324,7 @@ public void printconfiguration(Object printConfiguration)
13211324
throws ParseException
13221325
{
13231326
configuration.printConfiguration =
1324-
getProject().file(printConfiguration);
1327+
getProjectLayout().files(printConfiguration).getSingleFile();
13251328
}
13261329

13271330
@Optional
@@ -1346,7 +1349,7 @@ public void dump()
13461349
public void dump(Object dump)
13471350
throws ParseException
13481351
{
1349-
configuration.dump = getProject().file(dump);
1352+
configuration.dump = getProjectLayout().files(dump).getSingleFile();
13501353
}
13511354

13521355
@Optional
@@ -1490,7 +1493,7 @@ private Configuration getConfiguration() throws Exception
14901493
Object fileObject = configurationFiles.get(index);
14911494

14921495
ConfigurableFileCollection fileCollection =
1493-
getProject().files(fileObject);
1496+
getObjectFactory().fileCollection().from(fileObject);
14941497

14951498
// Parse the configuration as a collection of files.
14961499
Iterator<File> files = fileCollection.iterator();
@@ -1595,7 +1598,7 @@ private ClassPath extendClassPath(ClassPath classPath,
15951598
Map filterArgs,
15961599
boolean output)
15971600
{
1598-
ConfigurableFileCollection fileCollection = getProject().files(files);
1601+
ConfigurableFileCollection fileCollection = getObjectFactory().fileCollection().from(files);
15991602

16001603
if (classPath == null)
16011604
{
@@ -2299,7 +2302,7 @@ private List extendList(List list, Object object)
22992302
*/
23002303
private URL url(Object fileObject) throws MalformedURLException
23012304
{
2302-
File file = getProject().file(fileObject);
2305+
File file = getProjectLayout().files(fileObject).getSingleFile();
23032306
return
23042307
fileObject instanceof URL ? (URL)fileObject :
23052308
fileObject instanceof String &&

gradle-plugin/src/test/kotlin/proguard/gradle/GradlePluginIntegrationTest.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ class GradlePluginIntegrationTest : FreeSpec({
5555
}
5656
}
5757

58-
// ProguardTask is still incompatible, but will not fail the build. Once the issue is resolved, this test will fail
59-
// and should be updated to demonstrate compatibility.
6058
"ProguardTask will not fail when configuration cache is used" - {
6159
val projectRoot = tempdir()
6260
val fixture = File(GradlePluginIntegrationTest::class.java.classLoader.getResource("application").path)
@@ -76,8 +74,7 @@ class GradlePluginIntegrationTest : FreeSpec({
7674

7775
"Then the build was successful with configuration cache" {
7876
result.output shouldContain "SUCCESSFUL"
79-
// E.g., "Configuration cache entry discarded with 4 problems."
80-
result.output shouldContain "Configuration cache entry discarded with"
77+
result.output shouldContain "Configuration cache entry stored."
8178
}
8279
}
8380
}

0 commit comments

Comments
 (0)