From c57b9e0bbe56a8172fb77deb67276e8cb60d5b74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Thu, 13 Aug 2026 17:27:08 +0200 Subject: [PATCH 1/2] Prepare CLI options for class2mc without java runtime --- .../java/de/monticore/cdgen/CDGenTool.java | 55 +++++++++++++++---- .../cd/cdgen/AbstractDecoratorTest.java | 2 +- .../cdgen/gradleplugin/CDGenTask.java | 14 +++++ 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/cdlang/src/main/java/de/monticore/cdgen/CDGenTool.java b/cdlang/src/main/java/de/monticore/cdgen/CDGenTool.java index f101af407..6ae4b1a7e 100644 --- a/cdlang/src/main/java/de/monticore/cdgen/CDGenTool.java +++ b/cdlang/src/main/java/de/monticore/cdgen/CDGenTool.java @@ -40,6 +40,7 @@ import java.io.File; import java.io.IOException; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -119,7 +120,8 @@ else if (!cmd.hasOption("i") || cmd.hasOption("h")) { final boolean c2mc = cmd.hasOption("c2mc"); - initializeSymbolTable(c2mc); + initializeSymbolTable(c2mc, cmd.hasOption("class2mc-no-java-runtime"), cmd.hasOption( + "use-standard-symbols")); Log.enableFailQuick(false); Collection asts = this.parse(".cd", this.createModelPath(cmd) @@ -212,24 +214,50 @@ else if (!cmd.hasOption("i") || cmd.hasOption("h")) { CD4CodeMill.globalScope().clear(); } - public void initializeSymbolTable(boolean c2mc) { + public void initializeSymbolTable(boolean c2mc, boolean c2mcNoRuntime, + boolean loadStandardSymbolLibrary) { BasicSymbolsMill.initializePrimitives(); MCCollectionSymTypeRelations.init(); if (c2mc) { - initializeClass2MC(); + if (c2mcNoRuntime) { + // TODO: Migrate to " Add toggle for load from jdk " once merged + CD4CodeMill.globalScope().addAdaptedTypeSymbolResolver(new OOClass2MCResolver() { + + @Override + protected Optional loadFromJDK(String name) { + return Optional.empty(); + } + + }); + CD4CodeMill.globalScope().addAdaptedOOTypeSymbolResolver(new OOClass2MCResolver() { + + @Override + protected Optional loadFromJDK(String name) { + return Optional.empty(); + } + + }); + } + else { + CD4CodeMill.globalScope().addAdaptedTypeSymbolResolver(new OOClass2MCResolver()); + CD4CodeMill.globalScope().addAdaptedOOTypeSymbolResolver(new OOClass2MCResolver()); + } + if (loadStandardSymbolLibrary) { + Log.warn( + "Both class2mc and loadStandardSymbolLibrary are enabled. This might lead to duplicate symbols."); + } } else { - BasicSymbolsMill.initializeString(); - BasicSymbolsMill.initializeObject(); + if (loadStandardSymbolLibrary) { + // TODO: Remove me and load the symtab instead + BasicSymbolsMill.initializeString(); + BasicSymbolsMill.initializeObject(); + } + } } - public void initializeClass2MC() { - CD4CodeMill.globalScope().addAdaptedTypeSymbolResolver(new OOClass2MCResolver()); - CD4CodeMill.globalScope().addAdaptedOOTypeSymbolResolver(new OOClass2MCResolver()); - } - public void initializeDecConf(GlobalExtensionManagement glex, DecoratorConfig decConfig, CommandLine cmd, GeneratorSetup setup) { // Setup CLI config overrides @@ -395,6 +423,13 @@ public Options addAdditionalOptions(Options options) { options.addOption(Option.builder("c2mc").longOpt("class2mc").desc( "Enables to resolve java classes in the model path").build()); + options.addOption(Option.builder().longOpt("class2mc-no-java-runtime").desc( + "Does not load the java runtime enviroment into class2mc. Only the symbolpath is used.") + .build()); + + options.addOption(Option.builder().longOpt("use-standard-symbols").desc( + "Loads the standard symbol library into the symbolpath.").build()); + options.addOption(Option.builder("cliconfig").desc("Configures additional").hasArgs().argName( "fqn:key[=value]").build()); diff --git a/cdlang/src/test/java/de/monticore/cd/cdgen/AbstractDecoratorTest.java b/cdlang/src/test/java/de/monticore/cd/cdgen/AbstractDecoratorTest.java index 38780d128..08232bc11 100644 --- a/cdlang/src/test/java/de/monticore/cd/cdgen/AbstractDecoratorTest.java +++ b/cdlang/src/test/java/de/monticore/cd/cdgen/AbstractDecoratorTest.java @@ -64,7 +64,7 @@ public TestResult doTest(ASTCDCompilationUnit cd) { tool.trafoBeforeSymtab(Collections.singletonList(cd)); final boolean class2mc = this.withClass2MC(); - tool.initializeSymbolTable(class2mc); + tool.initializeSymbolTable(class2mc, false, !class2mc); // Create ST tool.createSymbolTable(cd); diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java index f0ecd7493..8622280c7 100644 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java +++ b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java @@ -35,6 +35,14 @@ public CDGenTask() { @Input abstract Property getClass2MC(); + @Optional + @Input + abstract Property getClass2MCNoJavaRuntime(); + + @Optional + @Input + abstract Property getUseStandardSymbolLibrary(); + /** * Whether CoCos should be checked, default is true * @@ -82,6 +90,12 @@ protected List createArgList(Function handlePath) { if (getClass2MC().isPresent() && getClass2MC().get()) { list.add("--class2mc"); } + if (getClass2MCNoJavaRuntime().isPresent() && getClass2MCNoJavaRuntime().get()) { + list.add("--class2mc-no-java-runtime"); + } + if (getUseStandardSymbolLibrary().isPresent() && getUseStandardSymbolLibrary().get()) { + list.add("--use-standard-symbols"); + } if (!getTargetSymbolPath().isEmpty()) { // model paths List modelPath = new ArrayList<>(); getTargetSymbolPath().forEach(it -> modelPath.add(it.toPath())); From 58c9033750558421c06055089551c1a1869a4224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20L=C3=BCpges?= Date: Thu, 13 Aug 2026 18:04:45 +0200 Subject: [PATCH 2/2] keep default behavior --- .../main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java index 8622280c7..14ba676be 100644 --- a/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java +++ b/cdtool/cdgradle/src/main/java/de/monticore/cdgen/gradleplugin/CDGenTask.java @@ -90,6 +90,11 @@ protected List createArgList(Function handlePath) { if (getClass2MC().isPresent() && getClass2MC().get()) { list.add("--class2mc"); } + else if (!getUseStandardSymbolLibrary().isPresent()) { + getLogger().warn( + "Neither the --class2mc or --use-standard-symbols option are present. In the future, this behaviour will change"); + list.add("--use-standard-symbols"); + } if (getClass2MCNoJavaRuntime().isPresent() && getClass2MCNoJavaRuntime().get()) { list.add("--class2mc-no-java-runtime"); }