Skip to content

Commit 20d4d51

Browse files
rougsigejona86
authored andcommitted
Easy part of CompileStatic migration
If groovy compiles without CompileStatic - code will be compiled in dynamic way, e.g. All type checks will be in runtime. Erased types in bytecode. With CompileStatic - compiler will save all typed in bytecode. If all types saved, we can do static analysis of bytecode with java 8 capability. More details can be found here: #565 (comment)
1 parent e7f9ab4 commit 20d4d51

File tree

7 files changed

+38
-25
lines changed

7 files changed

+38
-25
lines changed

src/main/groovy/com/google/protobuf/gradle/ArchiveActionFacade.java

+4
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,21 @@
2828
*/
2929
package com.google.protobuf.gradle;
3030

31+
import groovy.transform.CompileStatic;
3132
import org.gradle.api.Project;
3233
import org.gradle.api.file.FileTree;
3334
import org.gradle.api.internal.file.FileOperations;
3435

3536
import javax.inject.Inject;
3637

38+
@CompileStatic
3739
public interface ArchiveActionFacade {
3840

3941
FileTree zipTree(Object path);
4042

4143
FileTree tarTree(Object path);
4244

45+
@CompileStatic
4346
class ProjectBased implements ArchiveActionFacade {
4447

4548
private final Project project;
@@ -59,6 +62,7 @@ public FileTree tarTree(Object path) {
5962
}
6063
}
6164

65+
@CompileStatic
6266
abstract class ServiceBased implements ArchiveActionFacade {
6367

6468
// TODO Use public ArchiveOperations from Gradle 6.6 instead

src/main/groovy/com/google/protobuf/gradle/CopyActionFacade.java

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
*/
3030
package com.google.protobuf.gradle;
3131

32+
import groovy.transform.CompileStatic;
3233
import org.gradle.api.Action;
3334
import org.gradle.api.Project;
3435
import org.gradle.api.file.CopySpec;
@@ -42,9 +43,11 @@
4243
* {@link org.gradle.api.file.FileSystemOperations} if available (Gradle 6.0+) or {@link org.gradle.api.Project#copy} if
4344
* the version of Gradle is below 6.0.
4445
*/
46+
@CompileStatic
4547
interface CopyActionFacade {
4648
WorkResult copy(Action<? super CopySpec> var1);
4749

50+
@CompileStatic
4851
class ProjectBased implements CopyActionFacade {
4952
private final Project project;
5053

@@ -58,6 +61,7 @@ public WorkResult copy(Action<? super CopySpec> action) {
5861
}
5962
}
6063

64+
@CompileStatic
6165
abstract class FileSystemOperationsBased implements CopyActionFacade {
6266
@Inject
6367
public abstract FileSystemOperations getFileSystemOperations();

src/main/groovy/com/google/protobuf/gradle/ExecutableLocator.groovy

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
*/
2929
package com.google.protobuf.gradle
3030

31-
import groovy.transform.CompileDynamic
31+
import groovy.transform.CompileStatic
3232
import org.gradle.api.Named
3333

3434
/**
@@ -37,7 +37,7 @@ import org.gradle.api.Named
3737
* configured, the plugin should try to run the executable from system search
3838
* path.
3939
*/
40-
@CompileDynamic
40+
@CompileStatic
4141
class ExecutableLocator implements Named {
4242

4343
private final String name

src/main/groovy/com/google/protobuf/gradle/ProtobufConvention.groovy

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@
2929
*/
3030
package com.google.protobuf.gradle
3131

32-
import groovy.transform.CompileDynamic
32+
import groovy.transform.CompileStatic
3333
import org.gradle.api.Project
3434
import org.gradle.api.internal.file.FileResolver
3535
import org.gradle.util.ConfigureUtil
3636

3737
/**
3838
* Adds the protobuf {} block as a property of the project.
3939
*/
40-
@CompileDynamic
40+
@CompileStatic
4141
class ProtobufConvention {
4242
ProtobufConvention(Project project, FileResolver fileResolver) {
4343
protobuf = new ProtobufConfigurator(project, fileResolver)

src/main/groovy/com/google/protobuf/gradle/ProtobufExtract.groovy

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
package com.google.protobuf.gradle
3131

3232
import com.google.common.base.Preconditions
33-
import groovy.transform.CompileDynamic
33+
import groovy.transform.CompileStatic
3434
import org.gradle.api.DefaultTask
3535
import org.gradle.api.file.ConfigurableFileCollection
3636
import org.gradle.api.file.DuplicatesStrategy
@@ -54,7 +54,7 @@ import javax.inject.Inject
5454
/**
5555
* Extracts proto files from a dependency configuration.
5656
*/
57-
@CompileDynamic
57+
@CompileStatic
5858
abstract class ProtobufExtract extends DefaultTask {
5959

6060
/**
@@ -171,7 +171,7 @@ abstract class ProtobufExtract extends DefaultTask {
171171
} else if (file.path.endsWith('.jar') || file.path.endsWith('.zip')) {
172172
protoInputs.add(archiveFacade.zipTree(file.path).matching(protoFilter))
173173
} else if (file.path.endsWith('.aar')) {
174-
FileCollection zipTree = archiveFacade.zipTree(file.path).filter { it.path.endsWith('.jar') }
174+
FileCollection zipTree = archiveFacade.zipTree(file.path).filter { File it -> it.path.endsWith('.jar') }
175175
zipTree.each { entry ->
176176
protoInputs.add(archiveFacade.zipTree(entry).matching(protoFilter))
177177
}

src/main/groovy/com/google/protobuf/gradle/ToolsLocator.groovy

+21-16
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
*/
2929
package com.google.protobuf.gradle
3030

31-
import groovy.transform.CompileDynamic
31+
import com.google.gradle.osdetector.OsDetector
32+
import groovy.transform.CompileStatic
3233
import org.gradle.api.NamedDomainObjectContainer
3334
import org.gradle.api.Project
3435
import org.gradle.api.artifacts.Configuration
@@ -38,12 +39,12 @@ import org.gradle.api.file.FileCollection
3839
/**
3940
* Holds locations of all external executables, i.e., protoc and plugins.
4041
*/
41-
@CompileDynamic
42+
@CompileStatic
4243
class ToolsLocator {
4344

4445
private final Project project
45-
private final ExecutableLocator protoc
46-
private final NamedDomainObjectContainer<ExecutableLocator> plugins
46+
final ExecutableLocator protoc
47+
final NamedDomainObjectContainer<ExecutableLocator> plugins
4748

4849
static List<String> artifactParts(String artifactCoordinate) {
4950
String artifact
@@ -53,11 +54,14 @@ class ToolsLocator {
5354
String version
5455
String classifier
5556

56-
(artifact, extension) = artifactCoordinate.tokenize('@')
57+
List<String> artifactCoordinateTokenized = artifactCoordinate.tokenize('@')
58+
(artifact, extension) = [artifactCoordinateTokenized[0], artifactCoordinateTokenized[1]]
5759
if (extension == null && artifactCoordinate.endsWith('@')) {
5860
extension = ''
5961
}
60-
(group, name, version, classifier) = artifact.tokenize(':')
62+
List<String> artifactTokenized = artifact.tokenize(':')
63+
(group, name, version, classifier) =
64+
[artifactTokenized[0], artifactTokenized[1], artifactTokenized[2], artifactTokenized[3]]
6165

6266
return [group, name, version, classifier, extension]
6367
}
@@ -92,19 +96,20 @@ class ToolsLocator {
9296

9397
void registerDependencyWithTasks(ExecutableLocator locator, Collection<GenerateProtoTask> protoTasks) {
9498
// create a project configuration dependency for the artifact
95-
Configuration config = project.configurations.create("protobufToolsLocator_${locator.name}") {
96-
visible = false
97-
transitive = false
98-
extendsFrom = []
99+
Configuration config = project.configurations.create("protobufToolsLocator_${locator.name}") { Configuration conf ->
100+
conf.visible = false
101+
conf.transitive = false
99102
}
100103
String groupId, artifact, version, classifier, extension
101-
(groupId, artifact, version, classifier, extension) = artifactParts(locator.artifact)
104+
OsDetector osdetector = project.extensions.getByName("osdetector") as OsDetector
105+
List<String> parts = artifactParts(locator.artifact)
106+
(groupId, artifact, version, classifier, extension) = [parts[0], parts[1], parts[2], parts[3], parts[4]]
102107
Map<String, String> notation = [
103-
group:groupId,
104-
name:artifact,
105-
version:version,
106-
classifier:classifier ?: project.osdetector.classifier,
107-
ext:extension ?: 'exe',
108+
group:groupId,
109+
name:artifact,
110+
version:version,
111+
classifier:classifier ?: osdetector.classifier,
112+
ext:extension ?: 'exe',
108113
]
109114
Dependency dep = project.dependencies.add(config.name, notation)
110115
FileCollection artifactFiles = config.fileCollection(dep)

src/main/groovy/com/google/protobuf/gradle/Utils.groovy

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
package com.google.protobuf.gradle
3030

3131
import com.google.common.base.Preconditions
32-
import groovy.transform.CompileDynamic
32+
import groovy.transform.CompileStatic
3333
import org.apache.commons.lang.StringUtils
3434
import org.gradle.api.GradleException
3535
import org.gradle.api.Project
@@ -43,7 +43,7 @@ import java.util.regex.Matcher
4343
/**
4444
* Utility classes.
4545
*/
46-
@CompileDynamic
46+
@CompileStatic
4747
class Utils {
4848
/**
4949
* Returns the conventional name of a configuration for a sourceSet

0 commit comments

Comments
 (0)