From 497d804febfe514286866406bc5da27778542d37 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:10:08 +0200 Subject: [PATCH 1/3] Support Java 17 in initializr Take 2 --- .../initializr/model/GeneratorModel.java | 93 +++++++++++++++++++ .../model/GeneratorModelMatrixTest.java | 35 +++++++ 2 files changed, 128 insertions(+) diff --git a/scripts/initializr/common/src/main/java/com/codename1/initializr/model/GeneratorModel.java b/scripts/initializr/common/src/main/java/com/codename1/initializr/model/GeneratorModel.java index 311d58c910..dbaf23ce94 100644 --- a/scripts/initializr/common/src/main/java/com/codename1/initializr/model/GeneratorModel.java +++ b/scripts/initializr/common/src/main/java/com/codename1/initializr/model/GeneratorModel.java @@ -190,9 +190,18 @@ private byte[] applyDataReplacements(String targetPath, byte[] sourceData) throw if ("common/pom.xml".equals(targetPath)) { content = applyJavaVersionToPom(content); } + if (".idea/misc.xml".equals(targetPath)) { + content = normalizeIntellijMiscXml(content); + } + if (".idea/workspace.xml".equals(targetPath)) { + content = applySimulatorJvmExportToIdeaWorkspace(content); + } if ("pom.xml".equals(targetPath)) { content = replaceTagValue(content, "cn1.plugin.version", CN1_PLUGIN_VERSION); } + if ("android/pom.xml".equals(targetPath) || "ios/pom.xml".equals(targetPath)) { + content = hardenPlatformModulePomAgainstDoubleJarAttach(content); + } if ("javase/pom.xml".equals(targetPath)) { content = normalizeJavasePom(content); } @@ -217,6 +226,90 @@ private String applyJavaVersionToPom(String content) { return content; } + private String normalizeIntellijMiscXml(String content) { + String languageLevel = options.javaVersion == ProjectOptions.JavaVersion.JAVA_17_EXPERIMENTAL ? "JDK_17" : "JDK_1_8"; + content = removeXmlAttribute(content, "project-jdk-name"); + content = removeXmlAttribute(content, "project-jdk-type"); + content = setXmlAttribute(content, "languageLevel", languageLevel); + return content; + } + + private static String removeXmlAttribute(String xml, String attributeName) { + String pattern = attributeName + "=\""; + int pos = xml.indexOf(pattern); + if (pos < 0) { + return xml; + } + int valueStart = pos + pattern.length(); + int valueEnd = xml.indexOf('"', valueStart); + if (valueEnd < 0) { + return xml; + } + int removeStart = pos; + while (removeStart > 0 && xml.charAt(removeStart - 1) == ' ') { + removeStart--; + } + return xml.substring(0, removeStart) + xml.substring(valueEnd + 1); + } + + private static String setXmlAttribute(String xml, String attributeName, String value) { + String pattern = attributeName + "=\""; + int pos = xml.indexOf(pattern); + if (pos < 0) { + return xml; + } + int valueStart = pos + pattern.length(); + int valueEnd = xml.indexOf('"', valueStart); + if (valueEnd < 0) { + return xml; + } + return xml.substring(0, valueStart) + value + xml.substring(valueEnd); + } + + private static String applySimulatorJvmExportToIdeaWorkspace(String content) { + String configHeader = "", start); + if (end < 0) { + return content; + } + String segment = content.substring(start, end); + String exportArg = "--add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED"; + if (segment.indexOf(exportArg) >= 0) { + return content; + } + segment = StringUtil.replaceAll(segment, "