diff --git a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java index 163233a1d..f42acfe74 100644 --- a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java +++ b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java @@ -86,6 +86,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener { private boolean sizeIsFullscreen = false; private boolean noSmoothRequiresRewrite = false; private boolean smoothRequiresRewrite = false; + private boolean userImportingManually = false; private RewriteResult headerResult; private RewriteResult footerResult; @@ -443,6 +444,10 @@ public class PdeParseTreeListener extends ProcessingBaseListener { foundImports.add(ImportStatement.parse(importStringNoSemi)); + if (importStringNoSemi.startsWith("processing.core.")) { + userImportingManually = true; + } + delete(ctx.start, ctx.stop); } @@ -498,7 +503,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener { * @param ctx ANTLR context for the sketch. */ public void exitStaticProcessingSketch(ProcessingParser.StaticProcessingSketchContext ctx) { - mode = Mode.STATIC; + mode = foundMain ? Mode.JAVA : Mode.STATIC; } /** @@ -1072,10 +1077,16 @@ public class PdeParseTreeListener extends ProcessingBaseListener { protected void writeImports(PrintWriterWithEditGen headerWriter, RewriteResultBuilder resultBuilder) { - writeImportList(headerWriter, coreImports, resultBuilder); + if (!userImportingManually) { + writeImportList(headerWriter, coreImports, resultBuilder); + } + writeImportList(headerWriter, codeFolderImports, resultBuilder); writeImportList(headerWriter, foundImports, resultBuilder); - writeImportList(headerWriter, defaultImports, resultBuilder); + + if (!userImportingManually) { + writeImportList(headerWriter, defaultImports, resultBuilder); + } } /** diff --git a/java/test/processing/mode/java/ParserTests.java b/java/test/processing/mode/java/ParserTests.java index c38a2b820..1e9e28466 100644 --- a/java/test/processing/mode/java/ParserTests.java +++ b/java/test/processing/mode/java/ParserTests.java @@ -448,4 +448,9 @@ public class ParserTests { expectGood("staticclass"); } + @Test + public void testCustomRootClass() { + expectGood("customrootclass"); + } + } diff --git a/java/test/resources/customrootclass.expected b/java/test/resources/customrootclass.expected new file mode 100644 index 000000000..a8b391206 --- /dev/null +++ b/java/test/resources/customrootclass.expected @@ -0,0 +1,23 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class CustomObj extends PApplet { + +public static void main(String[] argv) { + + System.out.println("here"); + +} + +} diff --git a/java/test/resources/customrootclass.pde b/java/test/resources/customrootclass.pde new file mode 100644 index 000000000..a8b391206 --- /dev/null +++ b/java/test/resources/customrootclass.pde @@ -0,0 +1,23 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class CustomObj extends PApplet { + +public static void main(String[] argv) { + + System.out.println("here"); + +} + +}