Hello community,

here is the log from the commit of package gradle for openSUSE:Factory checked 
in at 2019-12-09 21:36:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gradle (Old)
 and      /work/SRC/openSUSE:Factory/.gradle.new.4691 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gradle"

Mon Dec  9 21:36:22 2019 rev:11 rq:755237 version:4.4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/gradle/gradle.changes    2019-11-28 
13:50:45.390697438 +0100
+++ /work/SRC/openSUSE:Factory/.gradle.new.4691/gradle.changes  2019-12-09 
21:36:37.774064926 +0100
@@ -1,0 +2,21 @@
+Mon Dec  9 12:38:32 UTC 2019 - Fridrich Strba <[email protected]>
+
+- Modified patch:
+  * gradle-4.4.1-asm7.patch
+    + Rediff and use ASM7 api instead of ASM6, since we are using
+      objectweb-asm 7.2
+- Added patches:
+  * cast-estimated-runtime-to-long.patch
+    + estimatedRuntime must be cast to long otherwise gradle build
+      fails with "Cannot assign value of type java.math.BigDecimal
+      to variable of type long".
+  * java11-compatibility.patch
+    + Fixes the compatibility with Java 11. This is backport of
+      upstream changes in 4.8
+  * java8-compatibility.patch
+    + Keep compatibility with Java 8 by avoiding to use Java 9+
+      APIs
+  * remove-timestamps.patch
+    + Avoid timestamps and thus irreproducible builds
+
+-------------------------------------------------------------------

New:
----
  cast-estimated-runtime-to-long.patch
  java11-compatibility.patch
  java8-compatibility.patch
  remove-timestamps.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gradle.spec ++++++
--- /var/tmp/diff_new_pack.9XjKPe/_old  2019-12-09 21:36:39.086064410 +0100
+++ /var/tmp/diff_new_pack.9XjKPe/_new  2019-12-09 21:36:39.086064410 +0100
@@ -56,6 +56,11 @@
 
 Patch200:       gradle-4.4.1-asm7.patch
 
+Patch300:       java11-compatibility.patch
+Patch301:       java8-compatibility.patch
+Patch302:       remove-timestamps.patch
+Patch303:       cast-estimated-runtime-to-long.patch
+
 BuildRequires:  gradle-local
 BuildRequires:  xmvn-subst
 
@@ -202,7 +207,6 @@
 #!BuildRequires: groovy-lib sbt gpars
 # But we want to avoid cycle with oneself
 #!BuildRequires: gradle-bootstrap
-BuildConflicts: java-devel >= 9
 
 Obsoletes:      %{name}-bootstrap
 
@@ -356,11 +360,11 @@
 
 %build
 export LANG=en_US.UTF8
+export JAVA_OPTS="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"
 # Disables parallel build and daemon mode
 rm gradle.properties
 gradle-local --offline --no-daemon install xmvnInstall \
-    -Pgradle_installPath=$PWD/inst \
-    -PfinalRelease -Dbuild.number="%{?fedora:Fedora }%{?rhel:Red Hat 
}%{version}-%{release}"
+    -Pgradle_installPath=$PWD/inst -PfinalRelease
 
 # manpage build
 mkdir man

