2020import java .util .Objects ;
2121import java .util .Set ;
2222import java .util .Map .Entry ;
23+ import java .util .function .Function ;
2324import java .util .jar .JarOutputStream ;
2425import java .util .zip .ZipEntry ;
2526import java .util .zip .ZipFile ;
2627
28+ import javax .inject .Inject ;
29+
2730import org .codehaus .groovy .runtime .InvokerHelper ;
2831import org .gradle .api .Task ;
2932import org .gradle .api .file .RegularFile ;
3033import org .gradle .api .provider .Provider ;
3134import org .gradle .api .tasks .TaskInputs ;
35+ import org .gradle .api .file .ArchiveOperations ;
36+ import org .gradle .api .file .FileTree ;
3237import org .gradle .api .file .FileTreeElement ;
3338import org .gradle .api .file .FileVisitDetails ;
3439import org .gradle .api .file .FileVisitor ;
3944import org .gradle .api .tasks .bundling .Zip ;
4045import org .gradle .api .tasks .util .PatternFilterable ;
4146import org .gradle .api .tasks .util .PatternSet ;
47+ import org .gradle .util .GradleVersion ;
4248
4349import groovy .lang .Closure ;
4450import groovy .util .MapEntry ;
@@ -59,6 +65,7 @@ public class SignTask implements PatternFilterable {
5965 private final Property <String > providerClass ;
6066 private final Property <String > providerArg ;
6167 private final PatternSet patternSet = new PatternSet ();
68+ private final Function <Object , FileTree > zipTree ;
6269
6370 @ SuppressWarnings ("serial" )
6471 SignTask (GradleJarSignerExtension ext , Zip parent , Closure <SignTask > config ) {
@@ -68,6 +75,11 @@ public class SignTask implements PatternFilterable {
6875 if (this .config != null )
6976 this .config .setDelegate (this );
7077
78+ if (GradleVersion .current ().compareTo (GradleVersion .version ("6.6" )) >= 0 )
79+ zipTree = this .parent .getProject ().getObjects ().newInstance (ArchiveOperationsAccess .class );
80+ else
81+ zipTree = this .parent .getProject ()::zipTree ;
82+
7183 ObjectFactory objs = this .parent .getProject ().getObjects ();
7284
7385 this .alias = objs .property (String .class );
@@ -94,6 +106,15 @@ public Object doCall() {
94106 this .parent .doLast (this ::signSafe );
95107 }
96108
109+ public static abstract class ArchiveOperationsAccess implements Function <Object , FileTree > {
110+ @ Inject public abstract ArchiveOperations getArchiveOperations ();
111+
112+ @ Override
113+ public FileTree apply (Object t ) {
114+ return getArchiveOperations ().zipTree (t );
115+ }
116+ }
117+
97118 private Object addProperties () {
98119 TaskInputs in = this .parent .getInputs ();
99120 if (!patternSet .isEmpty ()) {
@@ -133,7 +154,7 @@ private boolean hasEnoughInfo() {
133154 (this .keyStoreData .isPresent () || this .keyStoreFile .isPresent ());
134155 }
135156
136- @ SuppressWarnings ("unchecked" )
157+ @ SuppressWarnings ({ "unchecked" , "deprecation" } )
137158 private static File getTaskArchiveFile (Zip task ) {
138159 try {
139160 // Try getting the new thing first, to avoid potential deprecation methods
@@ -205,7 +226,7 @@ private <T extends Task> void sign(T task) throws IOException {
205226 map .put ("providerarg" , this .providerArg .get ());
206227
207228 try {
208- this .parent .getProject (). getAnt ().invokeMethod ("signjar" , map );
229+ this .parent .getAnt ().invokeMethod ("signjar" , map );
209230 } finally {
210231 if (!this .keyStoreFile .isPresent ())
211232 keyStore .delete ();
@@ -220,7 +241,7 @@ private void processInputJar(File input, File output, final Map<String, Entry<by
220241
221242 output .getParentFile ().mkdirs ();
222243 try (JarOutputStream outs = new JarOutputStream (new BufferedOutputStream (new FileOutputStream (output )))){
223- this .parent . getProject (). zipTree (input ).visit (new FileVisitor () {
244+ this .zipTree . apply (input ).visit (new FileVisitor () {
224245 @ Override
225246 public void visitDir (FileVisitDetails details ) {
226247 try {
0 commit comments