diff --git a/Ports/JavaSE/src/com/codename1/impl/javase/Executor.java b/Ports/JavaSE/src/com/codename1/impl/javase/Executor.java index 08c60a8ab7..53f5741b38 100644 --- a/Ports/JavaSE/src/com/codename1/impl/javase/Executor.java +++ b/Ports/JavaSE/src/com/codename1/impl/javase/Executor.java @@ -108,7 +108,7 @@ private static int getJavaVersion() { int dotPos = version.indexOf('.'); int dashPos = version.indexOf('-'); return Integer.parseInt(version.substring(0, - dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : 1)); + dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : version.length())); } static void setMacApplicationEventHandled(Object event, boolean handled) { diff --git a/maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/IPhoneBuilder.java b/maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/IPhoneBuilder.java index 944b45faea..477865a37c 100644 --- a/maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/IPhoneBuilder.java +++ b/maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/IPhoneBuilder.java @@ -2641,21 +2641,27 @@ private int getMajorVersionInt(String versionStr, int defaultVal) { private String[] getStubCompileSourceTarget(String javacPath) { String source = "1.6"; String target = "1.6"; + int major = -1; + String version = null; try { String versionOutput = execString(tmpFile != null ? tmpFile : new File("."), javacPath, "-version"); if (versionOutput != null && versionOutput.trim().length() > 0) { String[] parts = versionOutput.trim().split("\\s+"); - String version = parts[parts.length - 1]; - int major = getMajorVersionInt(version, -1); - if (major >= 9) { - source = "8"; - target = "8"; - log("JDK " + version + " does not support -source/-target 1.6. Compiling iOS stubs with -source/-target 8."); - } + version = parts[parts.length - 1]; + major = getMajorVersionInt(version, -1); } } catch (Exception ex) { debug("Failed to resolve javac version for iOS stub compile: " + ex.getMessage()); } + if (major < 0) { + version = System.getProperty("java.version"); + major = getMajorVersionInt(version, -1); + } + if (major >= 9) { + source = "8"; + target = "8"; + log("JDK " + version + " does not support -source/-target 1.6. Compiling iOS stubs with -source/-target 8."); + } return new String[]{source, target}; } 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..27fd27899c 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,8 +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); + content = replaceTagValue(content, "cn1.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 +227,97 @@ 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, "