++++++ all-released-versions.json ++++++
--- /var/tmp/diff_new_pack.9XjKPe/_old  2019-12-09 21:36:39.154064382 +0100
+++ /var/tmp/diff_new_pack.9XjKPe/_new  2019-12-09 21:36:39.154064382 +0100
@@ -1,6 +1,6 @@
 [ {
-  "version" : "6.0.1-20191128003021+0000",
-  "buildTime" : "20191128003021+0000",
+  "version" : "6.0.1-20191209004608+0000",
+  "buildTime" : "20191209004608+0000",
   "current" : false,
   "snapshot" : true,
   "nightly" : false,
@@ -9,12 +9,12 @@
   "rcFor" : "",
   "milestoneFor" : "",
   "broken" : false,
-  "downloadUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.0.1-20191128003021+0000-bin.zip";,
-  "checksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.0.1-20191128003021+0000-bin.zip.sha256";,
-  "wrapperChecksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.0.1-20191128003021+0000-wrapper.jar.sha256";
+  "downloadUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.0.1-20191209004608+0000-bin.zip";,
+  "checksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.0.1-20191209004608+0000-bin.zip.sha256";,
+  "wrapperChecksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.0.1-20191209004608+0000-wrapper.jar.sha256";
 }, {
-  "version" : "6.1-20191127232441+0000",
-  "buildTime" : "20191127232441+0000",
+  "version" : "6.1-20191208230017+0000",
+  "buildTime" : "20191208230017+0000",
   "current" : false,
   "snapshot" : true,
   "nightly" : true,
@@ -23,9 +23,37 @@
   "rcFor" : "",
   "milestoneFor" : "",
   "broken" : false,
-  "downloadUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.1-20191127232441+0000-bin.zip";,
-  "checksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.1-20191127232441+0000-bin.zip.sha256";,
-  "wrapperChecksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.1-20191127232441+0000-wrapper.jar.sha256";
+  "downloadUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.1-20191208230017+0000-bin.zip";,
+  "checksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.1-20191208230017+0000-bin.zip.sha256";,
+  "wrapperChecksumUrl" : 
"https://services.gradle.org/distributions-snapshots/gradle-6.1-20191208230017+0000-wrapper.jar.sha256";
+}, {
+  "version" : "6.1-milestone-3",
+  "buildTime" : "20191203141333+0000",
+  "current" : false,
+  "snapshot" : false,
+  "nightly" : false,
+  "releaseNightly" : false,
+  "activeRc" : false,
+  "rcFor" : "",
+  "milestoneFor" : "6.1",
+  "broken" : false,
+  "downloadUrl" : 
"https://services.gradle.org/distributions/gradle-6.1-milestone-3-bin.zip";,
+  "checksumUrl" : 
"https://services.gradle.org/distributions/gradle-6.1-milestone-3-bin.zip.sha256";,
+  "wrapperChecksumUrl" : 
"https://services.gradle.org/distributions/gradle-6.1-milestone-3-wrapper.jar.sha256";
+}, {
+  "version" : "6.1-milestone-2",
+  "buildTime" : "20191128101755+0000",
+  "current" : false,
+  "snapshot" : false,
+  "nightly" : false,
+  "releaseNightly" : false,
+  "activeRc" : false,
+  "rcFor" : "",
+  "milestoneFor" : "6.1",
+  "broken" : false,
+  "downloadUrl" : 
"https://services.gradle.org/distributions/gradle-6.1-milestone-2-bin.zip";,
+  "checksumUrl" : 
"https://services.gradle.org/distributions/gradle-6.1-milestone-2-bin.zip.sha256";,
+  "wrapperChecksumUrl" : 
"https://services.gradle.org/distributions/gradle-6.1-milestone-2-wrapper.jar.sha256";
 }, {
   "version" : "6.1-milestone-1",
   "buildTime" : "20191120132405+0000",

++++++ cast-estimated-runtime-to-long.patch ++++++
--- 
a/buildSrc/src/main/groovy/org/gradle/testing/DistributedPerformanceTest.groovy
+++ 
b/buildSrc/src/main/groovy/org/gradle/testing/DistributedPerformanceTest.groovy
@@ -130,7 +130,7 @@
         def scenarios = scenarioList.readLines()
             .collect { line ->
                 def parts = Splitter.on(';').split(line).toList()
-                new Scenario(id : parts[0], estimatedRuntime: new 
BigDecimal(parts[1]), templates: parts.subList(2, parts.size()))
+                new Scenario(id : parts[0], estimatedRuntime: new 
BigDecimal(parts[1]) as long, templates: parts.subList(2, parts.size()))
             }
             .sort{ -it.estimatedRuntime }
 
++++++ gradle-4.4.1-asm7.patch ++++++
--- /var/tmp/diff_new_pack.9XjKPe/_old  2019-12-09 21:36:39.166064377 +0100
+++ /var/tmp/diff_new_pack.9XjKPe/_new  2019-12-09 21:36:39.166064377 +0100
@@ -1,5 +1,96 @@
---- 
gradle-4.4.1/subprojects/core/src/main/java/org/gradle/process/internal/worker/child/WorkerProcessClassPathProvider.java
   2017-12-20 09:05:14.000000000 +0100
-+++ 
gradle-4.4.1/subprojects/core/src/main/java/org/gradle/process/internal/worker/child/WorkerProcessClassPathProvider.java
   2019-11-25 12:06:16.258595142 +0100
+--- 
a/subprojects/core/src/main/java/org/gradle/api/internal/tasks/compile/ApiMemberSelector.java
++++ 
b/subprojects/core/src/main/java/org/gradle/api/internal/tasks/compile/ApiMemberSelector.java
+@@ -48,7 +48,7 @@
+     private boolean thisClassIsPrivateInnerClass;
+ 
+     public ApiMemberSelector(String className, ClassVisitor apiMemberAdapter, 
boolean apiIncludesPackagePrivateMembers) {
+-        super(ASM6);
++        super(ASM7);
+         this.className = className;
+         this.apiMemberAdapter = apiMemberAdapter;
+         this.apiIncludesPackagePrivateMembers = 
apiIncludesPackagePrivateMembers;
+@@ -166,7 +166,7 @@
+         if (isCandidateApiMember(access, apiIncludesPackagePrivateMembers) || 
("<init>".equals(name) && isInnerClass)) {
+             final MethodMember methodMember = new MethodMember(access, name, 
desc, signature, exceptions);
+             methods.add(methodMember);
+-            return new MethodVisitor(ASM6) {
++            return new MethodVisitor(ASM7) {
+                 @Override
+                 public AnnotationVisitor visitAnnotation(String desc, boolean 
visible) {
+                     AnnotationMember ann = new AnnotationMember(desc, 
visible);
+@@ -191,7 +191,7 @@
+             Object keepValue = (access & ACC_STATIC) == ACC_STATIC && 
((access & ACC_FINAL) == ACC_FINAL) ? value : null;
+             final FieldMember fieldMember = new FieldMember(access, name, 
signature, desc, keepValue);
+             fields.add(fieldMember);
+-            return new FieldVisitor(ASM6) {
++            return new FieldVisitor(ASM7) {
+                 @Override
+                 public AnnotationVisitor visitAnnotation(String desc, boolean 
visible) {
+                     AnnotationMember ann = new AnnotationMember(desc, 
visible);
+--- 
a/subprojects/core/src/main/java/org/gradle/api/internal/tasks/compile/MethodStubbingApiMemberAdapter.java
++++ 
b/subprojects/core/src/main/java/org/gradle/api/internal/tasks/compile/MethodStubbingApiMemberAdapter.java
+@@ -37,7 +37,7 @@
+     private String internalClassName;
+ 
+     public MethodStubbingApiMemberAdapter(ClassWriter cv) {
+-        super(ASM6, cv);
++        super(ASM7, cv);
+     }
+ 
+     @Override
+--- 
a/subprojects/core/src/main/java/org/gradle/api/internal/tasks/compile/SortingAnnotationVisitor.java
++++ 
b/subprojects/core/src/main/java/org/gradle/api/internal/tasks/compile/SortingAnnotationVisitor.java
+@@ -21,7 +21,7 @@
+ 
+ import java.util.List;
+ 
+-import static org.objectweb.asm.Opcodes.ASM6;
++import static org.objectweb.asm.Opcodes.ASM7;
+ 
+ public class SortingAnnotationVisitor extends AnnotationVisitor {
+ 
+@@ -33,7 +33,7 @@
+     private String arrayValueName;
+ 
+     public SortingAnnotationVisitor(AnnotationMember parentAnnotation, 
AnnotationVisitor av) {
+-        super(ASM6, av);
++        super(ASM7, av);
+         this.annotation = parentAnnotation;
+     }
+ 
+--- 
a/subprojects/core/src/main/java/org/gradle/groovy/scripts/internal/FileCacheBackedScriptClassCompiler.java
++++ 
b/subprojects/core/src/main/java/org/gradle/groovy/scripts/internal/FileCacheBackedScriptClassCompiler.java
+@@ -215,7 +215,7 @@
+         private final String contentHash;
+ 
+         public BuildScriptRemapper(ClassVisitor cv, ScriptSource source, 
String originalClassName, String contentHash) {
+-            super(ASM6, cv);
++            super(ASM7, cv);
+             this.scriptSource = source;
+             this.originalClassName = originalClassName;
+             this.contentHash = contentHash;
+@@ -338,7 +338,7 @@
+         class MethodRenamer extends MethodVisitor {
+ 
+             public MethodRenamer(final MethodVisitor mv) {
+-                super(ASM6, mv);
++                super(ASM7, mv);
+             }
+ 
+             public void visitTypeInsn(int i, String name) {
+--- 
a/subprojects/core/src/main/java/org/gradle/initialization/MixInLegacyTypesClassLoader.java
++++ 
b/subprojects/core/src/main/java/org/gradle/initialization/MixInLegacyTypesClassLoader.java
+@@ -122,7 +122,7 @@
+         private Set<String> booleanIsGetters = new HashSet<String>();
+ 
+         TransformingAdapter(ClassVisitor cv) {
+-            super(Opcodes.ASM6, cv);
++            super(Opcodes.ASM7, cv);
+         }
+ 
+         @Override
+--- 
a/subprojects/core/src/main/java/org/gradle/process/internal/worker/child/WorkerProcessClassPathProvider.java
++++ 
b/subprojects/core/src/main/java/org/gradle/process/internal/worker/child/WorkerProcessClassPathProvider.java
 @@ -44,8 +44,8 @@
  import org.objectweb.asm.ClassVisitor;
  import org.objectweb.asm.ClassWriter;
@@ -19,3 +110,191 @@
              classReader.accept(remappingVisitor, ClassReader.EXPAND_FRAMES);
              byte[] remappedClass = classWriter.toByteArray();
              String remappedClassName = 
remapper.map(internalName).concat(".class");
+--- 
a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/runtimeshaded/RuntimeShadedJarCreator.java
++++ 
b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/runtimeshaded/RuntimeShadedJarCreator.java
+@@ -412,7 +412,7 @@
+ 
+         @Override
+         public MethodVisitor visitMethod(int access, final String name, final 
String desc, String signature, String[] exceptions) {
+-            return new MethodVisitor(Opcodes.ASM6, super.visitMethod(access, 
name, desc, signature, exceptions)) {
++            return new MethodVisitor(Opcodes.ASM7, super.visitMethod(access, 
name, desc, signature, exceptions)) {
+                 @Override
+                 public void visitLdcInsn(Object cst) {
+                     if (cst instanceof String) {
+--- 
a/subprojects/internal-testing/src/main/groovy/org/gradle/test/fixtures/file/ClassFile.groovy
++++ 
b/subprojects/internal-testing/src/main/groovy/org/gradle/test/fixtures/file/ClassFile.groovy
+@@ -34,7 +34,7 @@
+     }
+ 
+     ClassFile(InputStream inputStream) {
+-        def methodVisitor = new MethodVisitor(Opcodes.ASM6) {
++        def methodVisitor = new MethodVisitor(Opcodes.ASM7) {
+             @Override
+             void visitLocalVariable(String name, String desc, String 
signature, Label start, Label end, int index) {
+                 hasLocalVars = true
+@@ -45,7 +45,7 @@
+                 hasLineNumbers = true
+             }
+         }
+-        def visitor = new ClassVisitor(Opcodes.ASM6) {
++        def visitor = new ClassVisitor(Opcodes.ASM7) {
+             @Override
+             void visit(int version, int access, String name, String 
signature, String superName, String[] interfaces) {
+                 classFileVersion = version
+--- 
a/subprojects/language-groovy/src/main/java/org/gradle/api/internal/tasks/compile/GroovyCompileTransformingClassLoader.java
++++ 
b/subprojects/language-groovy/src/main/java/org/gradle/api/internal/tasks/compile/GroovyCompileTransformingClassLoader.java
+@@ -65,7 +65,7 @@
+         private boolean found;
+ 
+         private AnnotationDetector() {
+-            super(Opcodes.ASM6);
++            super(Opcodes.ASM7);
+         }
+ 
+         @Override
+@@ -79,7 +79,7 @@
+ 
+     private static class TransformingAdapter extends ClassVisitor {
+         public TransformingAdapter(ClassWriter classWriter) {
+-            super(Opcodes.ASM6, classWriter);
++            super(Opcodes.ASM7, classWriter);
+         }
+ 
+         @Override
+@@ -94,13 +94,13 @@
+             private final List<String> names = new ArrayList<String>();
+ 
+             public AnnotationTransformingVisitor(AnnotationVisitor 
annotationVisitor) {
+-                super(Opcodes.ASM6, annotationVisitor);
++                super(Opcodes.ASM7, annotationVisitor);
+             }
+ 
+             @Override
+             public AnnotationVisitor visitArray(String name) {
+                 if (name.equals("classes")) {
+-                    return new AnnotationVisitor(Opcodes.ASM6){
++                    return new AnnotationVisitor(Opcodes.ASM7){
+                         @Override
+                         public void visit(String name, Object value) {
+                             Type type = (Type) value;
+@@ -108,7 +108,7 @@
+                         }
+                     };
+                 } else if (name.equals("value")) {
+-                    return new AnnotationVisitor(Opcodes.ASM6) {
++                    return new AnnotationVisitor(Opcodes.ASM7) {
+                         @Override
+                         public void visit(String name, Object value) {
+                             String type = (String) value;
+--- 
a/subprojects/language-java/src/main/java/org/gradle/api/internal/tasks/compile/incremental/asm/ClassDependenciesVisitor.java
++++ 
b/subprojects/language-java/src/main/java/org/gradle/api/internal/tasks/compile/incremental/asm/ClassDependenciesVisitor.java
+@@ -35,7 +35,7 @@
+ 
+ public class ClassDependenciesVisitor extends ClassVisitor {
+ 
+-    private final static int API = Opcodes.ASM6;
++    private final static int API = Opcodes.ASM7;
+     private static final MethodVisitor EMPTY_VISITOR = new MethodVisitor(API, 
null) {
+     };
+ 
+--- 
a/subprojects/launcher/src/main/java/org/gradle/tooling/internal/provider/serialization/ClientSidePayloadClassLoaderFactory.java
++++ 
b/subprojects/launcher/src/main/java/org/gradle/tooling/internal/provider/serialization/ClientSidePayloadClassLoaderFactory.java
+@@ -97,14 +97,14 @@
+             private boolean found;
+ 
+             private AnnotationDetector() {
+-                super(Opcodes.ASM6);
++                super(Opcodes.ASM7);
+             }
+ 
+             public AnnotationVisitor visitAnnotation(String desc, boolean 
visible) {
+                 if (desc.equals(ANNOTATION_DESCRIPTOR)) {
+                     found = true;
+                 }
+-                return new AnnotationVisitor(Opcodes.ASM6) {
++                return new AnnotationVisitor(Opcodes.ASM7) {
+ 
+                     @Override
+                     public void visit(String name, Object value) {
+@@ -120,7 +120,7 @@
+             private final String mixInInterface;
+ 
+             public TransformingAdapter(ClassWriter classWriter, String 
mixInInterface) {
+-                super(Opcodes.ASM6, classWriter);
++                super(Opcodes.ASM7, classWriter);
+                 this.mixInInterface = mixInInterface;
+             }
+ 
+--- 
a/subprojects/platform-jvm/src/test/groovy/org/gradle/jvm/tasks/api/internal/ApiClassExtractorTest.groovy
++++ 
b/subprojects/platform-jvm/src/test/groovy/org/gradle/jvm/tasks/api/internal/ApiClassExtractorTest.groovy
+@@ -286,7 +286,7 @@
+         when:
+         def cr = new ClassReader(api.extractApiClassFrom(api.classes.A))
+         def stubVersion = 0
+-        cr.accept(new ClassVisitor(Opcodes.ASM6) {
++        cr.accept(new ClassVisitor(Opcodes.ASM7) {
+             @Override
+             void visit(int version, int access, String name, String 
signature, String superName, String[] interfaces) {
+                 stubVersion = version
+@@ -455,7 +455,7 @@
+         when:
+         def apiClassBytes = api.extractApiClassFrom(api.classes['com.acme.A'])
+         def cr = new ClassReader(apiClassBytes)
+-        cr.accept(new ClassVisitor(Opcodes.ASM6) {
++        cr.accept(new ClassVisitor(Opcodes.ASM7) {
+             @Override
+             void visitSource(String source, String debug) {
+                 super.visitSource(source, debug)
+@@ -469,7 +469,7 @@
+ 
+             @Override
+             MethodVisitor visitMethod(int access, String name, String desc, 
String signature, String[] exceptions) {
+-                new MethodVisitor(Opcodes.ASM6) {
++                new MethodVisitor(Opcodes.ASM7) {
+                     @Override
+                     void visitLineNumber(int line, Label start) {
+                         throw new AssertionError("Should not produce any line 
number information but " +
+--- 
a/subprojects/plugin-development/src/main/java/org/gradle/plugin/devel/tasks/ValidateTaskProperties.java
++++ 
b/subprojects/plugin-development/src/main/java/org/gradle/plugin/devel/tasks/ValidateTaskProperties.java
+@@ -353,7 +353,7 @@
+         private final Collection<String> classNames;
+ 
+         public TaskNameCollectorVisitor(Collection<String> classNames) {
+-            super(Opcodes.ASM6);
++            super(Opcodes.ASM7);
+             this.classNames = classNames;
+         }
+ 
+--- 
a/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/detection/TestClassVisitor.java
++++ 
b/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/detection/TestClassVisitor.java
+@@ -27,7 +27,7 @@
+     protected final TestFrameworkDetector detector;
+ 
+     protected TestClassVisitor(TestFrameworkDetector detector) {
+-        super(Opcodes.ASM6);
++        super(Opcodes.ASM7);
+         if (detector == null) {
+             throw new IllegalArgumentException("detector == null!");
+         }
+--- 
a/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/junit/JUnitTestMethodDetecter.java
++++ 
b/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/junit/JUnitTestMethodDetecter.java
+@@ -24,7 +24,7 @@
+     private final JUnitTestClassDetecter testClassDetecter;
+ 
+     JUnitTestMethodDetecter(JUnitTestClassDetecter testClassDetecter) {
+-        super(Opcodes.ASM6);
++        super(Opcodes.ASM7);
+         this.testClassDetecter = testClassDetecter;
+     }
+ 
+--- 
a/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/testng/TestNGTestMethodDetecter.java
++++ 
b/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/testng/TestNGTestMethodDetecter.java
+@@ -27,7 +27,7 @@
+     private final Set<String> testMethodAnnotations = new HashSet<String>();
+ 
+     public TestNGTestMethodDetecter(TestNGTestClassDetecter 
testClassDetecter) {
+-        super(Opcodes.ASM6);
++        super(Opcodes.ASM7);
+         this.testClassDetecter = testClassDetecter;
+         testMethodAnnotations.add("Lorg/testng/annotations/Test;");
+         testMethodAnnotations.add("Lorg/testng/annotations/BeforeSuite;");


++++++ java11-compatibility.patch ++++++
--- 
a/subprojects/base-services/src/main/java/org/gradle/internal/classloader/ClassLoaderUtils.java
+++ 
b/subprojects/base-services/src/main/java/org/gradle/internal/classloader/ClassLoaderUtils.java
@@ -15,51 +15,41 @@
  */
 package org.gradle.internal.classloader;
 
+import org.gradle.api.JavaVersion;
 import org.gradle.internal.Cast;
 import org.gradle.internal.UncheckedException;
 import org.gradle.internal.concurrent.CompositeStoppable;
 import org.gradle.internal.reflect.JavaMethod;
-import org.gradle.internal.reflect.JavaReflectionUtil;
-import sun.misc.Unsafe;
 
 import javax.annotation.Nullable;
 import java.io.IOException;
-import java.lang.reflect.Field;
-import java.net.MalformedURLException;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
 import java.net.URL;
 import java.net.URLConnection;
 
-public abstract class ClassLoaderUtils {
-
-    private static final Unsafe UNSAFE;
-
-    static {
-        try {
-            Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
-            theUnsafe.setAccessible(true);
-            UNSAFE = (Unsafe) theUnsafe.get(null);
-        } catch (NoSuchFieldException e) {
-            throw new RuntimeException(e);
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
+import static org.gradle.internal.reflect.JavaReflectionUtil.method;
+import static org.gradle.internal.reflect.JavaReflectionUtil.staticMethod;
 
+public abstract class ClassLoaderUtils {
+    private static final ClassDefiner CLASS_DEFINER;
     private static final JavaMethod<ClassLoader, Package[]> 
GET_PACKAGES_METHOD;
     private static final JavaMethod<ClassLoader, Package> GET_PACKAGE_METHOD;
 
     static {
+        CLASS_DEFINER = JavaVersion.current().isJava9Compatible() ? new 
LookupClassDefiner() : new ReflectionClassDefiner();
         GET_PACKAGES_METHOD = getMethodWithFallback(Package[].class, new 
Class[0], "getDefinedPackages", "getPackages");
-        GET_PACKAGE_METHOD = getMethodWithFallback(Package.class, new Class[] 
{String.class}, "getDefinedPackage", "getPackage");
+        GET_PACKAGE_METHOD = getMethodWithFallback(Package.class, new 
Class[]{String.class}, "getDefinedPackage", "getPackage");
     }
 
     private static <T> JavaMethod<ClassLoader, T> 
getMethodWithFallback(Class<T> clazz, Class<?>[] params, String firstChoice, 
String fallback) {
         JavaMethod<ClassLoader, T> method;
         try {
-            method = JavaReflectionUtil.method(ClassLoader.class, clazz, 
firstChoice, params);
+            method = method(ClassLoader.class, clazz, firstChoice, params);
         } catch (Throwable e) {
             // We must not be on Java 9 where the getDefinedPackages() method 
exists. Fall back to getPackages()
-            method = JavaReflectionUtil.method(ClassLoader.class, clazz, 
fallback, params);
+            method = method(ClassLoader.class, clazz, fallback, params);
         }
         return method;
     }
@@ -85,8 +75,6 @@ public static void disableUrlConnectionCaching() {
             URL url = new URL("jar:file://valid_jar_url_syntax.jar!/");
             URLConnection urlConnection = url.openConnection();
             urlConnection.setDefaultUseCaches(false);
-        } catch (MalformedURLException e) {
-            throw UncheckedException.throwAsUncheckedException(e);
         } catch (IOException e) {
             throw UncheckedException.throwAsUncheckedException(e);
         }
@@ -101,6 +89,63 @@ public static void disableUrlConnectionCaching() {
     }
 
     public static <T> Class<T> define(ClassLoader targetClassLoader, String 
className, byte[] clazzBytes) {
-        return Cast.uncheckedCast(UNSAFE.defineClass(className, clazzBytes, 0, 
clazzBytes.length, targetClassLoader, null));
+        return CLASS_DEFINER.defineClass(targetClassLoader, className, 
clazzBytes);
+    }
+
+    private interface ClassDefiner {
+        <T> Class<T> defineClass(ClassLoader classLoader, String className, 
byte[] classBytes);
+    }
+
+    private static class ReflectionClassDefiner implements ClassDefiner {
+        private final JavaMethod<ClassLoader, Class> defineClassMethod;
+
+        private ReflectionClassDefiner() {
+            defineClassMethod = method(ClassLoader.class, Class.class, 
"defineClass", String.class, byte[].class, int.class, int.class);
+        }
+
+        @Override
+        public <T> Class<T> defineClass(ClassLoader classLoader, String 
className, byte[] classBytes) {
+            return Cast.uncheckedCast(defineClassMethod.invoke(classLoader, 
className, classBytes, 0, classBytes.length));
+        }
+    }
+
+    private static class LookupClassDefiner implements ClassDefiner {
+        private final Class methodHandlesLookupClass;
+        private final JavaMethod methodHandlesLookup;
+        private final JavaMethod methodHandlesPrivateLookupIn;
+        private final JavaMethod lookupFindVirtual;
+        private final MethodType defineClassMethodType;
+
+        private LookupClassDefiner() {
+            try {
+                methodHandlesLookupClass = 
Class.forName("java.lang.invoke.MethodHandles$Lookup");
+            } catch (ClassNotFoundException e) {
+                throw new RuntimeException(e);
+            }
+            methodHandlesLookup = staticMethod(MethodHandles.class, 
methodHandlesLookupClass, "lookup");
+            methodHandlesPrivateLookupIn = staticMethod(MethodHandles.class, 
methodHandlesLookupClass, "privateLookupIn", Class.class, 
methodHandlesLookupClass);
+            lookupFindVirtual = method(methodHandlesLookupClass, 
MethodHandle.class, "findVirtual", Class.class, String.class, MethodType.class);
+            defineClassMethodType = MethodType.methodType(Class.class, new 
Class[]{String.class, byte[].class, int.class, int.class});
+        }
+
+        /*
+            This method is equivalent to the following code but use reflection 
to compile on Java 7:
+
+            MethodHandles.Lookup baseLookup = MethodHandles.lookup();
+            MethodHandles.Lookup lookup = 
MethodHandles.privateLookupIn(ClassLoader.class, baseLookup);
+            MethodHandle defineClassMethodHandle = 
lookup.findVirtual(ClassLoader.class, "defineClass", defineClassMethodType);
+            handle.bindTo(classLoader).invokeWithArguments(className, 
classBytes, 0, classBytes.length));
+         */
+        @Override
+        public <T> Class<T> defineClass(ClassLoader classLoader, String 
className, byte[] classBytes) {
+            Object baseLookup = methodHandlesLookup.invoke(null);
+            Object lookup = methodHandlesPrivateLookupIn.invoke(null, 
ClassLoader.class, baseLookup);
+            MethodHandle defineClassMethodHandle = (MethodHandle) 
lookupFindVirtual.invoke(lookup, ClassLoader.class, "defineClass", 
defineClassMethodType);
+            try {
+                return 
Cast.uncheckedCast(defineClassMethodHandle.bindTo(classLoader).invokeWithArguments(className,
 classBytes, 0, classBytes.length));
+            } catch (Throwable throwable) {
+                throw new RuntimeException(throwable);
+            }
+        }
     }
 }
--- 
a/subprojects/core/src/main/java/org/gradle/process/internal/worker/child/WorkerProcessClassPathProvider.java
+++ 
b/subprojects/core/src/main/java/org/gradle/process/internal/worker/child/WorkerProcessClassPathProvider.java
@@ -18,6 +18,7 @@
 
 import org.gradle.api.Action;
 import org.gradle.api.GradleException;
+import org.gradle.api.JavaVersion;
 import org.gradle.api.internal.ClassPathProvider;
 import org.gradle.api.specs.Spec;
 import org.gradle.cache.CacheRepository;
@@ -57,7 +58,9 @@
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -116,32 +119,9 @@ public void execute(PersistentCache cache) {
             try {
                 File jarFile = jarFile(cache);
                 LOGGER.debug("Generating worker process classes to {}.", 
jarFile);
-
-                // TODO - calculate this list of classes dynamically
-                List<Class<?>> classes = Arrays.asList(
-                        GradleWorkerMain.class,
-                        BootstrapSecurityManager.class,
-                        EncodedStream.EncodedInput.class,
-                        ClassLoaderUtils.class,
-                        FilteringClassLoader.class,
-                        FilteringClassLoader.Spec.class,
-                        ClassLoaderHierarchy.class,
-                        ClassLoaderVisitor.class,
-                        ClassLoaderSpec.class,
-                        SystemClassLoaderSpec.class,
-                        JavaReflectionUtil.class,
-                        JavaMethod.class,
-                        GradleException.class,
-                        NoSuchPropertyException.class,
-                        NoSuchMethodException.class,
-                        UncheckedException.class,
-                        PropertyAccessor.class,
-                        PropertyMutator.class,
-                        Factory.class,
-                        Spec.class);
                 ZipOutputStream outputStream = new ZipOutputStream(new 
BufferedOutputStream(new FileOutputStream(jarFile)));
                 try {
-                    for (Class<?> classToMap : classes) {
+                    for (Class<?> classToMap : getClassesForWorkerJar()) {
                         remapClass(classToMap, outputStream);
                     }
                 } finally {
@@ -152,6 +132,37 @@ public void execute(PersistentCache cache) {
             }
         }
 
+        private Set<Class<?>> getClassesForWorkerJar() {
+            // TODO - calculate this list of classes dynamically
+            List<Class<?>> classes = Arrays.asList(
+                GradleWorkerMain.class,
+                BootstrapSecurityManager.class,
+                EncodedStream.EncodedInput.class,
+                ClassLoaderUtils.class,
+                FilteringClassLoader.class,
+                ClassLoaderHierarchy.class,
+                ClassLoaderVisitor.class,
+                ClassLoaderSpec.class,
+                SystemClassLoaderSpec.class,
+                JavaReflectionUtil.class,
+                JavaMethod.class,
+                GradleException.class,
+                NoSuchPropertyException.class,
+                NoSuchMethodException.class,
+                UncheckedException.class,
+                PropertyAccessor.class,
+                PropertyMutator.class,
+                Factory.class,
+                Spec.class,
+                JavaVersion.class);
+            Set<Class<?>> result = new HashSet<Class<?>>(classes);
+            for (Class<?> klass : classes) {
+                result.addAll(Arrays.asList(klass.getDeclaredClasses()));
+            }
+
+            return result;
+        }
+
         private void remapClass(Class<?> classToMap, ZipOutputStream jar) 
throws IOException {
             String internalName = Type.getInternalName(classToMap);
             String resourceName = internalName.concat(".class");
--- a/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
+++ b/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
@@ -17,25 +17,26 @@
 
 import com.google.common.annotations.VisibleForTesting;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * An enumeration of Java versions.
+ * Before 9: 
http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html
+ * 9+: http://openjdk.java.net/jeps/223
  */
 public enum JavaVersion {
-    VERSION_1_1(false), VERSION_1_2(false), VERSION_1_3(false), 
VERSION_1_4(false),
-    // starting from here versions are 1_ but their official name is "Java 6", 
"Java 7", ...
-    VERSION_1_5(true), VERSION_1_6(true), VERSION_1_7(true), 
VERSION_1_8(true), VERSION_1_9(true), VERSION_1_10(true);
+    VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4,
+    VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8,
+    VERSION_1_9, VERSION_1_10, VERSION_11, VERSION_HIGHER;
+    // Since Java 9, version should be X instead of 1.X
+    // However, to keep backward compatibility, we change from 11
+    private static final int FIRST_MAJOR_VERSION_ORDINAL = 10;
     private static JavaVersion currentJavaVersion;
-    private final boolean hasMajorVersion;
     private final String versionName;
-    private final String majorVersion;
 
-    JavaVersion(boolean hasMajorVersion) {
-        this.hasMajorVersion = hasMajorVersion;
-        this.versionName = name().substring("VERSION_".length()).replace('_', 
'.');
-        this.majorVersion = name().substring(10);
+    JavaVersion() {
+        this.versionName = ordinal() >= FIRST_MAJOR_VERSION_ORDINAL ? 
getMajorVersion() : "1." + getMajorVersion();
     }
 
     /**
@@ -54,22 +55,18 @@
         }
 
         String name = value.toString();
-        Matcher matcher = Pattern.compile("(\\d{1,2})(\\D.+)?").matcher(name);
-        if (matcher.matches()) {
-            int index = Integer.parseInt(matcher.group(1)) - 1;
-            if (index > 0 && index < values().length && 
values()[index].hasMajorVersion) {
-                return values()[index];
-            }
-        }
 
-        matcher = Pattern.compile("1\\.(\\d{1,2})(\\D.+)?").matcher(name);
-        if (matcher.matches()) {
-            int versionIdx = Integer.parseInt(matcher.group(1)) - 1;
-            if (versionIdx >= 0 && versionIdx < values().length) {
-                return values()[versionIdx];
-            }
+        int firstNonVersionCharIndex = findFirstNonVersionCharIndex(name);
+
+        String[] versionStrings = name.substring(0, 
firstNonVersionCharIndex).split("\\.");
+        List<Integer> versions = convertToNumber(name, versionStrings);
+
+        if (isLegacyVersion(versions)) {
+            assertTrue(name, versions.get(1) > 0);
+            return getVersionForMajor(versions.get(1));
+        } else {
+            return getVersionForMajor(versions.get(0));
         }
-        throw new IllegalArgumentException(String.format("Could not determine 
java version from '%s'.", name));
     }
 
     /**
@@ -90,11 +87,7 @@
     }
 
     public static JavaVersion forClassVersion(int classVersion) {
-        int index = classVersion - 45; //class file versions: 1.1 == 45, 1.2 
== 46...
-        if (index >= 0 && index < values().length) {
-            return values()[index];
-        }
-        throw new IllegalArgumentException(String.format("Could not determine 
java version from '%d'.", classVersion));
+        return getVersionForMajor(classVersion - 44); //class file versions: 
1.1 == 45, 1.2 == 46...
     }
 
     public static JavaVersion forClass(byte[] classData) {
@@ -116,18 +109,22 @@
         return this == VERSION_1_7;
     }
 
-    private boolean isJava8() {
+    public boolean isJava8() {
         return this == VERSION_1_8;
     }
 
-    private boolean isJava9() {
+    public boolean isJava9() {
         return this == VERSION_1_9;
     }
 
-    private boolean isJava10() {
+    public boolean isJava10() {
         return this == VERSION_1_10;
     }
 
+    public boolean isJava11() {
+        return this == VERSION_11;
+    }
+
     public boolean isJava5Compatible() {
         return this.compareTo(VERSION_1_5) >= 0;
     }
@@ -148,21 +145,69 @@
         return this.compareTo(VERSION_1_9) >= 0;
     }
 
-    @Incubating
     public boolean isJava10Compatible() {
         return this.compareTo(VERSION_1_10) >= 0;
     }
 
-    @Override
-    public String toString() {
-        return getName();
+    public boolean isJava11Compatible() {
+        return this.compareTo(VERSION_11) >= 0;
     }
 
-    private String getName() {
+    @Override
+    public String toString() {
         return versionName;
     }
 
     public String getMajorVersion() {
-        return majorVersion;
+        return String.valueOf(ordinal() + 1);
+    }
+
+    private static JavaVersion getVersionForMajor(int major) {
+        return major >= values().length ? JavaVersion.VERSION_HIGHER : 
values()[major - 1];
+    }
+
+    private static void assertTrue(String value, boolean condition) {
+        if (!condition) {
+            throw new IllegalArgumentException("Could not determine java 
version from '" + value + "'.");
+        }
+    }
+
+    private static boolean isLegacyVersion(List<Integer> versions) {
+        return 1 == versions.get(0) && versions.size() > 1;
+    }
+
+    private static List<Integer> convertToNumber(String value, String[] 
versionStrs) {
+        List<Integer> result = new ArrayList<Integer>();
+        for (String s : versionStrs) {
+            assertTrue(value, !isNumberStartingWithZero(s));
+            try {
+                result.add(Integer.parseInt(s));
+            } catch (NumberFormatException e) {
+                assertTrue(value, false);
+            }
+        }
+        assertTrue(value, !result.isEmpty() && result.get(0) > 0);
+        return result;
+    }
+
+    private static boolean isNumberStartingWithZero(String number) {
+        return number.length() > 1 && number.startsWith("0");
+    }
+
+    private static int findFirstNonVersionCharIndex(String s) {
+        assertTrue(s, s.length() != 0);
+
+        for (int i = 0; i < s.length(); ++i) {
+            if (!isDigitOrPeriod(s.charAt(i))) {
+                assertTrue(s, i != 0);
+                return i;
+            }
+        }
+
+        return s.length();
+    }
+
+    private static boolean isDigitOrPeriod(char c) {
+        return (c >= '0' && c <= '9') || c == '.';
     }
 }
--- 
a/subprojects/jvm-services/src/main/java/org/gradle/internal/jvm/inspection/DefaultJvmVersionDetector.java
+++ 
b/subprojects/jvm-services/src/main/java/org/gradle/internal/jvm/inspection/DefaultJvmVersionDetector.java
@@ -62,7 +62,7 @@ public class DefaultJvmVersionDetector i
         try {
             String versionStr = reader.readLine();
             while (versionStr != null) {
-                Matcher matcher = Pattern.compile("(?:java|openjdk) version 
\"(.+?)\"").matcher(versionStr);
+                Matcher matcher = Pattern.compile("(?:java|openjdk) version 
\"(.+?)\"( \\d{4}-\\d{2}-\\d{2}( LTS)?)?").matcher(versionStr);
                 if (matcher.matches()) {
                     return JavaVersion.toVersion(matcher.group(1));
                 }
++++++ java8-compatibility.patch ++++++
--- 
a/subprojects/messaging/src/main/java/org/gradle/internal/remote/internal/inet/SocketConnection.java
+++ 
b/subprojects/messaging/src/main/java/org/gradle/internal/remote/internal/inet/SocketConnection.java
@@ -32,6 +32,7 @@
 
 import java.io.*;
 import java.net.InetSocketAddress;
+import java.nio.Buffer;
 import java.nio.ByteBuffer;
 import java.nio.channels.ClosedSelectorException;
 import java.nio.channels.SelectionKey;
@@ -155,7 +156,7 @@
             selector = Selector.open();
             socket.register(selector, SelectionKey.OP_READ);
             buffer = ByteBuffer.allocateDirect(4096);
-            buffer.limit(0);
+            ((Buffer) buffer).limit(0);
         }
 
         @Override
@@ -183,19 +184,19 @@
                     return -1;
                 }
 
-                buffer.clear();
+                ((Buffer) buffer).clear();
                 int nread;
                 try {
                     nread = socket.read(buffer);
                 } catch (IOException e) {
                     if (isEndOfStream(e)) {
-                        buffer.position(0);
-                        buffer.limit(0);
+                        ((Buffer) buffer).position(0);
+                        ((Buffer) buffer).limit(0);
                         return -1;
                     }
                     throw e;
                 }
-                buffer.flip();
+                ((Buffer) buffer).flip();
 
                 if (nread < 0) {
                     return -1;
@@ -256,7 +257,7 @@
         }
 
         private void writeBufferToChannel() throws IOException {
-            buffer.flip();
+            ((Buffer) buffer).flip();
             int count = writeWithNonBlockingRetry();
             if (count == 0) {
                 // buffer was still full after non-blocking retries, now block
--- 
a/subprojects/base-services/src/main/java/org/gradle/internal/io/StreamByteBuffer.java
+++ 
b/subprojects/base-services/src/main/java/org/gradle/internal/io/StreamByteBuffer.java
@@ -191,7 +191,7 @@
                 // copy one by one until the underflow has been resolved
                 buf = ByteBuffer.allocate(buf.remaining() + 1).put(buf);
                 buf.put(nextBuf.get());
-                buf.flip();
+                ((java.nio.Buffer) buf).flip();
             } else {
                 if (hasRemaining(nextBuf)) {
                     buf = nextBuf;
@@ -234,7 +234,7 @@
                 throw UncheckedException.throwAsUncheckedException(e);
             }
         }
-        charbuffer.flip();
+        ((java.nio.Buffer) charbuffer).flip();
         return charbuffer;
     }
 
--- 
a/subprojects/base-services/src/main/java/org/gradle/internal/hash/Hashing.java
+++ 
b/subprojects/base-services/src/main/java/org/gradle/internal/hash/Hashing.java
@@ -158,7 +158,7 @@ public class Hashing {
         private void update(int length) {
             checkNotDone();
             digest.update(buffer.array(), 0, length);
-            buffer.clear();
+            ((java.nio.Buffer) buffer).clear();
         }
 
         @Override
++++++ remove-timestamps.patch ++++++
--- a/gradle/versioning.gradle
+++ b/gradle/versioning.gradle
@@ -115,13 +115,12 @@
 }
 
 task configureBuildReceipt {
-    dependsOn determineCommitId
     doLast {
         createBuildReceipt.versionNumber = rootProject.version
         createBuildReceipt.baseVersion = rootProject.baseVersion
         createBuildReceipt.snapshot = rootProject.isSnapshot
-        createBuildReceipt.buildTimestamp = rootProject.buildTimestamp
-        createBuildReceipt.commitId = determineCommitId.commitId
+        createBuildReceipt.buildTimestamp = '20121221000000+0000'
+        createBuildReceipt.commitId = 'none'
     }
 }
 

Reply via email to