Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 45 additions & 10 deletions cdlang/src/main/java/de/monticore/cdgen/CDGenTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<ASTCDCompilationUnit> asts = this.parse(".cd", this.createModelPath(cmd)
Expand Down Expand Up @@ -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<URL> loadFromJDK(String name) {
return Optional.empty();
}

});
CD4CodeMill.globalScope().addAdaptedOOTypeSymbolResolver(new OOClass2MCResolver() {

@Override
protected Optional<URL> 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
Expand Down Expand Up @@ -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());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ public CDGenTask() {
@Input
abstract Property<Boolean> getClass2MC();

@Optional
@Input
abstract Property<Boolean> getClass2MCNoJavaRuntime();

@Optional
@Input
abstract Property<Boolean> getUseStandardSymbolLibrary();

/**
* Whether CoCos should be checked, default is true
*
Expand Down Expand Up @@ -82,6 +90,17 @@ protected List<String> createArgList(Function<Path, String> 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");
}
if (getUseStandardSymbolLibrary().isPresent() && getUseStandardSymbolLibrary().get()) {
list.add("--use-standard-symbols");
}
if (!getTargetSymbolPath().isEmpty()) { // model paths
List<Path> modelPath = new ArrayList<>();
getTargetSymbolPath().forEach(it -> modelPath.add(it.toPath()));
Expand Down
Loading