From 4f68bcec09a7e8fc7d28676b18bf48d2046b0ccf Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Mon, 9 Dec 2024 13:06:57 +0100 Subject: [PATCH] preprocessor decoupling --- .idea/modules.xml | 1 + .../processing.java.preprocessor.main.iml | 8 + app/build.gradle.kts | 1 + java/build.gradle.kts | 1 + java/preprocessor/build.gradle.kts | 2 + java/src/processing/mode/java/Commander.java | 2 +- java/src/processing/mode/java/Compiler.java | 1 + .../mode/java/CompletionGenerator.java | 3 + java/src/processing/mode/java/JavaBuild.java | 9 +- java/src/processing/mode/java/JavaEditor.java | 2 + java/src/processing/mode/java/JavaMode.java | 1 + .../processing/mode/java/PreprocService.java | 6 +- .../processing/mode/java/PreprocSketch.java | 3 +- .../mode/java/RuntimePathBuilder.java | 1 + .../java/{ => preproc}/ImportStatement.java | 2 +- .../mode/java/preproc/PdeIssueEmitter.java | 1 - .../java/preproc/PdeParseTreeListener.java | 37 ++-- .../mode/java/preproc/PdePreprocessor.java | 12 +- .../PreprocessIssueMessageSimplifier.java | 16 +- .../mode/java/preproc/PreprocessorResult.java | 3 - .../mode/java/preproc/RewriteResult.java | 2 - .../java/preproc/RewriteResultBuilder.java | 2 - .../mode/java/preproc/SketchException.java | 162 ++++++++++++++++++ .../mode/java/{ => preproc}/SourceUtil.java | 4 +- .../java/{ => preproc}/TextTransform.java | 6 +- .../processing/mode/java/runner/Runner.java | 2 +- 26 files changed, 226 insertions(+), 64 deletions(-) create mode 100644 .idea/modules/java/preprocessor/processing.java.preprocessor.main.iml rename java/src/processing/mode/java/{ => preproc}/ImportStatement.java (99%) create mode 100644 java/src/processing/mode/java/preproc/SketchException.java rename java/src/processing/mode/java/{ => preproc}/SourceUtil.java (99%) rename java/src/processing/mode/java/{ => preproc}/TextTransform.java (98%) diff --git a/.idea/modules.xml b/.idea/modules.xml index 1aec8ebf6..7637008bd 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -6,6 +6,7 @@ + diff --git a/.idea/modules/java/preprocessor/processing.java.preprocessor.main.iml b/.idea/modules/java/preprocessor/processing.java.preprocessor.main.iml new file mode 100644 index 000000000..45d18f02a --- /dev/null +++ b/.idea/modules/java/preprocessor/processing.java.preprocessor.main.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 599b675c4..e4acb47be 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -70,6 +70,7 @@ dependencies { implementation(project(":core")) runtimeOnly(project(":java")) + implementation(project(":java:preprocessor")) implementation(compose.runtime) implementation(compose.foundation) diff --git a/java/build.gradle.kts b/java/build.gradle.kts index 63492afb7..15c269d23 100644 --- a/java/build.gradle.kts +++ b/java/build.gradle.kts @@ -19,6 +19,7 @@ sourceSets{ dependencies{ implementation(project(":app")) implementation(project(":core")) + implementation(project(":java:preprocessor")) diff --git a/java/preprocessor/build.gradle.kts b/java/preprocessor/build.gradle.kts index 169323ad8..4f2817476 100644 --- a/java/preprocessor/build.gradle.kts +++ b/java/preprocessor/build.gradle.kts @@ -25,6 +25,8 @@ sourceSets{ dependencies{ implementation("org.antlr:antlr4:4.7.2") + implementation("org.eclipse.jdt:org.eclipse.jdt.core:3.40.0") + implementation("org.processing:core:${version}") } diff --git a/java/src/processing/mode/java/Commander.java b/java/src/processing/mode/java/Commander.java index 26e191900..2a2ee9bc0 100644 --- a/java/src/processing/mode/java/Commander.java +++ b/java/src/processing/mode/java/Commander.java @@ -33,7 +33,7 @@ import processing.app.Platform; import processing.app.Preferences; import processing.app.RunnerListener; import processing.app.Sketch; -import processing.app.SketchException; +import processing.mode.java.preproc.SketchException; import processing.app.Util; import processing.app.contrib.ModeContribution; import processing.core.PApplet; diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index aaef2e8c3..3e9793169 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -26,6 +26,7 @@ package processing.mode.java; import processing.app.*; import processing.app.ui.Editor; import processing.core.*; +import processing.mode.java.preproc.SketchException; import java.io.*; import java.lang.reflect.Method; diff --git a/java/src/processing/mode/java/CompletionGenerator.java b/java/src/processing/mode/java/CompletionGenerator.java index 5a23816e9..549bfc3aa 100644 --- a/java/src/processing/mode/java/CompletionGenerator.java +++ b/java/src/processing/mode/java/CompletionGenerator.java @@ -60,6 +60,9 @@ import processing.app.Messages; import com.google.classpath.ClassPath; import com.google.classpath.RegExpResourceFilter; +import processing.mode.java.preproc.ImportStatement; +import processing.mode.java.preproc.SourceUtil; +import processing.mode.java.preproc.TextTransform; @SuppressWarnings({ "unchecked" }) public class CompletionGenerator { diff --git a/java/src/processing/mode/java/JavaBuild.java b/java/src/processing/mode/java/JavaBuild.java index 757954978..e180aba50 100644 --- a/java/src/processing/mode/java/JavaBuild.java +++ b/java/src/processing/mode/java/JavaBuild.java @@ -42,8 +42,10 @@ import processing.core.PApplet; import processing.core.PConstants; import processing.data.StringList; import processing.data.XML; +import processing.mode.java.preproc.ImportStatement; import processing.mode.java.preproc.PdePreprocessor; import processing.mode.java.preproc.PreprocessorResult; +import processing.mode.java.preproc.SketchException; public class JavaBuild { @@ -275,7 +277,12 @@ public class JavaBuild { for (ImportStatement item : result.getImportStatements()) { String entry = item.getPackageName(); - Library library = mode.getLibrary(entry); + Library library = null; + try{ + library = mode.getLibrary(entry); + }catch (processing.app.SketchException e){ + throw new SketchException(e.getMessage()); + } if (library != null) { if (!importedLibraries.contains(library)) { diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index 338a6bd29..9c4bb8435 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -50,7 +50,9 @@ import processing.mode.java.debug.Debugger; import processing.mode.java.debug.LineBreakpoint; import processing.mode.java.debug.LineHighlight; import processing.mode.java.debug.LineID; +import processing.mode.java.preproc.ImportStatement; import processing.mode.java.preproc.PdePreprocessor; +import processing.mode.java.preproc.SourceUtil; import processing.mode.java.runner.Runner; import processing.mode.java.tweak.ColorControlBox; import processing.mode.java.tweak.Handle; diff --git a/java/src/processing/mode/java/JavaMode.java b/java/src/processing/mode/java/JavaMode.java index 79c790c12..d3e181235 100644 --- a/java/src/processing/mode/java/JavaMode.java +++ b/java/src/processing/mode/java/JavaMode.java @@ -36,6 +36,7 @@ import processing.app.ui.Editor; import processing.app.ui.EditorException; import processing.app.ui.EditorState; +import processing.mode.java.preproc.SketchException; import processing.mode.java.runner.Runner; import processing.mode.java.tweak.SketchParser; diff --git a/java/src/processing/mode/java/PreprocService.java b/java/src/processing/mode/java/PreprocService.java index 718728d41..f70536294 100644 --- a/java/src/processing/mode/java/PreprocService.java +++ b/java/src/processing/mode/java/PreprocService.java @@ -56,11 +56,9 @@ import org.eclipse.jdt.core.dom.FileASTRequestor; import processing.app.Messages; import processing.app.Sketch; import processing.app.SketchCode; -import processing.app.SketchException; import processing.app.Util; -import processing.mode.java.TextTransform.OffsetMapper; -import processing.mode.java.preproc.PdePreprocessor; -import processing.mode.java.preproc.PreprocessorResult; +import processing.mode.java.preproc.*; +import processing.mode.java.preproc.TextTransform.OffsetMapper; import processing.data.IntList; import processing.data.StringList; diff --git a/java/src/processing/mode/java/PreprocSketch.java b/java/src/processing/mode/java/PreprocSketch.java index 8082a5964..394c7a3a4 100644 --- a/java/src/processing/mode/java/PreprocSketch.java +++ b/java/src/processing/mode/java/PreprocSketch.java @@ -16,7 +16,8 @@ import java.util.Map; import processing.app.Problem; import processing.app.Sketch; import processing.core.PApplet; -import processing.mode.java.TextTransform.OffsetMapper; +import processing.mode.java.preproc.ImportStatement; +import processing.mode.java.preproc.TextTransform.OffsetMapper; public class PreprocSketch { diff --git a/java/src/processing/mode/java/RuntimePathBuilder.java b/java/src/processing/mode/java/RuntimePathBuilder.java index 08b49e63a..33e8f209c 100644 --- a/java/src/processing/mode/java/RuntimePathBuilder.java +++ b/java/src/processing/mode/java/RuntimePathBuilder.java @@ -41,6 +41,7 @@ import processing.app.Messages; import processing.app.Sketch; import processing.app.SketchException; import processing.app.Util; +import processing.mode.java.preproc.ImportStatement; /** diff --git a/java/src/processing/mode/java/ImportStatement.java b/java/src/processing/mode/java/preproc/ImportStatement.java similarity index 99% rename from java/src/processing/mode/java/ImportStatement.java rename to java/src/processing/mode/java/preproc/ImportStatement.java index f5438bf33..68f8c20ac 100644 --- a/java/src/processing/mode/java/ImportStatement.java +++ b/java/src/processing/mode/java/preproc/ImportStatement.java @@ -18,7 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package processing.mode.java; +package processing.mode.java.preproc; import java.util.regex.MatchResult; import java.util.regex.Matcher; diff --git a/java/src/processing/mode/java/preproc/PdeIssueEmitter.java b/java/src/processing/mode/java/preproc/PdeIssueEmitter.java index 7e5b48c5a..01d510060 100644 --- a/java/src/processing/mode/java/preproc/PdeIssueEmitter.java +++ b/java/src/processing/mode/java/preproc/PdeIssueEmitter.java @@ -24,7 +24,6 @@ package processing.mode.java.preproc; import org.antlr.v4.runtime.BaseErrorListener; import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.Recognizer; -import processing.mode.java.SourceUtil; import java.util.Optional; diff --git a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java index 74c9f1496..fe3fd0c2d 100644 --- a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java +++ b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java @@ -30,12 +30,7 @@ import org.antlr.v4.runtime.misc.Interval; import org.antlr.v4.runtime.tree.ParseTree; -import processing.app.Base; -import processing.app.Preferences; import processing.core.PApplet; -import processing.mode.java.ImportStatement; -import processing.mode.java.SourceUtil; -import processing.mode.java.TextTransform; import processing.mode.java.preproc.PdePreprocessor.Mode; /** @@ -1062,7 +1057,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener { String newCode = String.format( "/* autogenerated by Processing revision %04d on %s */", - Base.getRevision(), + 1234, dateStr ); @@ -1237,21 +1232,21 @@ public class PdeParseTreeListener extends ProcessingBaseListener { { // assemble line with applet args StringJoiner argsJoiner = new StringJoiner(", "); - boolean shouldFullScreen = Preferences.getBoolean("export.application.present"); - shouldFullScreen = shouldFullScreen || Preferences.getBoolean("export.application.fullscreen"); - if (shouldFullScreen) { - argsJoiner.add("\"" + PApplet.ARGS_FULL_SCREEN + "\""); - - String bgColor = Preferences.get("run.present.bgcolor"); - argsJoiner.add("\"" + PApplet.ARGS_BGCOLOR + "=" + bgColor + "\""); - - if (Preferences.getBoolean("export.application.stop")) { - String stopColor = Preferences.get("run.present.stop.color"); - argsJoiner.add("\"" + PApplet.ARGS_STOP_COLOR + "=" + stopColor + "\""); - } else { - argsJoiner.add("\"" + PApplet.ARGS_HIDE_STOP + "\""); - } - } +// boolean shouldFullScreen = Preferences.getBoolean("export.application.present"); +// shouldFullScreen = shouldFullScreen || Preferences.getBoolean("export.application.fullscreen"); +// if (shouldFullScreen) { +// argsJoiner.add("\"" + PApplet.ARGS_FULL_SCREEN + "\""); +// +// String bgColor = Preferences.get("run.present.bgcolor"); +// argsJoiner.add("\"" + PApplet.ARGS_BGCOLOR + "=" + bgColor + "\""); +// +// if (Preferences.getBoolean("export.application.stop")) { +// String stopColor = Preferences.get("run.present.stop.color"); +// argsJoiner.add("\"" + PApplet.ARGS_STOP_COLOR + "=" + stopColor + "\""); +// } else { +// argsJoiner.add("\"" + PApplet.ARGS_HIDE_STOP + "\""); +// } +// } argsJoiner.add("\"" + sketchName + "\""); footerWriter.addCode(argsJoiner.toString()); diff --git a/java/src/processing/mode/java/preproc/PdePreprocessor.java b/java/src/processing/mode/java/preproc/PdePreprocessor.java index eb3f3946b..dc5273b7f 100644 --- a/java/src/processing/mode/java/preproc/PdePreprocessor.java +++ b/java/src/processing/mode/java/preproc/PdePreprocessor.java @@ -31,9 +31,7 @@ import java.util.Optional; import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeWalker; - -import processing.app.Preferences; -import processing.app.SketchException; +import processing.mode.java.preproc.SketchException; /** @@ -160,9 +158,9 @@ public class PdePreprocessor { } } - if (Preferences.getBoolean("preproc.substitute_unicode")) { - inProgram = substituteUnicode(inProgram); - } +// if (Preferences.getBoolean("preproc.substitute_unicode")) { +// inProgram = substituteUnicode(inProgram); +// } // Ensure ends with single newline while (inProgram.endsWith("\n")) { @@ -414,7 +412,7 @@ public class PdePreprocessor { */ public PdePreprocessor build() { final int effectiveTabSize = - tabSize.orElseGet(() -> Preferences.getInteger("editor.tabs.size")); + tabSize.orElseGet(() -> 4); final boolean effectiveIsTesting = isTesting.orElse(false); diff --git a/java/src/processing/mode/java/preproc/PreprocessIssueMessageSimplifier.java b/java/src/processing/mode/java/preproc/PreprocessIssueMessageSimplifier.java index 4e112d161..52e16757c 100644 --- a/java/src/processing/mode/java/preproc/PreprocessIssueMessageSimplifier.java +++ b/java/src/processing/mode/java/preproc/PreprocessIssueMessageSimplifier.java @@ -22,10 +22,6 @@ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package processing.mode.java.preproc; -import processing.app.Language; -import processing.app.Platform; -import processing.mode.java.SourceUtil; - import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; @@ -78,16 +74,8 @@ public class PreprocessIssueMessageSimplifier { * @return The template's contents prior to rendering. */ public static String getLocalStr(String stringName) { - String errStr; - String retStr; - - if (Platform.isAvailable()) { - errStr = Language.text("editor.status.error.syntax"); - retStr = Language.text(stringName); - } else { - errStr = DefaultErrorLocalStrSet.get().get("editor.status.error.syntax").orElse("Error"); - retStr = DefaultErrorLocalStrSet.get().get(stringName).orElse(stringName); - } + var errStr = DefaultErrorLocalStrSet.get().get("editor.status.error.syntax").orElse("Error"); + var retStr = DefaultErrorLocalStrSet.get().get(stringName).orElse(stringName); return String.format(errStr, retStr); } diff --git a/java/src/processing/mode/java/preproc/PreprocessorResult.java b/java/src/processing/mode/java/preproc/PreprocessorResult.java index 972abf1ac..575f4967a 100644 --- a/java/src/processing/mode/java/preproc/PreprocessorResult.java +++ b/java/src/processing/mode/java/preproc/PreprocessorResult.java @@ -25,9 +25,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import processing.mode.java.ImportStatement; -import processing.mode.java.TextTransform; - /** * Result of sketch Preprocessing. diff --git a/java/src/processing/mode/java/preproc/RewriteResult.java b/java/src/processing/mode/java/preproc/RewriteResult.java index 1a3c35a6a..6d50db4eb 100644 --- a/java/src/processing/mode/java/preproc/RewriteResult.java +++ b/java/src/processing/mode/java/preproc/RewriteResult.java @@ -2,8 +2,6 @@ package processing.mode.java.preproc; import java.util.List; -import processing.mode.java.TextTransform; - /** * Data structure describing the result of preprocessor rewrite. diff --git a/java/src/processing/mode/java/preproc/RewriteResultBuilder.java b/java/src/processing/mode/java/preproc/RewriteResultBuilder.java index 807a06b3e..959c837b3 100644 --- a/java/src/processing/mode/java/preproc/RewriteResultBuilder.java +++ b/java/src/processing/mode/java/preproc/RewriteResultBuilder.java @@ -3,8 +3,6 @@ package processing.mode.java.preproc; import java.util.ArrayList; import java.util.List; -import processing.mode.java.TextTransform; - /** * Builder to help create a {RewriteResult}. diff --git a/java/src/processing/mode/java/preproc/SketchException.java b/java/src/processing/mode/java/preproc/SketchException.java new file mode 100644 index 000000000..47a0bba53 --- /dev/null +++ b/java/src/processing/mode/java/preproc/SketchException.java @@ -0,0 +1,162 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2004-08 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.mode.java.preproc; + + +/** + * An exception with a line number attached that occurs + * during either pre-processing, compile, or run time. + */ +public class SketchException extends Exception { + protected String message; + protected int codeIndex; + protected int codeLine; + protected int codeColumn; + protected boolean showStackTrace; + + + public SketchException(String message) { + this(message, true); + } + + + public SketchException(String message, boolean showStackTrace) { + this(message, -1, -1, -1, showStackTrace); + } + + + public SketchException(String message, int file, int line) { + this(message, file, line, -1, true); + } + + + public SketchException(String message, int file, int line, int column) { + this(message, file, line, column, true); + } + + + public SketchException(String message, int file, int line, int column, + boolean showStackTrace) { + this.message = message; + this.codeIndex = file; + this.codeLine = line; + this.codeColumn = column; + this.showStackTrace = showStackTrace; + } + + + /** + * Override getMessage() in Throwable, so that I can set + * the message text outside the constructor. + */ + public String getMessage() { + return message; + } + + + public void setMessage(String message) { + this.message = message; + } + + + public int getCodeIndex() { + return codeIndex; + } + + + public void setCodeIndex(int index) { + codeIndex = index; + } + + + public boolean hasCodeIndex() { + return codeIndex != -1; + } + + + public int getCodeLine() { + return codeLine; + } + + + public void setCodeLine(int line) { + this.codeLine = line; + } + + + public boolean hasCodeLine() { + return codeLine != -1; + } + + + public void setCodeColumn(int column) { + this.codeColumn = column; + } + + + public int getCodeColumn() { + return codeColumn; + } + + + public void showStackTrace() { + showStackTrace = true; + } + + + public void hideStackTrace() { + showStackTrace = false; + } + + + public boolean isStackTraceEnabled() { + return showStackTrace; + } + + + /** + * Nix the java.lang crap out of an exception message + * because it scares the children. + *

+ * This function must be static to be used with super() + * in each of the constructors above. + */ + /* + static public final String massage(String msg) { + if (msg.indexOf("java.lang.") == 0) { + //int dot = msg.lastIndexOf('.'); + msg = msg.substring("java.lang.".length()); + } + return msg; + //return (dot == -1) ? msg : msg.substring(dot+1); + } + */ + + + public void printStackTrace() { + if (showStackTrace) { + super.printStackTrace(); + } + } +} diff --git a/java/src/processing/mode/java/SourceUtil.java b/java/src/processing/mode/java/preproc/SourceUtil.java similarity index 99% rename from java/src/processing/mode/java/SourceUtil.java rename to java/src/processing/mode/java/preproc/SourceUtil.java index bd464b869..015529616 100644 --- a/java/src/processing/mode/java/SourceUtil.java +++ b/java/src/processing/mode/java/preproc/SourceUtil.java @@ -1,4 +1,4 @@ -package processing.mode.java; +package processing.mode.java.preproc; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -12,7 +12,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import processing.mode.java.TextTransform.Edit; +import processing.mode.java.preproc.TextTransform.Edit; public class SourceUtil { diff --git a/java/src/processing/mode/java/TextTransform.java b/java/src/processing/mode/java/preproc/TextTransform.java similarity index 98% rename from java/src/processing/mode/java/TextTransform.java rename to java/src/processing/mode/java/preproc/TextTransform.java index 8861adbb4..77ae022f1 100644 --- a/java/src/processing/mode/java/TextTransform.java +++ b/java/src/processing/mode/java/preproc/TextTransform.java @@ -1,4 +1,4 @@ -package processing.mode.java; +package processing.mode.java.preproc; import java.util.ArrayList; import java.util.Collection; @@ -31,7 +31,7 @@ public class TextTransform { private int builtForLength; - TextTransform(CharSequence input) { + public TextTransform(CharSequence input) { this.input = input; } @@ -213,7 +213,7 @@ public class TextTransform { } - protected interface OffsetMapper { + public interface OffsetMapper { int getInputOffset(int outputOffset); int getOutputOffset(int inputOffset); OffsetMapper thenMapping(OffsetMapper mapper); diff --git a/java/src/processing/mode/java/runner/Runner.java b/java/src/processing/mode/java/runner/Runner.java index 9fec3bb10..15bf819fa 100644 --- a/java/src/processing/mode/java/runner/Runner.java +++ b/java/src/processing/mode/java/runner/Runner.java @@ -32,7 +32,6 @@ import processing.mode.java.JavaEditor; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Point; -import java.awt.Toolkit; import java.io.*; import java.net.ConnectException; import java.net.InetAddress; @@ -44,6 +43,7 @@ import com.sun.jdi.connect.*; import com.sun.jdi.connect.Connector.Argument; import com.sun.jdi.event.*; import com.sun.jdi.request.*; +import processing.mode.java.preproc.SketchException; /**