mirror of
https://github.com/processing/processing4.git
synced 2026-03-15 00:47:39 +01:00
preprocessor decoupling
This commit is contained in:
@@ -19,6 +19,7 @@ sourceSets{
|
||||
dependencies{
|
||||
implementation(project(":app"))
|
||||
implementation(project(":core"))
|
||||
implementation(project(":java:preprocessor"))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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}")
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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}.
|
||||
|
||||
162
java/src/processing/mode/java/preproc/SketchException.java
Normal file
162
java/src/processing/mode/java/preproc/SketchException.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
@@ -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);
|
||||
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user