--- jaxb-ri-4.0.5-RI/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/writer/LicenseCodeWriter.java 2025-07-17 11:04:19.315468848 +0200 +++ jaxb-ri-4.0.5-RI/jaxb-ri/codemodel/codemodel/src/main/java/com/sun/codemodel/writer/LicenseCodeWriter.java 2025-07-17 12:09:59.372158276 +0200 @@ -33,9 +33,17 @@ */ public class LicenseCodeWriter extends FilterCodeWriter { + private static final String getCurrentYear() { + Calendar c = Calendar.getInstance(); + String sde = System.getenv("SOURCE_DATE_EPOCH"); + if (sde != null) { + c.setTimeInMillis(1000 * Long.parseLong(sde)); + } + return String.valueOf(c.get(Calendar.YEAR)); + } private static final String COPYRIGHT_LINE_TEMPLATE = "^.*Copyright \\(c\\) (YYYY) (by )?([A-Za-z].*)$"; private static final Pattern PATTERN = Pattern.compile(COPYRIGHT_LINE_TEMPLATE, Pattern.MULTILINE); - private static final String CURRENT_YEAR = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); + private static final String CURRENT_YEAR = getCurrentYear(); private final Path license; --- jaxb-ri-4.0.5-RI/jaxb-ri/txw/compiler/src/main/java/com/sun/tools/txw2/TxwTask.java 2025-07-17 11:04:19.490955785 +0200 +++ jaxb-ri-4.0.5-RI/jaxb-ri/txw/compiler/src/main/java/com/sun/tools/txw2/TxwTask.java 2025-07-17 12:14:54.350779383 +0200 @@ -14,6 +14,7 @@ import com.sun.codemodel.JPackage; import com.sun.codemodel.writer.FileCodeWriter; import com.sun.codemodel.writer.FilterCodeWriter; +import com.sun.codemodel.writer.LicenseCodeWriter; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import com.sun.tools.rngom.parse.compact.CompactParseable; @@ -197,55 +198,4 @@ Main.run(options); log( "Compilation complete.", Project.MSG_INFO ); } - - /** - * Writes all the source files under the specified file folder and inserts a - * license file each java source file. - */ - private static final class LicenseCodeWriter extends FilterCodeWriter { - - private static final String COPYRIGHT_LINE_TEMPLATE = "^.*Copyright \\(c\\) (YYYY) (by )?([A-Za-z].*)$"; - private static final Pattern PATTERN = Pattern.compile(COPYRIGHT_LINE_TEMPLATE, Pattern.MULTILINE); - private static final String CURRENT_YEAR = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); - - private final Path license; - - /** - * @param core This CodeWriter will be used to actually create a storage - * for files. LicenseCodeWriter simply decorates this underlying - * CodeWriter by adding prolog comments. - * @param license license File - * @param encoding encoding - */ - LicenseCodeWriter(CodeWriter core, File license, String encoding) { - super(core); - this.license = license.toPath(); - this.encoding = encoding; - } - - @Override - public Writer openSource(JPackage pkg, String fileName) throws IOException { - Writer w = super.openSource(pkg, fileName); - - PrintWriter out = new PrintWriter(w); - try (BufferedReader br = Files.newBufferedReader(license, Charset.forName(encoding))) { - String line; - while ((line = br.readLine()) != null) { - Matcher m = PATTERN.matcher(line); - if (m.matches()) { - out.write(line, 0, m.start(1)); - out.write(CURRENT_YEAR); - out.write(line, m.end(1), line.length() - m.end(1)); - } else { - out.write(line); - } - out.write(System.lineSeparator()); - } - } - - out.flush(); // we can't close the stream for that would close the underlying stream. - - return w; - } - } } --- jaxb-ri-4.0.5-RI/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/Options.java 2025-07-17 11:04:19.500125417 +0200 +++ jaxb-ri-4.0.5-RI/jaxb-ri/xjc/src/main/java/com/sun/tools/xjc/Options.java 2025-07-17 13:42:13.962973199 +0200 @@ -962,9 +962,14 @@ + Messages.format(Messages.TIME_FORMAT); SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.ENGLISH); + Date now = new Date(); + String sde = System.getenv("SOURCE_DATE_EPOCH"); + if (sde != null) { + now = new Date(1000 * Long.parseLong(sde)); + } return Messages.format( Messages.FILE_PROLOG_COMMENT, - dateFormat.format(new Date())); + dateFormat.format(now)); } /**