Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'origin/release'
* origin/release: Replace reflection of JavaFileManager with ForwardingJavaFileManager Update to 5.5.1 nightly Prepare for Gradle 5.5.1 Add missing property to Task docs Make errorprone smoke test work with Java 8 Inject a filtering classloader for java annotation processor classpath Reproduce #9897 Recognise contribution Special case for deferred selector fix expectation Simplify test Failing test
- Loading branch information
Showing
9 changed files
with
157 additions
and
125 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -73,6 +73,9 @@ | |
<tr> | ||
<td>logging</td> | ||
</tr> | ||
<tr> | ||
<td>timeout</td> | ||
</tr> | ||
</table> | ||
</section> | ||
<section> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 38 additions & 0 deletions
38
...src/main/java/org/gradle/api/internal/tasks/compile/filter/AnnotationProcessorFilter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* | ||
* Copyright 2019 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package org.gradle.api.internal.tasks.compile.filter; | ||
|
||
import org.gradle.internal.classloader.FilteringClassLoader; | ||
|
||
public class AnnotationProcessorFilter { | ||
public static FilteringClassLoader getFilteredClassLoader(ClassLoader parent) { | ||
return new FilteringClassLoader(parent, getExtraAllowedPackages()); | ||
} | ||
|
||
/** | ||
* Many popular annotation processors like lombok need access to compiler internals | ||
* to do their magic, e.g. to inspect or even change method bodies. This is not valid | ||
* according to the annotation processing spec, but forbidding it would upset a lot of | ||
* our users. | ||
*/ | ||
private static FilteringClassLoader.Spec getExtraAllowedPackages() { | ||
FilteringClassLoader.Spec spec = new FilteringClassLoader.Spec(); | ||
spec.allowPackage("com.sun.tools.javac"); | ||
spec.allowPackage("com.sun.source"); | ||
return spec; | ||
} | ||
} |
95 changes: 95 additions & 0 deletions
95
...ain/java/org/gradle/api/internal/tasks/compile/reflect/GradleStandardJavaFileManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/* | ||
* Copyright 2019 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package org.gradle.api.internal.tasks.compile.reflect; | ||
|
||
import org.gradle.internal.classpath.ClassPath; | ||
|
||
import javax.tools.ForwardingJavaFileManager; | ||
import javax.tools.JavaFileManager; | ||
import javax.tools.JavaFileObject; | ||
import javax.tools.StandardJavaFileManager; | ||
import javax.tools.StandardLocation; | ||
import java.io.IOException; | ||
import java.net.URLClassLoader; | ||
import java.util.Set; | ||
|
||
import static org.gradle.api.internal.tasks.compile.filter.AnnotationProcessorFilter.getFilteredClassLoader; | ||
|
||
public class GradleStandardJavaFileManager extends ForwardingJavaFileManager<StandardJavaFileManager> { | ||
private final ClassPath annotationProcessorPath; | ||
private final boolean hasEmptySourcePaths; | ||
|
||
private GradleStandardJavaFileManager(StandardJavaFileManager fileManager, ClassPath annotationProcessorPath, boolean hasEmptySourcePaths) { | ||
super(fileManager); | ||
this.annotationProcessorPath = annotationProcessorPath; | ||
this.hasEmptySourcePaths = hasEmptySourcePaths; | ||
} | ||
|
||
/** | ||
* Overrides particular methods to prevent javac from accessing source files outside of Gradle's understanding or | ||
* classloaders outside of Gradle's control. | ||
*/ | ||
public static JavaFileManager wrap(StandardJavaFileManager delegate, ClassPath annotationProcessorPath, boolean hasEmptySourcePaths) { | ||
return new GradleStandardJavaFileManager(delegate, annotationProcessorPath, hasEmptySourcePaths); | ||
} | ||
|
||
@Override | ||
public boolean hasLocation(Location location) { | ||
if (hasEmptySourcePaths) { | ||
// There is currently a requirement in the JDK9 javac implementation | ||
// that when javac is invoked with an explicitly empty sourcepath | ||
// (i.e. {@code --sourcepath ""}), it won't allow you to compile a java 9 | ||
// module. However, we really want to explicitly set an empty sourcepath | ||
// so that we don't implicitly pull in unrequested sourcefiles which | ||
// haven't been snapshotted because we will consider the task up-to-date | ||
// if the implicit files change. | ||
// | ||
// This implementation of hasLocation() pretends that the JavaFileManager | ||
// has no concept of a source path. | ||
if (location.equals(StandardLocation.SOURCE_PATH)) { | ||
return false; | ||
} | ||
} | ||
return super.hasLocation(location); | ||
} | ||
|
||
@Override | ||
public Iterable<JavaFileObject> list(Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) throws IOException { | ||
if (hasEmptySourcePaths) { | ||
// If we are pretending that we don't have a sourcepath, the compiler will | ||
// look on the classpath for sources. Since we don't want to bring in any | ||
// sources implicitly from the classpath, we have to ignore source files | ||
// found on the classpath. | ||
if (location.equals(StandardLocation.CLASS_PATH)) { | ||
kinds.remove(JavaFileObject.Kind.SOURCE); | ||
} | ||
} | ||
return super.list(location, packageName, kinds, recurse); | ||
} | ||
|
||
@Override | ||
public ClassLoader getClassLoader(Location location) { | ||
ClassLoader classLoader = super.getClassLoader(location); | ||
if (location.equals(StandardLocation.ANNOTATION_PROCESSOR_PATH)) { | ||
if (classLoader instanceof URLClassLoader) { | ||
return new URLClassLoader(annotationProcessorPath.getAsURLArray(), getFilteredClassLoader(classLoader.getParent())); | ||
} | ||
} | ||
|
||
return classLoader; | ||
} | ||
} |
66 changes: 0 additions & 66 deletions
66
...va/org/gradle/api/internal/tasks/compile/reflect/SourcepathIgnoringInvocationHandler.java
This file was deleted.
Oops, something went wrong.
32 changes: 0 additions & 32 deletions
32
.../src/main/java/org/gradle/api/internal/tasks/compile/reflect/SourcepathIgnoringProxy.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters