Skip to content

Commit 7486dc4

Browse files
Merge remote-tracking branch 'origin/main' into lucene_snapshot
2 parents f4f8414 + 666774a commit 7486dc4

File tree

413 files changed

+5314
-8940
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

413 files changed

+5314
-8940
lines changed

build-tools-internal/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ gradlePlugin {
139139
id = 'elasticsearch.java-module'
140140
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavaModulePathPlugin'
141141
}
142+
mrjar {
143+
id = 'elasticsearch.mrjar'
144+
implementationClass = 'org.elasticsearch.gradle.internal.MrjarPlugin'
145+
}
142146
releaseTools {
143147
id = 'elasticsearch.release-tools'
144148
implementationClass = 'org.elasticsearch.gradle.internal.release.ReleaseToolsPlugin'
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
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 and the Server Side Public License, v 1; you may not use this file except
5+
* in compliance with, at your election, the Elastic License 2.0 or the Server
6+
* Side Public License, v 1.
7+
*/
8+
9+
package org.elasticsearch.gradle.internal;
10+
11+
import org.elasticsearch.gradle.util.GradleUtils;
12+
import org.gradle.api.Plugin;
13+
import org.gradle.api.Project;
14+
import org.gradle.api.plugins.JavaLibraryPlugin;
15+
import org.gradle.api.plugins.JavaPlugin;
16+
import org.gradle.api.plugins.JavaPluginExtension;
17+
import org.gradle.api.tasks.SourceSet;
18+
import org.gradle.api.tasks.compile.CompileOptions;
19+
import org.gradle.api.tasks.compile.JavaCompile;
20+
import org.gradle.jvm.tasks.Jar;
21+
import org.gradle.jvm.toolchain.JavaLanguageVersion;
22+
import org.gradle.jvm.toolchain.JavaToolchainService;
23+
import org.objectweb.asm.ClassReader;
24+
import org.objectweb.asm.ClassWriter;
25+
import org.objectweb.asm.tree.ClassNode;
26+
27+
import java.io.IOException;
28+
import java.io.UncheckedIOException;
29+
import java.nio.file.Files;
30+
import java.nio.file.Path;
31+
import java.util.Map;
32+
import java.util.regex.Matcher;
33+
import java.util.regex.Pattern;
34+
import java.util.stream.Stream;
35+
36+
import javax.inject.Inject;
37+
38+
import static org.objectweb.asm.Opcodes.V_PREVIEW;
39+
40+
public class MrjarPlugin implements Plugin<Project> {
41+
42+
private static final Pattern MRJAR_SOURCESET_PATTERN = Pattern.compile("main(\\d{2})");
43+
44+
private final JavaToolchainService javaToolchains;
45+
46+
@Inject
47+
MrjarPlugin(JavaToolchainService javaToolchains) {
48+
this.javaToolchains = javaToolchains;
49+
}
50+
51+
@Override
52+
public void apply(Project project) {
53+
project.getPluginManager().apply(JavaLibraryPlugin.class);
54+
var javaExtension = project.getExtensions().getByType(JavaPluginExtension.class);
55+
56+
var srcDir = project.getProjectDir().toPath().resolve("src");
57+
try (var subdirStream = Files.list(srcDir)) {
58+
for (Path sourceset : subdirStream.toList()) {
59+
assert Files.isDirectory(sourceset);
60+
String sourcesetName = sourceset.getFileName().toString();
61+
Matcher sourcesetMatcher = MRJAR_SOURCESET_PATTERN.matcher(sourcesetName);
62+
if (sourcesetMatcher.matches()) {
63+
int javaVersion = Integer.parseInt(sourcesetMatcher.group(1));
64+
addMrjarSourceset(project, javaExtension, sourcesetName, javaVersion);
65+
}
66+
}
67+
} catch (IOException e) {
68+
throw new UncheckedIOException(e);
69+
}
70+
}
71+
72+
private void addMrjarSourceset(Project project, JavaPluginExtension javaExtension, String sourcesetName, int javaVersion) {
73+
SourceSet sourceSet = javaExtension.getSourceSets().maybeCreate(sourcesetName);
74+
GradleUtils.extendSourceSet(project, SourceSet.MAIN_SOURCE_SET_NAME, sourcesetName);
75+
76+
project.getTasks().withType(Jar.class).named(JavaPlugin.JAR_TASK_NAME).configure(jarTask -> {
77+
jarTask.into("META-INF/versions/" + javaVersion, copySpec -> copySpec.from(sourceSet.getOutput()));
78+
jarTask.manifest(manifest -> { manifest.attributes(Map.of("Multi-Release", "true")); });
79+
});
80+
81+
project.getTasks().withType(JavaCompile.class).named(sourceSet.getCompileJavaTaskName()).configure(compileTask -> {
82+
compileTask.getJavaCompiler()
83+
.set(javaToolchains.compilerFor(spec -> { spec.getLanguageVersion().set(JavaLanguageVersion.of(javaVersion)); }));
84+
compileTask.setSourceCompatibility(Integer.toString(javaVersion));
85+
CompileOptions compileOptions = compileTask.getOptions();
86+
compileOptions.getRelease().set(javaVersion);
87+
compileOptions.getCompilerArgs().add("--enable-preview");
88+
compileOptions.getCompilerArgs().add("-Xlint:-preview");
89+
90+
compileTask.doLast(t -> { stripPreviewFromFiles(compileTask.getDestinationDirectory().getAsFile().get().toPath()); });
91+
});
92+
}
93+
94+
private static void stripPreviewFromFiles(Path compileDir) {
95+
try (Stream<Path> fileStream = Files.walk(compileDir)) {
96+
fileStream.filter(p -> p.toString().endsWith(".class")).forEach(MrjarPlugin::maybeStripPreview);
97+
} catch (IOException e) {
98+
throw new UncheckedIOException(e);
99+
}
100+
}
101+
102+
private static void maybeStripPreview(Path file) {
103+
ClassWriter classWriter = null;
104+
try (var in = Files.newInputStream(file)) {
105+
ClassReader classReader = new ClassReader(in);
106+
ClassNode classNode = new ClassNode();
107+
classReader.accept(classNode, 0);
108+
109+
if ((classNode.version & V_PREVIEW) != 0) {
110+
classNode.version = classNode.version & ~V_PREVIEW;
111+
classWriter = new ClassWriter(0);
112+
classNode.accept(classWriter);
113+
}
114+
} catch (IOException e) {
115+
throw new UncheckedIOException(e);
116+
}
117+
118+
if (classWriter != null) {
119+
try (var out = Files.newOutputStream(file)) {
120+
out.write(classWriter.toByteArray());
121+
} catch (IOException e) {
122+
throw new org.gradle.api.UncheckedIOException(e);
123+
}
124+
}
125+
126+
}
127+
}

client/rest-high-level/src/main/java/org/elasticsearch/client/analytics/ParsedStringStats.java

Lines changed: 0 additions & 174 deletions
This file was deleted.

0 commit comments

Comments
 (0)