mirror of
https://github.com/processing/processing4.git
synced 2026-01-30 11:51:54 +01:00
Resolve rewrite of pixelDensity to settings.
Per https://github.com/processing/processing4/issues/58, pixelDensity should run in settings and currently results in failure if used in static context. This will rewrite pixelDensity into the setting section if found in static or settings context. Adds unit tests for both scenarios.
This commit is contained in:
@@ -52,6 +52,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
|
||||
private static final String VERSION_STR = "3.0.0";
|
||||
private static final String SIZE_METHOD_NAME = "size";
|
||||
private static final String PIXEL_DENSITY_METHOD_NAME = "pixelDensity";
|
||||
private static final String FULLSCREEN_METHOD_NAME = "fullScreen";
|
||||
private final int tabSize;
|
||||
|
||||
@@ -74,8 +75,10 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
private String sketchWidth;
|
||||
private String sketchHeight;
|
||||
private String sketchRenderer;
|
||||
private String pixelDensity;
|
||||
|
||||
private boolean sizeRequiresRewrite = false;
|
||||
private boolean pixelDensityRequiresRewrite = false;
|
||||
private boolean sizeIsFullscreen = false;
|
||||
private RewriteResult headerResult;
|
||||
private RewriteResult footerResult;
|
||||
@@ -310,6 +313,10 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
if (SIZE_METHOD_NAME.equals(methodName) || FULLSCREEN_METHOD_NAME.equals(methodName)) {
|
||||
handleSizeCall(ctx);
|
||||
}
|
||||
|
||||
if (PIXEL_DENSITY_METHOD_NAME.equals(methodName)) {
|
||||
handlePixelDensityCall(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -655,6 +662,35 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
}
|
||||
}
|
||||
|
||||
protected void handlePixelDensityCall(ParserRuleContext ctx) {
|
||||
ParserRuleContext testCtx = ctx.getParent()
|
||||
.getParent()
|
||||
.getParent()
|
||||
.getParent();
|
||||
|
||||
boolean isInGlobal =
|
||||
testCtx instanceof ProcessingParser.StaticProcessingSketchContext;
|
||||
|
||||
boolean isInSetup;
|
||||
if (!isInGlobal) {
|
||||
ParserRuleContext methodDeclaration = testCtx.getParent()
|
||||
.getParent();
|
||||
|
||||
isInSetup = isMethodSetup(methodDeclaration);
|
||||
} else {
|
||||
isInSetup = false;
|
||||
}
|
||||
|
||||
ParseTree argsContext = ctx.getChild(2);
|
||||
|
||||
if (isInGlobal || isInSetup) {
|
||||
pixelDensity = argsContext.getChild(0).getText();
|
||||
delete(ctx.start, ctx.stop);
|
||||
insertAfter(ctx.stop, "/* pixelDensity commented out by preprocessor */");
|
||||
pixelDensityRequiresRewrite = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a method declaration is for setup.
|
||||
*
|
||||
@@ -981,35 +1017,43 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
protected void writeExtraFieldsAndMethods(PrintWriterWithEditGen classBodyWriter,
|
||||
RewriteResultBuilder resultBuilder) {
|
||||
|
||||
if (!sizeRequiresRewrite) {
|
||||
if (!sizeRequiresRewrite && !pixelDensityRequiresRewrite) {
|
||||
return;
|
||||
}
|
||||
|
||||
String settingsOuterTemplate = indent1 + "public void settings() { %s }";
|
||||
|
||||
String settingsInner;
|
||||
if (sizeIsFullscreen) {
|
||||
String fullscreenInner = sketchRenderer == null ? "" : sketchRenderer;
|
||||
settingsInner = String.format("fullScreen(%s);", fullscreenInner);
|
||||
} else {
|
||||
StringBuilder settingsInner = new StringBuilder();
|
||||
|
||||
if (sketchWidth.isEmpty() || sketchHeight.isEmpty()) {
|
||||
return;
|
||||
if (sizeRequiresRewrite) {
|
||||
if (sizeIsFullscreen) {
|
||||
String fullscreenInner = sketchRenderer == null ? "" : sketchRenderer;
|
||||
settingsInner.append(String.format("fullScreen(%s);", fullscreenInner));
|
||||
} else {
|
||||
|
||||
if (sketchWidth.isEmpty() || sketchHeight.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
StringJoiner argJoiner = new StringJoiner(",");
|
||||
argJoiner.add(sketchWidth);
|
||||
argJoiner.add(sketchHeight);
|
||||
|
||||
if (sketchRenderer != null) {
|
||||
argJoiner.add(sketchRenderer);
|
||||
}
|
||||
|
||||
settingsInner.append(String.format("size(%s);", argJoiner.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
StringJoiner argJoiner = new StringJoiner(",");
|
||||
argJoiner.add(sketchWidth);
|
||||
argJoiner.add(sketchHeight);
|
||||
|
||||
if (sketchRenderer != null) {
|
||||
argJoiner.add(sketchRenderer);
|
||||
}
|
||||
|
||||
settingsInner = String.format("size(%s);", argJoiner.toString());
|
||||
if (pixelDensityRequiresRewrite) {
|
||||
settingsInner.append("\n");
|
||||
settingsInner.append(String.format("pixelDensity(%s);", pixelDensity));
|
||||
}
|
||||
|
||||
|
||||
String newCode = String.format(settingsOuterTemplate, settingsInner);
|
||||
String newCode = String.format(settingsOuterTemplate, settingsInner.toString());
|
||||
|
||||
classBodyWriter.addEmptyLine();
|
||||
classBodyWriter.addCodeLine(newCode);
|
||||
|
||||
Reference in New Issue
Block a user