You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Pavel Melnikov (JIRA)" <ji...@apache.org> on 2019/03/05 07:02:00 UTC
[jira] [Comment Edited] (GROOVY-9014) printf does not respect "out"
property
[ https://issues.apache.org/jira/browse/GROOVY-9014?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16784166#comment-16784166 ]
Pavel Melnikov edited comment on GROOVY-9014 at 3/5/19 7:01 AM:
----------------------------------------------------------------
I've conjured up a minimal example, it works without any JSR223 or whatever:
test.groovy^!/jira/images/icons/link_attachment_7.gif|width=7,height=7!^
{{}}{{def stringWriter = new StringWriter()}}
{{out = new PrintWriter(stringWriter)}}
{{println "root println" // goes to out}}
{{printf "root printf\n" // goes to out}}
{{def t1 = {}}
{{ println "closure println" // goes to out}}
{{ this.println "closure this.println" // goes to out}}
{{ out.println "closure out.println" // goes to out}}
{{ printf "closure printf\n" // goes to stdout (bug here) !!}}
{{ this.printf "closure this.printf\n" //goes to out}}
{{ out.println "closure out.printf\n" // goes to out}}
{{}}}
{{t1()}}
{{System.out.println("\n====\nOutput that went to out:\n"+stringWriter.toString() )}}
was (Author: positron96):
I've conjured up a minimal example, it works without any JSR223 or whatever:
{{}}{{def stringWriter = new StringWriter()}}
{{out = new PrintWriter(stringWriter)}}
{{println "root println" // goes to out}}
{{printf "root printf\n" // goes to out}}
{{def t1 = {}}
{{ println "closure println" // goes to out}}
{{ this.println "closure this.println" // goes to out}}
{{ out.println "closure out.println" // goes to out}}
{{ printf "closure printf\n" // goes to stdout (bug here) !!}}
{{ this.printf "closure this.printf\n" //goes to out}}
{{ [^test.groovy]out.println "closure out.printf\n" // goes to out}}
{{}}}
{{t1()}}
{{System.out.println("\n====\nOutput that went to out:\n"+stringWriter.toString() )}}
> printf does not respect "out" property
> --------------------------------------
>
> Key: GROOVY-9014
> URL: https://issues.apache.org/jira/browse/GROOVY-9014
> Project: Groovy
> Issue Type: Bug
> Components: groovy-runtime
> Environment: Ubuntu 18.04.1,
> Reporter: Pavel Melnikov
> Priority: Major
> Attachments: test.groovy
>
>
> I am using groovy to run dynamic scripts from my Java application. I use JSR223 for this. I am overriding "out" property to redirect script stdout to my own consumer. However, I've noticed that *printf* inside closures does not respect that property (it always prints to stdout) while *println* perfectly complies (and prints to whatever specified).
>
> I beleive this is because of the differences in printf and println in DefaultGroovyMethods.java: in [https://github.com/apache/groovy/blob/master/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L849]
> println uses closure owner while printf does simple System.out.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)