Skip to content

Commit

Permalink
feat: enable -g by default + allow -g=vars,lines,source,none (quarkus…
Browse files Browse the repository at this point in the history
  • Loading branch information
maxandersen committed Oct 22, 2022
1 parent 28bf948 commit 876a540
Show file tree
Hide file tree
Showing 16 changed files with 154 additions and 68 deletions.
4 changes: 4 additions & 0 deletions docs/modules/ROOT/pages/debugging.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ This will make it use port 4321 and make it listen on all ('*') network interfac

NOTE: Be sure to put a breakpoint in your IDE/debugger before you connect to make the debugger actually stop when you need it.

== Debug info

JBang since version 0.100 compiles with debug info enabled by default. You can use `-C=-g` to tweak how much debug info is included: `jbang -C=-g=lines,vars,source` or to turn it off use `jbang -C=-g=none".

== Debug jbang itself

Java itself will add `JAVA_TOOL_OPTIONS` which will apply to `jbang` too.
Expand Down
25 changes: 15 additions & 10 deletions src/main/java/dev/jbang/catalog/Alias.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public class Alias extends CatalogItem {
public final String scriptRef;
public final String description;
public final List<String> arguments;
@SerializedName(value = "java-options")
public final List<String> javaOptions;
@SerializedName(value = "runtime-options", alternate = { "java-options" })
public final List<String> runtimeOptions;
public final List<String> sources;
@SerializedName(value = "files")
public final List<String> resources;
Expand All @@ -31,15 +31,17 @@ public class Alias extends CatalogItem {
public final String javaVersion;
@SerializedName(value = "main")
public final String mainClass;
@SerializedName(value = "compile-options")
public final List<String> compileOptions;

private Alias() {
this(null, null, null, null, null, null, null, null, null, null, null, null, null);
this(null, null, null, null, null, null, null, null, null, null, null, null, null, null);
}

public Alias(String scriptRef,
String description,
List<String> arguments,
List<String> javaOptions,
List<String> runtimeOptions,
List<String> sources,
List<String> resources,
List<String> dependencies,
Expand All @@ -48,12 +50,13 @@ public Alias(String scriptRef,
Map<String, String> properties,
String javaVersion,
String mainClass,
List<String> compileOptions,
Catalog catalog) {
super(catalog);
this.scriptRef = scriptRef;
this.description = description;
this.arguments = arguments;
this.javaOptions = javaOptions;
this.runtimeOptions = runtimeOptions;
this.sources = sources;
this.resources = resources;
this.dependencies = dependencies;
Expand All @@ -62,6 +65,7 @@ public Alias(String scriptRef,
this.properties = properties;
this.javaVersion = javaVersion;
this.mainClass = mainClass;
this.compileOptions = compileOptions;
}

/**
Expand Down Expand Up @@ -123,8 +127,8 @@ private static Alias merge(Alias a1, String name, Function<String, Alias> findUn
a2 = merge(a2, a2.scriptRef, findUnqualifiedAlias, names);
String desc = a1.description != null ? a1.description : a2.description;
List<String> args = a1.arguments != null && !a1.arguments.isEmpty() ? a1.arguments : a2.arguments;
List<String> opts = a1.javaOptions != null && !a1.javaOptions.isEmpty() ? a1.javaOptions
: a2.javaOptions;
List<String> jopts = a1.runtimeOptions != null && !a1.runtimeOptions.isEmpty() ? a1.runtimeOptions
: a2.runtimeOptions;
List<String> srcs = a1.sources != null && !a1.sources.isEmpty() ? a1.sources
: a2.sources;
List<String> ress = a1.resources != null && !a1.resources.isEmpty() ? a1.resources
Expand All @@ -139,10 +143,11 @@ private static Alias merge(Alias a1, String name, Function<String, Alias> findUn
: a2.properties;
String javaVersion = a1.javaVersion != null ? a1.javaVersion : a2.javaVersion;
String mainClass = a1.mainClass != null ? a1.mainClass : a2.mainClass;
List<String> copts = a1.compileOptions != null && !a1.compileOptions.isEmpty() ? a1.compileOptions
: a2.compileOptions;
Catalog catalog = a2.catalog != null ? a2.catalog : a1.catalog;
return new Alias(a2.scriptRef, desc, args, opts, srcs, ress, deps, repos, cpaths, props, javaVersion,
mainClass,
catalog);
return new Alias(a2.scriptRef, desc, args, jopts, srcs, ress, deps, repos, cpaths, props, javaVersion,
mainClass, copts, catalog);
} else {
return a1;
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/dev/jbang/catalog/Catalog.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ public Catalog(String baseRef, String description, ResourceRef catalogRef, Map<S
catalogs.forEach((key, c) -> this.catalogs.put(key,
new CatalogRef(c.catalogRef, c.description, this)));
aliases.forEach((key, a) -> this.aliases.put(key,
new Alias(a.scriptRef, a.description, a.arguments, a.javaOptions, a.sources, a.resources,
new Alias(a.scriptRef, a.description, a.arguments, a.runtimeOptions, a.sources, a.resources,
a.dependencies, a.repositories, a.classpaths, a.properties, a.javaVersion, a.mainClass,
this)));
a.compileOptions, this)));
templates.forEach((key, t) -> this.templates.put(key,
new Template(t.fileRefs, t.description, t.properties, this)));
}
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/dev/jbang/catalog/CatalogUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,11 @@ public static Path addNearestAlias(String name,
List<String> classPaths,
Map<String, String> properties,
String javaVersion,
String mainClass) {
String mainClass,
List<String> compileOptions) {
Path catalogFile = Catalog.getCatalogFile(null);
addAlias(catalogFile, name, scriptRef, description, arguments, javaRuntimeOptions, sources, resources,
dependencies, repositories, classPaths, properties, javaVersion, mainClass);
dependencies, repositories, classPaths, properties, javaVersion, mainClass, compileOptions);
return catalogFile;
}

Expand All @@ -68,13 +69,14 @@ public static Alias addAlias(Path catalogFile,
List<String> classPaths,
Map<String, String> properties,
String javaVersion,
String mainClass) {
String mainClass,
List<String> compileOptions) {
Path cwd = Util.getCwd();
catalogFile = cwd.resolve(catalogFile);
Catalog catalog = Catalog.get(catalogFile);
scriptRef = catalog.relativize(scriptRef);
Alias alias = new Alias(scriptRef, description, arguments, javaRuntimeOptions, sources, resources,
dependencies, repositories, classPaths, properties, javaVersion, mainClass, catalog);
dependencies, repositories, classPaths, properties, javaVersion, mainClass, compileOptions, catalog);
catalog.aliases.put(name, alias);
try {
catalog.write();
Expand Down
26 changes: 12 additions & 14 deletions src/main/java/dev/jbang/cli/Alias.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,24 +64,20 @@ class AliasAdd extends BaseAliasCommand {
@CommandLine.Mixin
ScriptMixin scriptMixin;

@CommandLine.Mixin
BuildMixin buildMixin;

@CommandLine.Mixin
DependencyInfoMixin dependencyInfoMixin;

@CommandLine.Option(names = { "--description",
"-d" }, description = "A description for the alias")
String description;

@CommandLine.Option(names = { "--java-options" }, description = "A Java runtime option")
@CommandLine.Option(names = { "-R", "--runtime-option",
"--jave-options" }, description = "Options to pass to the Java runtime")
List<String> javaRuntimeOptions;

@CommandLine.Option(names = { "-m",
"--main" }, description = "Main class to use when running. Used primarily for running jar's.")
String main;

@CommandLine.Option(names = { "-j",
"--java" }, description = "JDK version to use for running the alias.")
String javaVersion;

@CommandLine.Option(names = { "--name" }, description = "A name for the alias")
String name;

Expand Down Expand Up @@ -109,12 +105,14 @@ public Integer doCall() {
CatalogUtil.addAlias(catFile, name, scriptMixin.scriptOrFile, desc, userParams, javaRuntimeOptions,
scriptMixin.sources, scriptMixin.resources, dependencyInfoMixin.getDependencies(),
dependencyInfoMixin.getRepositories(), dependencyInfoMixin.getClasspaths(),
dependencyInfoMixin.getProperties(), javaVersion, main);
dependencyInfoMixin.getProperties(), buildMixin.javaVersion, buildMixin.main,
buildMixin.compileOptions);
} else {
catFile = CatalogUtil.addNearestAlias(name, scriptMixin.scriptOrFile, desc, userParams, javaRuntimeOptions,
scriptMixin.sources, scriptMixin.resources, dependencyInfoMixin.getDependencies(),
dependencyInfoMixin.getRepositories(), dependencyInfoMixin.getClasspaths(),
dependencyInfoMixin.getProperties(), javaVersion, main);
dependencyInfoMixin.getProperties(), buildMixin.javaVersion, buildMixin.main,
buildMixin.compileOptions);
}
info(String.format("Alias '%s' added to '%s'", name, catFile));
return EXIT_OK;
Expand All @@ -130,8 +128,8 @@ ProjectBuilder createProjectBuilder() {
.additionalSources(scriptMixin.sources)
.additionalResources(scriptMixin.resources)
.forceType(scriptMixin.forceType)
.javaVersion(javaVersion)
.mainClass(main)
.javaVersion(buildMixin.javaVersion)
.mainClass(buildMixin.main)
.setArguments(userParams)
.javaOptions(javaRuntimeOptions);
Path cat = getCatalog(false);
Expand Down Expand Up @@ -253,7 +251,7 @@ private static AliasOut getAliasOut(String catalogName, Catalog catalog, String
out.arguments = alias.arguments;
out.javaVersion = alias.javaVersion;
out.mainClass = alias.mainClass;
out.javaOptions = alias.javaOptions;
out.javaOptions = alias.runtimeOptions;
out.properties = alias.properties;
out._catalogRef = alias.catalog.catalogRef;
return out;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/dev/jbang/cli/BaseBuildCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ ProjectBuilder createProjectBuilder() {
.catalog(scriptMixin.catalog)
.javaVersion(buildMixin.javaVersion)
.mainClass(buildMixin.main)
.compileOptions(buildMixin.compileOptions)
.nativeImage(nativeImage)
.buildDir(buildDir);
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/dev/jbang/cli/BuildMixin.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.jbang.cli;

import java.util.List;

import picocli.CommandLine;

public class BuildMixin {
Expand All @@ -18,4 +20,7 @@ void setJavaVersion(String javaVersion) {
@CommandLine.Option(names = { "-m",
"--main" }, description = "Main class to use when running. Used primarily for running jar's.")
String main;

@CommandLine.Option(names = { "-C", "--compile-option" }, description = "Options to pass to the compiler")
public List<String> compileOptions;
}
3 changes: 2 additions & 1 deletion src/main/java/dev/jbang/cli/Export.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ protected ProjectBuilder createProjectBuilder(ExportMixin exportMixin) {
.forceType(exportMixin.scriptMixin.forceType)
.catalog(exportMixin.scriptMixin.catalog)
.javaVersion(exportMixin.buildMixin.javaVersion)
.mainClass(exportMixin.buildMixin.main);
.mainClass(exportMixin.buildMixin.main)
.compileOptions(exportMixin.buildMixin.compileOptions);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/dev/jbang/cli/Run.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
@CommandLine.Command(name = "run", description = "Builds and runs provided script.")
public class Run extends BaseBuildCommand {

@CommandLine.Option(names = { "--java-options" }, description = "A Java runtime option")
@CommandLine.Option(names = { "-R", "--runtime-option",
"--java-options" }, description = "Options to pass to the Java runtime")
public List<String> javaRuntimeOptions;

@CommandLine.Option(names = {
Expand Down
16 changes: 15 additions & 1 deletion src/main/java/dev/jbang/source/ProjectBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public class ProjectBuilder {
private List<Project> javaAgents = new ArrayList<>();
private Source.Type forceType = null;
private String mainClass;
private List<String> compileOptions = Collections.emptyList();
private File catalogFile;

private ModularClassPath mcp;
Expand Down Expand Up @@ -180,6 +181,15 @@ public ProjectBuilder mainClass(String mainClass) {
return this;
}

public ProjectBuilder compileOptions(List<String> compileOptions) {
if (compileOptions != null) {
this.compileOptions = compileOptions;
} else {
this.compileOptions = Collections.emptyList();
}
return this;
}

public ProjectBuilder javaOptions(List<String> javaOptions) {
if (javaOptions != null) {
this.javaOptions = javaOptions;
Expand Down Expand Up @@ -444,6 +454,7 @@ private Project updateProject(Project prj) {
ss.addClassPaths(replaceAllProps(additionalClasspaths));
updateAllSources(prj, replaceAllProps(additionalSources));
ss.addResources(allToFileRef(replaceAllProps(additionalResources)));
ss.addCompileOptions(compileOptions);
prj.putProperties(properties);
prj.addRuntimeOptions(javaOptions);
prj.addJavaAgents(javaAgents);
Expand Down Expand Up @@ -510,7 +521,7 @@ private void updateFromAlias(Alias alias) {
setArguments(alias.arguments);
}
if (javaOptions.isEmpty()) {
javaOptions(alias.javaOptions);
javaOptions(alias.runtimeOptions);
}
if (additionalSources.isEmpty()) {
additionalSources(alias.sources);
Expand All @@ -536,6 +547,9 @@ private void updateFromAlias(Alias alias) {
if (mainClass == null) {
mainClass(alias.mainClass);
}
if (compileOptions.isEmpty()) {
compileOptions(alias.compileOptions);
}
}

public static boolean isAlias(ResourceRef resourceRef) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ protected Project compile() throws IOException {
Path compileDir = project.getBuildDir();
List<String> optionList = new ArrayList<>();
optionList.add(getCompilerBinary(requestedJavaVersion));
optionList.add("-g");
optionList.addAll(project.getMainSourceSet().getCompileOptions());
String path = project.resolveClassPath().getClassPath();
if (!Util.isBlankString(path)) {
Expand Down
Loading

0 comments on commit 876a540

Please sign in to comment.