preprocessor decoupling

This commit is contained in:
Stef Tervelde
2024-12-09 13:06:57 +01:00
parent 1628d57b28
commit 4f68bcec09
26 changed files with 226 additions and 64 deletions

View File

@@ -19,6 +19,7 @@ sourceSets{
dependencies{
implementation(project(":app"))
implementation(project(":core"))
implementation(project(":java:preprocessor"))

View File

@@ -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}")
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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)) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;
/**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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.

View File

@@ -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.

View File

@@ -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}.

View File

@@ -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.
* <P>
* 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();
}
}
}

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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;
/**