This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new a20c8279cc minor items
a20c8279cc is described below

commit a20c8279cc9fc977c0a4a530937b8febc82dc9ee
Author: Eric Milles <[email protected]>
AuthorDate: Tue Oct 21 09:27:14 2025 -0500

    minor items
---
 .../groovy/tools/javac/JavacJavaCompiler.java      | 129 ++++++++++-----------
 1 file changed, 64 insertions(+), 65 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java 
b/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
index 240690a416..b5231552ba 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
@@ -18,7 +18,6 @@
  */
 package org.codehaus.groovy.tools.javac;
 
-import groovy.lang.GroovyClassLoader;
 import groovy.lang.GroovyObject;
 import org.apache.groovy.io.StringBuilderWriter;
 import org.codehaus.groovy.GroovyBugError;
@@ -26,42 +25,34 @@ import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.control.messages.ExceptionMessage;
 import org.codehaus.groovy.control.messages.SimpleMessage;
-import org.codehaus.groovy.runtime.DefaultGroovyMethods;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.Writer;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.charset.Charset;
-import java.security.CodeSource;
-import java.security.PrivilegedAction;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
-import java.util.stream.Collectors;
-
-import static org.codehaus.groovy.control.CompilerConfiguration.MEM_STUB;
 
 public class JavacJavaCompiler implements JavaCompiler {
 
-    private static final Locale DEFAULT_LOCALE = Locale.ENGLISH;
     private final CompilerConfiguration config;
-    private final Charset charset;
 
-    public JavacJavaCompiler(CompilerConfiguration config) {
-        this.config = config;
-        this.charset = Charset.forName(config.getSourceEncoding());
+    public JavacJavaCompiler(final CompilerConfiguration config) {
+        this.config = Objects.requireNonNull(config);
     }
 
     @Override
-    public void compile(List<String> files, CompilationUnit cu) {
+    public void compile(final List<String> files, final CompilationUnit cu) {
         List<String> javacParameters = makeParameters(cu.getClassLoader());
-        StringBuilderWriter javacOutput = new StringBuilderWriter();
+        var javacOutput = new StringBuilderWriter();
         int javacReturnValue = 0;
         try {
             boolean successful = doCompileWithSystemJavaCompiler(cu, files, 
javacParameters, javacOutput);
@@ -69,7 +60,7 @@ public class JavacJavaCompiler implements JavaCompiler {
                 javacReturnValue = 1;
             }
         } catch (IllegalArgumentException e) {
-            javacReturnValue = 2; // any of the options are invalid
+            javacReturnValue = 2; // invalid options
             cu.getErrorCollector().addFatalError(new ExceptionMessage(e, true, 
cu));
         } catch (IOException e) {
             javacReturnValue = 1;
@@ -79,39 +70,40 @@ public class JavacJavaCompiler implements JavaCompiler {
         }
 
         if (javacReturnValue != 0) {
-            switch (javacReturnValue) {
-                case 1: addJavacError("Compile error during compilation with 
javac.", cu, javacOutput); break;
-                case 2: addJavacError("Invalid commandline usage for javac.", 
cu, javacOutput); break;
-                default: addJavacError("unexpected return value by javac.", 
cu, javacOutput); break;
-            }
+            addJavacError(switch (javacReturnValue) {
+                case  1 -> "Compile error during compilation with javac.";
+                case  2 -> "Invalid commandline usage for javac.";
+                default -> "unexpected return value by javac.";
+            }, javacOutput.toString(), cu);
         } else {
-            // print warnings if any
-            System.out.print(javacOutput);
+            System.out.print(javacOutput); // print errors/warnings
         }
     }
 
-    private boolean doCompileWithSystemJavaCompiler(CompilationUnit cu, 
List<String> files, List<String> javacParameters, StringBuilderWriter 
javacOutput) throws IOException {
+    private boolean doCompileWithSystemJavaCompiler(final CompilationUnit cu, 
final List<String> files, final List<String> javacParameters, final Writer 
javacOutput) throws IOException {
+        Locale locale = Locale.ENGLISH;
+        Charset charset = Charset.forName(config.getSourceEncoding());
         javax.tools.JavaCompiler compiler = 
javax.tools.ToolProvider.getSystemJavaCompiler();
-        try (javax.tools.StandardJavaFileManager fileManager = 
compiler.getStandardFileManager(null, DEFAULT_LOCALE, charset)) {
+        try (javax.tools.StandardJavaFileManager fileManager = 
compiler.getStandardFileManager(null, locale, charset)) {
             Set<javax.tools.JavaFileObject> compilationUnitSet = 
cu.getJavaCompilationUnitSet(); // java stubs already added
 
-            Map<String, Object> options = 
this.config.getJointCompilationOptions();
-            if (!Boolean.TRUE.equals(options.get(MEM_STUB))) {
+            Map<String, Object> options = config.getJointCompilationOptions();
+            if 
(!Boolean.TRUE.equals(options.get(CompilerConfiguration.MEM_STUB))) {
                 // clear the java stubs in the source set of Java compilation
                 compilationUnitSet = new HashSet<>();
 
                 // use sourcepath to specify the root directory of java stubs
-                javacParameters.add("-sourcepath");
-                final File stubDir = (File) options.get("stubDir");
-                if (null == stubDir) {
-                    throw new GroovyBugError("stubDir is not specified");
+                if (options.get("stubDir") instanceof File stubDir) {
+                    javacParameters.add("-sourcepath");
+                    javacParameters.add(stubDir.getAbsolutePath());
+                } else {
+                    throw new GroovyBugError("stubDir not specified");
                 }
-                javacParameters.add(stubDir.getAbsolutePath());
             }
 
             // add java source files to compile
             fileManager.getJavaFileObjectsFromFiles(
-                    files.stream().map(File::new).collect(Collectors.toList())
+                    files.stream().map(File::new).toList()
             ).forEach(compilationUnitSet::add);
 
             javax.tools.JavaCompiler.CompilationTask compilationTask = 
compiler.getTask(
@@ -119,90 +111,97 @@ public class JavacJavaCompiler implements JavaCompiler {
                     fileManager,
                     null,
                     javacParameters,
-                    Collections.emptyList(),
+                    null,
                     compilationUnitSet
             );
-            compilationTask.setLocale(DEFAULT_LOCALE);
+            compilationTask.setLocale(locale);
 
             return compilationTask.call();
         }
     }
 
-    private static void addJavacError(String header, CompilationUnit cu, 
StringBuilderWriter msg) {
-        if (msg != null) {
-            header = header + "\n" + msg.getBuilder().toString();
+    private static void addJavacError(final String head, final String text, 
final CompilationUnit unit) {
+        String message;
+        if (text != null && !text.trim().isEmpty()) {
+            message = head + "\n" + text;
         } else {
-            header = header +
+            message = head +
                     "\nThis javac version does not support 
compile(String[],PrintWriter), " +
                     "so no further details of the error are available. The 
message error text " +
                     "should be found on System.err.\n";
         }
-        cu.getErrorCollector().addFatalError(new SimpleMessage(header, cu));
+        unit.getErrorCollector().addFatalError(new SimpleMessage(message, 
unit));
     }
 
-    private List<String> makeParameters(GroovyClassLoader parentClassLoader) {
-        Map<String, Object> options = config.getJointCompilationOptions();
+    private List<String> makeParameters(final ClassLoader classLoader) {
         List<String> params = new ArrayList<>();
 
-        File target = config.getTargetDirectory();
-        if (target == null) target = new File(".");
+        File targetDir = config.getTargetDirectory();
+        if (targetDir == null) targetDir = new File(".");
 
         params.add("-d");
-        params.add(target.getAbsolutePath());
+        params.add(targetDir.getAbsolutePath());
+
+        Map<String, Object> options = config.getJointCompilationOptions();
+        boolean classpath = false;
 
-        String[] flags = (String[]) options.get("flags");
-        if (flags != null) {
+        if (options.get("flags") instanceof String[] flags) {
             for (String flag : flags) {
+                if (flag == null) continue;
+
                 params.add("-" + flag);
             }
         }
 
-        boolean hadClasspath = false;
-        String[] namedValues = (String[]) options.get("namedValues");
-        if (namedValues != null) {
+        if (options.get("namedValues") instanceof String[] namedValues) {
             for (int i = 0, n = namedValues.length; i < n; i += 2) {
-                String name = namedValues[i];
-                if ("classpath".equals(name)) hadClasspath = true;
+                var name = namedValues[i];
+                if (name == null) continue;
+                if (!classpath) classpath = isClasspathParameter(name);
+
                 params.add("-" + name);
                 params.add(namedValues[i + 1]);
             }
         }
 
         // append classpath if not already defined
-        if (!hadClasspath) {
-            // add all classpaths that compilation unit sees
+        if (!classpath) {
+            // add class paths of compilation unit
             List<String> paths = new ArrayList<>(config.getClasspath());
-            ClassLoader loader = parentClassLoader;
-            while (loader != null) {
-                if (loader instanceof URLClassLoader) {
-                    for (URL u : ((URLClassLoader) loader).getURLs()) {
+            for (ClassLoader loader = classLoader; loader != null; loader = 
loader.getParent()) {
+                if (loader instanceof URLClassLoader ucl) {
+                    for (URL u : ucl.getURLs()) {
                         try {
                             paths.add(new File(u.toURI()).getPath());
                         } catch (URISyntaxException ignore) {
                         }
                     }
                 }
-                loader = loader.getParent();
             }
 
             try {
-                CodeSource codeSource = getCodeSource();
-                if (codeSource != null) {
+                var codeSource = getCodeSource();
+                if (codeSource != null) { // add class path of groovy runtime
                     paths.add(new 
File(codeSource.getLocation().toURI()).getPath());
                 }
             } catch (URISyntaxException ignore) {
             }
 
             params.add("-classpath");
-            params.add(DefaultGroovyMethods.join((Iterable<String>) paths, 
File.pathSeparator));
+            params.add(String.join(File.pathSeparator, paths));
         }
 
         return params;
     }
 
+    private static boolean isClasspathParameter(final String param) {
+        return param.equals("cp") || param.equals("classpath") || 
param.equals("-class-path");
+    }
+
     @SuppressWarnings("removal") // TODO a future Groovy version should 
perform the operation not as a privileged action
-    private CodeSource getCodeSource() {
-        return java.security.AccessController.doPrivileged(
-                (PrivilegedAction<CodeSource>) () -> 
GroovyObject.class.getProtectionDomain().getCodeSource());
+    private static java.security.CodeSource getCodeSource() {
+        return 
java.security.AccessController.doPrivileged((java.security.PrivilegedAction<java.security.CodeSource>)
 () ->
+            GroovyObject.class.getProtectionDomain().getCodeSource()
+        );
     }
 }

Reply via email to