Skip to content

Commit

Permalink
feat: JEP 445: Unnamed Classes and Instance Main Methods (#1633)
Browse files Browse the repository at this point in the history
* feat: JEP 445: Unnamed Classes and Instance Main Methods

* fix: try avoid encoding issue in choco build
  • Loading branch information
maxandersen committed Jun 10, 2023
1 parent ac432ec commit 9c2255b
Show file tree
Hide file tree
Showing 10 changed files with 61 additions and 5 deletions.
1 change: 1 addition & 0 deletions itests/karate.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
////DEPS com.intuit.karate:karate-netty:2.0.0
////DEPS com.github.maxandersen.karate:karate-netty:19e06766


class karate {

public static void main(String... args) {
Expand Down
20 changes: 20 additions & 0 deletions itests/nakedmain.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Feature: jep445

Background:
// as long as java 21 is not downloadable
// we keep this abort in place - it should be removed
// until then test by:
// JBANG_JDK_VENDOR=openjdk ./karate.java jep445.feature
* if (java.lang.System.getenv('JBANG_JDK_VENDOR') != "openjdk") karate.abort()

Scenario: naked main
When command('jbang nakedmain/noclass.java')
Then match out == "Hello!\n"

Scenario: naked main
When command('jbang nakedmain/noclasswithargs.java hey')
Then match out == "Hello hey\n"

Scenario: naked main
When command('jbang nakedmain/classinstance.java yo')
Then match out == "Hello yo\n"
8 changes: 8 additions & 0 deletions itests/nakedmain/classinstance.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//JAVA 21+
//PREVIEW
class classinstance {
void main(String... args) {

System.out.println("Hello " + args[0]);
}
}
6 changes: 6 additions & 0 deletions itests/nakedmain/noclass.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//JAVA 21+
//PREVIEW

void main() {
System.out.println("Hello!");
}
6 changes: 6 additions & 0 deletions itests/nakedmain/noclasswithargs.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//JAVA 21+
//PREVIEW

void main(String... args) {
System.out.println("Hello " + args[0]);
}
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,8 @@ protected String getSuggestedMain() {
protected abstract String getMainExtension();

protected Predicate<ClassInfo> getMainFinder() {
return pubClass -> pubClass.method("main", STRINGARRAYTYPE) != null;
return pubClass -> (pubClass.method("main", STRINGARRAYTYPE) != null
||
pubClass.method("main") != null);
}
}
2 changes: 1 addition & 1 deletion src/main/java/dev/jbang/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public class Util {
private static final String JBANG_DOWNLOAD_SOURCES = "JBANG_DOWNLOAD_SOURCES";

public static final Pattern patternMainMethod = Pattern.compile(
"^.*(public\\s+static|static\\s+public)\\s+void\\s+main\\s*\\(.*",
"^.*(public\\s+static|static\\s+public)\\s+void\\s+main\\s*\\(.*|void\\s+main\\s*\\(\\)",
Pattern.MULTILINE);

public static final Pattern mainClassMethod = Pattern.compile(
Expand Down
1 change: 0 additions & 1 deletion src/main/scripts/choco/jbang.nuspec
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>jbang</id>
Expand Down
3 changes: 1 addition & 2 deletions src/test/java/dev/jbang/cli/TestJdk.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import java.nio.file.Path;
import java.util.Arrays;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Function;

import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -442,14 +441,14 @@ private void createMockJdk(int jdkVersion, BiConsumer<Path, String> init) {
}
}


private void initMockJdkDirRuntime(Path jdkPath, String version) {
initMockJdkDir(jdkPath, version, "JAVA_RUNTIME_VERSION");
}

private void initMockJdkDir(Path jdkPath, String version) {
initMockJdkDir(jdkPath, version, "JAVA_VERSION");
}

private void initMockJdkDir(Path jdkPath, String version, String key) {
Util.mkdirs(jdkPath);
String rawJavaVersion = key + "=\"" + version + "\"";
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/dev/jbang/util/TestUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,21 @@ void testHasMainMethod() {

content = "public static\nvoid\nmain(String\nargs[]) {";
assertTrue(Util.hasMainMethod(content));

// the Java 21 / JEP-445

content = "class HelloWorld {\n" +
"\tvoid main() {\n" +
"\t\tSystem.out.println(\"Hello world from an instance main method o/\");\n" +
"\t}\n" +
"}";
assertTrue(Util.hasMainMethod(content));

content = "void main() {\n" +
"\t\tSystem.out.println(\"Hello world from an unnamed main method o/\");\n" +
"\t}\n";
assertTrue(Util.hasMainMethod(content));

}

@Test
Expand Down

0 comments on commit 9c2255b

Please sign in to comment.