Skip to content

Commit a6f18c5

Browse files
authored
Move inner records out of TransportVersionUtils (#132872) (#132883)
The utilities class has basically become a package itself. This commit moves inner records from TransportversionUtils and some related functions out to their own files.
1 parent bfbbd54 commit a6f18c5

10 files changed

+152
-118
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/CollectTransportVersionReferencesTask.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public abstract class CollectTransportVersionReferencesTask extends DefaultTask
6161

6262
@TaskAction
6363
public void checkTransportVersion() throws IOException {
64-
var results = new HashSet<TransportVersionUtils.TransportVersionReference>();
64+
var results = new HashSet<TransportVersionReference>();
6565

6666
for (var cpElement : getClassPath()) {
6767
Path file = cpElement.toPath();
@@ -74,8 +74,7 @@ public void checkTransportVersion() throws IOException {
7474
Files.writeString(outputFile, String.join("\n", results.stream().map(Object::toString).sorted().toList()));
7575
}
7676

77-
private void addNamesFromClassesDirectory(Set<TransportVersionUtils.TransportVersionReference> results, Path basePath)
78-
throws IOException {
77+
private void addNamesFromClassesDirectory(Set<TransportVersionReference> results, Path basePath) throws IOException {
7978
Files.walkFileTree(basePath, new SimpleFileVisitor<>() {
8079
@Override
8180
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
@@ -90,8 +89,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
9089
});
9190
}
9291

93-
private void addNamesFromClass(Set<TransportVersionUtils.TransportVersionReference> results, InputStream classBytes, String classname)
94-
throws IOException {
92+
private void addNamesFromClass(Set<TransportVersionReference> results, InputStream classBytes, String classname) throws IOException {
9593
ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM9) {
9694
@Override
9795
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
@@ -111,7 +109,7 @@ public void visitMethodInsn(int opcode, String owner, String name, String descri
111109
if (abstractInstruction instanceof LdcInsnNode ldcInsnNode
112110
&& ldcInsnNode.cst instanceof String tvName
113111
&& tvName.isEmpty() == false) {
114-
results.add(new TransportVersionUtils.TransportVersionReference(tvName, location));
112+
results.add(new TransportVersionReference(tvName, location));
115113
} else {
116114
// The instruction is not a LDC with a String constant (or an empty String), which is not allowed.
117115
throw new RuntimeException(

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GlobalTransportVersionManagementPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void apply(Project project) {
3333
Configuration tvReferencesConfig = project.getConfigurations().create("globalTvReferences");
3434
tvReferencesConfig.setCanBeConsumed(false);
3535
tvReferencesConfig.setCanBeResolved(true);
36-
tvReferencesConfig.attributes(TransportVersionUtils::addTransportVersionReferencesAttribute);
36+
tvReferencesConfig.attributes(TransportVersionReference::addArtifactAttribute);
3737

3838
// iterate through all projects, and if the management plugin is applied, add that project back as a dep to check
3939
for (Project subProject : project.getRootProject().getSubprojects()) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
record TransportVersionDefinition(String name, List<TransportVersionId> ids) {
16+
public static TransportVersionDefinition fromString(String filename, String contents) {
17+
assert filename.endsWith(".csv");
18+
String name = filename.substring(0, filename.length() - 4);
19+
List<TransportVersionId> ids = new ArrayList<>();
20+
21+
if (contents.isEmpty() == false) {
22+
for (String rawId : contents.split(",")) {
23+
try {
24+
ids.add(TransportVersionId.fromString(rawId));
25+
} catch (NumberFormatException e) {
26+
throw new IllegalStateException("Failed to parse id " + rawId + " in " + filename, e);
27+
}
28+
}
29+
}
30+
31+
return new TransportVersionDefinition(name, ids);
32+
}
33+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
record TransportVersionId(int complete, int major, int server, int subsidiary, int patch) implements Comparable<TransportVersionId> {
13+
14+
static TransportVersionId fromString(String s) {
15+
int complete = Integer.parseInt(s);
16+
int patch = complete % 100;
17+
int subsidiary = (complete / 100) % 10;
18+
int server = (complete / 1000) % 1000;
19+
int major = complete / 1000000;
20+
return new TransportVersionId(complete, major, server, subsidiary, patch);
21+
}
22+
23+
@Override
24+
public int compareTo(TransportVersionId o) {
25+
return Integer.compare(complete, o.complete);
26+
}
27+
28+
@Override
29+
public String toString() {
30+
return Integer.toString(complete);
31+
}
32+
33+
public int base() {
34+
return (complete / 1000) * 1000;
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
record TransportVersionLatest(String branch, String name, TransportVersionId id) {
13+
public static TransportVersionLatest fromString(String filename, String contents) {
14+
assert filename.endsWith(".csv");
15+
String branch = filename.substring(0, filename.length() - 4);
16+
17+
String[] parts = contents.split(",");
18+
if (parts.length != 2) {
19+
throw new IllegalStateException("Invalid transport version latest file [" + filename + "]: " + contents);
20+
}
21+
22+
return new TransportVersionLatest(branch, parts[0], TransportVersionId.fromString(parts[1]));
23+
}
24+
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionManagementPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void apply(Project project) {
3838
Configuration tvReferencesConfig = project.getConfigurations().create("transportVersionReferences", c -> {
3939
c.setCanBeConsumed(true);
4040
c.setCanBeResolved(false);
41-
c.attributes(TransportVersionUtils::addTransportVersionReferencesAttribute);
41+
c.attributes(TransportVersionReference::addArtifactAttribute);
4242
});
4343
project.getArtifacts().add(tvReferencesConfig.getName(), collectTask);
4444

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
import org.gradle.api.attributes.Attribute;
13+
import org.gradle.api.attributes.AttributeContainer;
14+
15+
import java.io.IOException;
16+
import java.nio.charset.StandardCharsets;
17+
import java.nio.file.Files;
18+
import java.nio.file.Path;
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
22+
import static org.gradle.api.artifacts.type.ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE;
23+
24+
record TransportVersionReference(String name, String location) {
25+
26+
private static final Attribute<Boolean> REFERENCES_ATTRIBUTE = Attribute.of("transport-version-references", Boolean.class);
27+
28+
static List<TransportVersionReference> listFromFile(Path file) throws IOException {
29+
assert file.endsWith(".csv");
30+
List<TransportVersionReference> results = new ArrayList<>();
31+
for (String line : Files.readAllLines(file, StandardCharsets.UTF_8)) {
32+
String[] parts = line.split(",", 2);
33+
if (parts.length != 2) {
34+
throw new IOException("Invalid transport version data file [" + file + "]: " + line);
35+
}
36+
results.add(new TransportVersionReference(parts[0], parts[1]));
37+
}
38+
return results;
39+
}
40+
41+
static void addArtifactAttribute(AttributeContainer attributes) {
42+
attributes.attribute(ARTIFACT_TYPE_ATTRIBUTE, "csv");
43+
attributes.attribute(REFERENCES_ATTRIBUTE, true);
44+
}
45+
46+
@Override
47+
public String toString() {
48+
return name + "," + location;
49+
}
50+
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionUtils.java

Lines changed: 0 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -10,90 +10,15 @@
1010
package org.elasticsearch.gradle.internal.transport;
1111

1212
import org.gradle.api.Project;
13-
import org.gradle.api.attributes.Attribute;
14-
import org.gradle.api.attributes.AttributeContainer;
1513
import org.gradle.api.file.Directory;
1614

1715
import java.io.IOException;
1816
import java.nio.charset.StandardCharsets;
1917
import java.nio.file.Files;
2018
import java.nio.file.Path;
21-
import java.util.ArrayList;
22-
import java.util.List;
23-
24-
import static org.gradle.api.artifacts.type.ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE;
2519

2620
class TransportVersionUtils {
2721

28-
static final Attribute<Boolean> TRANSPORT_VERSION_REFERENCES_ATTRIBUTE = Attribute.of("transport-version-references", Boolean.class);
29-
30-
record TransportVersionReference(String name, String location) {
31-
@Override
32-
public String toString() {
33-
return name + "," + location;
34-
}
35-
}
36-
37-
record TransportVersionDefinition(String name, List<TransportVersionId> ids) {
38-
public static TransportVersionDefinition fromString(String filename, String contents) {
39-
assert filename.endsWith(".csv");
40-
String name = filename.substring(0, filename.length() - 4);
41-
List<TransportVersionId> ids = new ArrayList<>();
42-
43-
if (contents.isEmpty() == false) {
44-
for (String rawId : contents.split(",")) {
45-
try {
46-
ids.add(parseId(rawId));
47-
} catch (NumberFormatException e) {
48-
throw new IllegalStateException("Failed to parse id " + rawId + " in " + filename, e);
49-
}
50-
}
51-
}
52-
53-
return new TransportVersionDefinition(name, ids);
54-
}
55-
}
56-
57-
record TransportVersionLatest(String branch, String name, TransportVersionId id) {
58-
public static TransportVersionLatest fromString(String filename, String contents) {
59-
assert filename.endsWith(".csv");
60-
String branch = filename.substring(0, filename.length() - 4);
61-
62-
String[] parts = contents.split(",");
63-
if (parts.length != 2) {
64-
throw new IllegalStateException("Invalid transport version latest file [" + filename + "]: " + contents);
65-
}
66-
67-
return new TransportVersionLatest(branch, parts[0], parseId(parts[1]));
68-
}
69-
}
70-
71-
record TransportVersionId(int complete, int major, int server, int subsidiary, int patch) implements Comparable<TransportVersionId> {
72-
73-
static TransportVersionId fromString(String s) {
74-
int complete = Integer.parseInt(s);
75-
int patch = complete % 100;
76-
int subsidiary = (complete / 100) % 10;
77-
int server = (complete / 1000) % 1000;
78-
int major = complete / 1000000;
79-
return new TransportVersionId(complete, major, server, subsidiary, patch);
80-
}
81-
82-
@Override
83-
public int compareTo(TransportVersionId o) {
84-
return Integer.compare(complete, o.complete);
85-
}
86-
87-
@Override
88-
public String toString() {
89-
return Integer.toString(complete);
90-
}
91-
92-
public int base() {
93-
return (complete / 1000) * 1000;
94-
}
95-
}
96-
9722
static Path definitionFilePath(Directory resourcesDirectory, String name) {
9823
return getDefinitionsDirectory(resourcesDirectory).getAsFile().toPath().resolve(name + ".csv");
9924
}
@@ -112,28 +37,6 @@ static TransportVersionLatest readLatestFile(Path file) throws IOException {
11237
return TransportVersionLatest.fromString(file.getFileName().toString(), contents);
11338
}
11439

115-
static List<TransportVersionReference> readReferencesFile(Path file) throws IOException {
116-
assert file.endsWith(".txt");
117-
List<TransportVersionReference> results = new ArrayList<>();
118-
for (String line : Files.readAllLines(file, StandardCharsets.UTF_8)) {
119-
String[] parts = line.split(",", 2);
120-
if (parts.length != 2) {
121-
throw new IOException("Invalid transport version data file [" + file + "]: " + line);
122-
}
123-
results.add(new TransportVersionReference(parts[0], parts[1]));
124-
}
125-
return results;
126-
}
127-
128-
private static TransportVersionId parseId(String rawId) {
129-
int complete = Integer.parseInt(rawId);
130-
int patch = complete % 100;
131-
int subsidiary = (complete / 100) % 10;
132-
int server = (complete / 1000) % 1000;
133-
int major = complete / 1000000;
134-
return new TransportVersionId(complete, major, server, subsidiary, patch);
135-
}
136-
13740
static Directory getDefinitionsDirectory(Directory resourcesDirectory) {
13841
return resourcesDirectory.dir("defined");
13942
}
@@ -150,10 +53,4 @@ static Directory getResourcesDirectory(Project project) {
15053
Directory projectDir = project.project(projectName.toString()).getLayout().getProjectDirectory();
15154
return projectDir.dir("src/main/resources/transport");
15255
}
153-
154-
static void addTransportVersionReferencesAttribute(AttributeContainer attributes) {
155-
attributes.attribute(ARTIFACT_TYPE_ATTRIBUTE, "txt");
156-
attributes.attribute(TransportVersionUtils.TRANSPORT_VERSION_REFERENCES_ATTRIBUTE, true);
157-
}
158-
15956
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionDefinitionsTask.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@
1111

1212
import com.google.common.collect.Comparators;
1313

14-
import org.elasticsearch.gradle.internal.transport.TransportVersionUtils.TransportVersionDefinition;
15-
import org.elasticsearch.gradle.internal.transport.TransportVersionUtils.TransportVersionId;
16-
import org.elasticsearch.gradle.internal.transport.TransportVersionUtils.TransportVersionLatest;
17-
import org.elasticsearch.gradle.internal.transport.TransportVersionUtils.TransportVersionReference;
1814
import org.gradle.api.DefaultTask;
1915
import org.gradle.api.file.ConfigurableFileCollection;
2016
import org.gradle.api.file.DirectoryProperty;
@@ -47,11 +43,11 @@
4743

4844
import javax.inject.Inject;
4945

46+
import static org.elasticsearch.gradle.internal.transport.TransportVersionReference.listFromFile;
5047
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.definitionFilePath;
5148
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.latestFilePath;
5249
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.readDefinitionFile;
5350
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.readLatestFile;
54-
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.readReferencesFile;
5551

5652
/**
5753
* Validates that each defined transport version constant is referenced by at least one project.
@@ -105,7 +101,7 @@ public void validateTransportVersions() throws IOException {
105101

106102
// then collect all names referenced in the codebase
107103
for (var referencesFile : getReferencesFiles()) {
108-
readReferencesFile(referencesFile.toPath()).stream().map(TransportVersionReference::name).forEach(allNames::add);
104+
listFromFile(referencesFile.toPath()).stream().map(TransportVersionReference::name).forEach(allNames::add);
109105
}
110106

111107
// now load all definitions, do some validation and record them by various keys for later quick lookup

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void validateTransportVersions() throws IOException {
5151
}
5252
Path namesFile = getReferencesFile().get().getAsFile().toPath();
5353

54-
for (var tvReference : TransportVersionUtils.readReferencesFile(namesFile)) {
54+
for (var tvReference : TransportVersionReference.listFromFile(namesFile)) {
5555
if (referenceChecker.test(tvReference.name()) == false) {
5656
throw new RuntimeException(
5757
"TransportVersion.fromName(\""

0 commit comments

Comments
 (0)