Skip to content

Commit a307e81

Browse files
authored
Ensure there's only one newline added with new version declarations (#104519) (#104689)
Backport #104519 to 7.17
1 parent 06bb0bd commit a307e81

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/UpdateVersionsTask.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
package org.elasticsearch.gradle.internal.release;
1010

11+
import com.github.javaparser.GeneratedJavaParserConstants;
1112
import com.github.javaparser.StaticJavaParser;
1213
import com.github.javaparser.ast.CompilationUnit;
1314
import com.github.javaparser.ast.NodeList;
@@ -16,6 +17,9 @@
1617
import com.github.javaparser.ast.body.VariableDeclarator;
1718
import com.github.javaparser.ast.expr.FieldAccessExpr;
1819
import com.github.javaparser.ast.expr.NameExpr;
20+
import com.github.javaparser.ast.observer.ObservableProperty;
21+
import com.github.javaparser.printer.ConcreteSyntaxModel;
22+
import com.github.javaparser.printer.concretesyntaxmodel.CsmElement;
1923
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;
2024
import com.google.common.annotations.VisibleForTesting;
2125

@@ -28,6 +32,7 @@
2832
import org.gradle.initialization.layout.BuildLayout;
2933

3034
import java.io.IOException;
35+
import java.lang.reflect.Field;
3136
import java.nio.file.Files;
3237
import java.nio.file.Path;
3338
import java.nio.file.StandardOpenOption;
@@ -43,7 +48,84 @@
4348
import javax.annotation.Nullable;
4449
import javax.inject.Inject;
4550

51+
import static com.github.javaparser.ast.observer.ObservableProperty.TYPE_PARAMETERS;
52+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmConditional.Condition.FLAG;
53+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.block;
54+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.child;
55+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.comma;
56+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.comment;
57+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.conditional;
58+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.list;
59+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.newline;
60+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.none;
61+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.sequence;
62+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.space;
63+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.string;
64+
import static com.github.javaparser.printer.concretesyntaxmodel.CsmElement.token;
65+
4666
public class UpdateVersionsTask extends DefaultTask {
67+
68+
static {
69+
replaceDefaultJavaParserClassCsm();
70+
}
71+
72+
/*
73+
* The default JavaParser CSM which it uses to format any new declarations added to a class
74+
* inserts two newlines after each declaration. Our version classes only have one newline.
75+
* In order to get javaparser lexical printer to use our format, we have to completely replace
76+
* the statically declared CSM pattern using hacky reflection
77+
* to access the static map where these are stored, and insert a replacement that is identical
78+
* apart from only one newline at the end of each member declaration, rather than two.
79+
*/
80+
private static void replaceDefaultJavaParserClassCsm() {
81+
try {
82+
Field classCsms = ConcreteSyntaxModel.class.getDeclaredField("concreteSyntaxModelByClass");
83+
classCsms.setAccessible(true);
84+
@SuppressWarnings({ "unchecked", "rawtypes" })
85+
Map<Class, CsmElement> csms = (Map) classCsms.get(null);
86+
87+
// copied from the static initializer in ConcreteSyntaxModel
88+
csms.put(
89+
ClassOrInterfaceDeclaration.class,
90+
sequence(
91+
comment(),
92+
list(ObservableProperty.ANNOTATIONS, newline(), none(), newline()),
93+
list(ObservableProperty.MODIFIERS, space(), none(), space()),
94+
conditional(
95+
ObservableProperty.INTERFACE,
96+
FLAG,
97+
token(GeneratedJavaParserConstants.INTERFACE),
98+
token(GeneratedJavaParserConstants.CLASS)
99+
),
100+
space(),
101+
child(ObservableProperty.NAME),
102+
list(
103+
TYPE_PARAMETERS,
104+
sequence(comma(), space()),
105+
string(GeneratedJavaParserConstants.LT),
106+
string(GeneratedJavaParserConstants.GT)
107+
),
108+
list(
109+
ObservableProperty.EXTENDED_TYPES,
110+
sequence(string(GeneratedJavaParserConstants.COMMA), space()),
111+
sequence(space(), token(GeneratedJavaParserConstants.EXTENDS), space()),
112+
none()
113+
),
114+
list(
115+
ObservableProperty.IMPLEMENTED_TYPES,
116+
sequence(string(GeneratedJavaParserConstants.COMMA), space()),
117+
sequence(space(), token(GeneratedJavaParserConstants.IMPLEMENTS), space()),
118+
none()
119+
),
120+
space(),
121+
block(sequence(newline(), list(ObservableProperty.MEMBERS, sequence(newline()/*, newline()*/), newline(), newline())))
122+
)
123+
);
124+
} catch (ReflectiveOperationException e) {
125+
throw new AssertionError(e);
126+
}
127+
}
128+
47129
private static final Logger LOGGER = Logging.getLogger(UpdateVersionsTask.class);
48130

49131
static final String SERVER_MODULE_PATH = "server/src/main/java/";

server/src/main/java/org/elasticsearch/Version.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,6 @@ public class Version implements Comparable<Version>, ToXContentFragment {
177177
public static final Version V_7_17_16 = new Version(7_17_16_99, org.apache.lucene.util.Version.LUCENE_8_11_1);
178178
public static final Version V_7_17_17 = new Version(7_17_17_99, org.apache.lucene.util.Version.LUCENE_8_11_1);
179179
public static final Version V_7_17_18 = new Version(7_17_18_99, org.apache.lucene.util.Version.LUCENE_8_11_1);
180-
181180
public static final Version CURRENT = V_7_17_18;
182181

183182
private static final ImmutableOpenIntMap<Version> idToVersion;

0 commit comments

Comments
 (0)