diff --git a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java index 1fc5b5360..7cd0fee49 100644 --- a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java +++ b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java @@ -326,7 +326,22 @@ public class PdeParseTreeListener extends ProcessingBaseListener { String methodName = ctx.getChild(0).getText(); // Check if calling on something other than this. - //System.out.println(ctx.getParent()); + boolean impliedThis = ctx.getParent().getChildCount() == 1; + boolean usesThis; + if (impliedThis) { + usesThis = true; + } else { + String statmentTarget = ctx.getParent().getChild(0).getText(); + boolean explicitThis = statmentTarget.equals("this"); + boolean explicitSuper = statmentTarget.equals("super"); + usesThis = explicitThis || explicitSuper; + } + + // If not using this or super, no rewrite as the user is calling their own + // declaration or instance of PGraphics. + if (!usesThis) { + return; + } // If referring to the applet, check for rewrites. if (SIZE_METHOD_NAME.equals(methodName) || FULLSCREEN_METHOD_NAME.equals(methodName)) { @@ -663,7 +678,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener { } if (thisRequiresRewrite) { - delete(ctx.start, ctx.stop); + delete(ctx.getParent().start, ctx.getParent().stop); insertAfter(ctx.stop, "/* size commented out by preprocessor */"); sizeRequiresRewrite = true; } @@ -682,8 +697,8 @@ public class PdeParseTreeListener extends ProcessingBaseListener { pixelDensity = argsContext.getChild(0).getText(); - delete(ctx.start, ctx.stop); - insertAfter(ctx.stop, "/* pixelDensity commented out by preprocessor */"); + delete(ctx.getParent().start, ctx.getParent().stop); + insertAfter(ctx.getParent().stop, "/* pixelDensity commented out by preprocessor */"); pixelDensityRequiresRewrite = true; } @@ -698,8 +713,11 @@ public class PdeParseTreeListener extends ProcessingBaseListener { return; // User override of noSmooth. } - delete(ctx.start, ctx.stop); - insertAfter(ctx.stop, "/* noSmooth commented out by preprocessor */"); + delete(ctx.getParent().start, ctx.getParent().stop); + insertAfter( + ctx.getParent().stop, + "/* noSmooth commented out by preprocessor */" + ); noSmoothRequiresRewrite = true; } @@ -720,8 +738,11 @@ public class PdeParseTreeListener extends ProcessingBaseListener { smoothParam = ""; } - delete(ctx.start, ctx.stop); - insertAfter(ctx.stop, "/* smooth commented out by preprocessor */"); + delete(ctx.getParent().start, ctx.getParent().stop); + insertAfter( + ctx.getParent().stop, + "/* smooth commented out by preprocessor */" + ); smoothRequiresRewrite = true; } diff --git a/java/test/processing/mode/java/ParserTests.java b/java/test/processing/mode/java/ParserTests.java index 9d9a39e8d..7478bf9db 100644 --- a/java/test/processing/mode/java/ParserTests.java +++ b/java/test/processing/mode/java/ParserTests.java @@ -375,6 +375,11 @@ public class ParserTests { expectGood("smoothnoparam"); } + @Test + public void testSmoothThis() { + expectGood("smoothnoparamthis"); + } + @Test public void testSmoothWithParam() { expectGood("smoothparam"); @@ -390,9 +395,14 @@ public class ParserTests { expectGood("colorimport"); } - /*@Test + @Test public void testPGraphicsStandalone() { expectGood("pgraphics"); - }*/ + } + + @Test + public void testSizeThis() { + expectGood("sizethis"); + } } diff --git a/java/test/resources/pgraphics.expected b/java/test/resources/pgraphics.expected index e69de29bb..2432ab7a6 100644 --- a/java/test/resources/pgraphics.expected +++ b/java/test/resources/pgraphics.expected @@ -0,0 +1,37 @@ +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 pgraphics extends PApplet { + +PGraphics gfx; + + public void setup() { + + gfx = createGraphics(width, height); + gfx.smooth(); +} + + public void draw() { +} + + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "pgraphics" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/sizethis.expected b/java/test/resources/sizethis.expected new file mode 100644 index 000000000..5ff336a61 --- /dev/null +++ b/java/test/resources/sizethis.expected @@ -0,0 +1,45 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import processing.pdf.*; + +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 sizethis extends PApplet { + + + + public void setup() { + /* size commented out by preprocessor */; +} + + public void draw() { + // Draw something good here + line(0, 0, width/2, height); + + // Exit the program + println("Finished."); + exit(); +} + + + public void settings() { size(400,400,PDF,"filename.pdf"); } + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "sizethis" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/sizethis.pde b/java/test/resources/sizethis.pde new file mode 100644 index 000000000..5a1ecf638 --- /dev/null +++ b/java/test/resources/sizethis.pde @@ -0,0 +1,14 @@ +import processing.pdf.*; + +void setup() { + this.size(400, 400, PDF, "filename.pdf"); +} + +void draw() { + // Draw something good here + line(0, 0, width/2, height); + + // Exit the program + println("Finished."); + exit(); +} diff --git a/java/test/resources/smoothnoparamthis.expected b/java/test/resources/smoothnoparamthis.expected new file mode 100644 index 000000000..b22457aee --- /dev/null +++ b/java/test/resources/smoothnoparamthis.expected @@ -0,0 +1,42 @@ +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 smoothnoparamthis extends PApplet { + + public void setup(){ + /* size commented out by preprocessor */; + /* smooth commented out by preprocessor */; +} + + public void draw(){ + background(0); + fill(255,0,0); + ellipse(100,100,100,100); + fill(0,255,0); + ellipse(150,150,100,100); +} + + + public void settings() { size(300, 300, P2D); +smooth(); } + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "smoothnoparamthis" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/smoothnoparamthis.pde b/java/test/resources/smoothnoparamthis.pde new file mode 100644 index 000000000..a6cd900fa --- /dev/null +++ b/java/test/resources/smoothnoparamthis.pde @@ -0,0 +1,12 @@ +void setup(){ + size(300,300, P2D); + this.smooth(); +} + +void draw(){ + background(0); + fill(255,0,0); + ellipse(100,100,100,100); + fill(0,255,0); + ellipse(150,150,100,100); +}