From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id YBoEE+J6kV/hTwAA0tVLHw (envelope-from ) for ; Thu, 22 Oct 2020 12:28:18 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id +Gs5DeJ6kV+qFwAAB5/wlQ (envelope-from ) for ; Thu, 22 Oct 2020 12:28:18 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id C1D059400C9 for ; Thu, 22 Oct 2020 12:28:16 +0000 (UTC) Received: from localhost ([::1]:36704 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kVZhW-0003bG-CE for larch@yhetil.org; Thu, 22 Oct 2020 08:28:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kVZdL-0008SP-OJ for emacs-orgmode@gnu.org; Thu, 22 Oct 2020 08:23:56 -0400 Received: from mail-ej1-f52.google.com ([209.85.218.52]:34790) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kVZdF-0002tI-FD for emacs-orgmode@gnu.org; Thu, 22 Oct 2020 08:23:53 -0400 Received: by mail-ej1-f52.google.com with SMTP id u8so2013676ejg.1 for ; Thu, 22 Oct 2020 05:23:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=KDotWTCpqWhwkASRy6zFU6OCRhnRjQkqOOiaiEfaXcg=; b=tay+VvlT25qEQBQmLBoA5AIoxiwV8SmHMTewZ3tJt7WmW5GTuN/pRYDV+uHDeUYQJ6 KUWbB7sV0p1gaX9r5v+hQFQsLBLhdzZrNEt/eadAJPmKtEBhNkkeS50JTc16OTyhaFaz pI1tKJDJFp7VRmSo21qmt73niFDeafV5AsMtHNnjdslvIB4zmOuqyq9doMuzRtCU1WEL YuGFZH7aOq4utd3Q0TTRJF0dA9h+rsxCUEbdLk27e1w/70LOVnRwGBX+laE4XbXWwtXD Z3RFGqh/KirilJjk+ad4bx1hE7eHpOAIWw39XzwWYO23cPpHIfs3Vt7OcdELCaxdW8uS X61Q== X-Gm-Message-State: AOAM531KLQ3kgOWaaQ60R+9yeeiMBDE6YANtKGhrIxP6YJWi76liCKT0 p3JU+prLRGvtaytQaB2WpWR7Bvz58drbgK78EwDsadUHCpQ= X-Google-Smtp-Source: ABdhPJxDljq7SXlCFIOnbxIlLFP6aXj2LhfQjXLT60V3sSEQ6BycL90zYMumSl/1FQ3o1Ohs0Cu+xTM4AeYykeng4Es= X-Received: by 2002:a17:906:abcf:: with SMTP id kq15mr1934001ejb.208.1603369425020; Thu, 22 Oct 2020 05:23:45 -0700 (PDT) MIME-Version: 1.0 References: <87h7qohfm8.fsf@gmail.com> <87d01cglvm.fsf@gmail.com> <87eelr1y7p.fsf@gmail.com> In-Reply-To: <87eelr1y7p.fsf@gmail.com> From: ian martins Date: Thu, 22 Oct 2020 08:23:33 -0400 Message-ID: Subject: Re: [PATCH] ob-java To: John Herrlin Content-Type: multipart/mixed; boundary="00000000000005cd0905b2418983" Received-SPF: pass client-ip=209.85.218.52; envelope-from=ianxm1@gmail.com; helo=mail-ej1-f52.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/22 08:23:45 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FORGED_FROMDOMAIN=0.25, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Org-Mode mailing list Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=jhu.edu (policy=none); spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: 1.69 X-TUID: DWh8pphefuWH --00000000000005cd0905b2418983 Content-Type: multipart/alternative; boundary="00000000000005cd0805b2418981" --00000000000005cd0805b2418981 Content-Type: text/plain; charset="UTF-8" Actually I realized if I keep the commits separate and generate a patch set instead of squashing then I can preserve authorship. These patches, which follow patch 0001, fix the spacing and allow non-public classes. Thanks again for testing, debugging, and reporting. On Wed, Oct 21, 2020 at 9:54 AM John Herrlin wrote: > > ian martins writes: > > >> > >> What do you think about having a configurable list where the user can > >> add =org-babel-java--import-maybe=? In my current use case I could then > >> add RxJava imports to that list and the imports could be removed from > >> the source code block. > > > > > > I think this can already be done. imports can be added to the headers, > and > > babel allows file-wide headers, so you could add a =#+HEADER: :import > > rx.Observable= line to the file and all source blocks would get it. it's > > slightly different in that =org-babel-java--import-maybe= skips imports > > that it thinks aren't needed. also if there are any non-java source > blocks > > in the same file, these imports could be added to them which would be > bad, > > so when mixing multiple languages in the same file this wouldn't be an > > option. > > Thanks for pointing that out! It work just fine! > > > > > NIT > >> Some spacing when writing =public static...= > >> > > > > Thanks for fixing the spacing. I don't think I can give you credit for > the > > patch, though, without leaving it out until ob-java is accepted. > > I dont need any credits, the important part is the result! > > I have made a couple of more runs and I cant find anything that doesnt > work! > > > > > On Wed, Oct 21, 2020 at 1:59 AM John Herrlin wrote: > > > >> > >> I did and it looks really good. The difference in this example: > >> > >> #+BEGIN_SRC java > >> import rx.Observable; > >> > >> Observable.range(5, 3) > >> .subscribe((Integer i) -> { System.out.println("Got: " + > i); }, > >> (Throwable t) -> { t.printStackTrace();}, > >> () -> { System.out.println("Ending > >> stream"); }); > >> #+END_SRC > >> > >> from the ones I posted yesterday is tremendous! > >> > >> I am not very experienced with Emacs lisp but I think it's pretty easy > >> to understand how things works and follow the code. The comments are > >> also of good help. I really appreciate the work you have done! > >> > >> > >> What do you think about having a configurable list where the user can > >> add =org-babel-java--import-maybe=? In my current use case I could then > >> add RxJava imports to that list and the imports could be removed from > >> the source code block. > >> > >> > >> NIT > >> > >> Some spacing when writing =public static...= > >> > >> #+BEGIN_SRC diff > >> diff --git a/lisp/ob-java.el b/lisp/ob-java.el > >> index 94c3f69cf..4f3904871 100644 > >> --- a/lisp/ob-java.el > >> +++ b/lisp/ob-java.el > >> @@ -220,7 +220,7 @@ RESULT-FILE is the temp file to write the > result." > >> (org-babel-java--move-past org-babel-java--class-re) > >> (insert "\n public static void main(String[] args) { > >> System.out.print(\"success\"); > >> -}\n\n")) > >> + }\n\n")) > >> > >> ;; special handling to return value > >> (when (eq result-type 'value) > >> #+END_SRC > >> > >> > >> > >> ian martins writes: > >> > >> > Thanks for testing, and thanks for pointing that out. I will fix it so > >> that > >> > `public` is optional. > >> > > >> > btw, in your example you didn't have to specify `:classname` since you > >> > defined the class name in the source block. > >> > > >> > btw2, did you notice that you can C-c C-c on source blocks that don't > >> have > >> > main methods and it'll compile without error? > >> > > >> > On Tue, Oct 20, 2020 at 3:17 PM John Herrlin > wrote: > >> > > >> >> > >> >> Hey, > >> >> > >> >> Did some debugging and found out that my class didn't contained > =public= > >> >> and the patch requires it to be. > >> >> > >> >> This works fine: > >> >> > >> >> #+HEADER: :classname Main > >> >> #+HEADER: :dir src > >> >> #+HEADER: :cmdline -classpath ./rxjava-1.3.8.jar:. > >> >> #+HEADER: :cmpflag -classpath ./rxjava-1.3.8.jar > >> >> #+BEGIN_SRC java :results output code > >> >> import rx.Observable; > >> >> public class Main { > >> >> public static void main(String[] args) { > >> >> Observable.range(5, 5) > >> >> .subscribe(System.out::println); > >> >> } > >> >> } > >> >> #+END_SRC > >> >> > >> >> > >> >> > >> >> > >> >> ian martins writes: > >> >> > >> >> > I noticed that the tests didn't run with "make test." This updates > the > >> >> > patch so that they can. I didn't add java to the list of default > >> >> languages > >> >> > because the java tests are slow. > >> >> > > >> >> > On Mon, Oct 5, 2020 at 9:23 AM ian martins wrote: > >> >> > > >> >> >> I wrote those examples in an org file so I could test as I wrote > >> them, > >> >> and > >> >> >> then exported it to make it more readable, but the export > resulted in > >> >> >> source block headers being lost. Here is the same without export: > >> >> >> ---- > >> >> >> * Changes > >> >> >> > >> >> >> - support for functional mode (~:results value~) > >> >> >> - accept variables > >> >> >> - don't require package, class, and main definitions > >> >> >> - write source and result tempfiles to > >> ~org-babel-temporary-directory~, > >> >> >> but respects the ~:dir~ header > >> >> >> - work with tramp > >> >> >> > >> >> >> * Examples > >> >> >> ** Example 1 > >> >> >> This outputs "hello." If class and main definitions aren't given > the > >> >> >> code block will be wrapped in generic ones. > >> >> >> > >> >> >> #+begin_src java :results output silent > >> >> >> System.out.print("hello"); > >> >> >> #+end_src > >> >> >> > >> >> >> This is exactly equivalent: > >> >> >> > >> >> >> #+begin_src java :results output silent > >> >> >> public class Main { > >> >> >> public static void main(String[] args) { > >> >> >> System.out.print("hello"); > >> >> >> } > >> >> >> } > >> >> >> #+end_src > >> >> >> > >> >> >> ** Example 2 > >> >> >> This also outputs "hello." > >> >> >> > >> >> >> #+begin_src java :results value silent > >> >> >> return "hello"; > >> >> >> #+end_src > >> >> >> > >> >> >> ** Example 3 > >> >> >> This generates the class "Example" in the package "org.orgmode" in > >> the > >> >> >> current directory. > >> >> >> > >> >> >> #+begin_src java :results output silent :classname > >> org.orgmode.Example > >> >> >> :dir . > >> >> >> System.out.print("hello, org-mode"); > >> >> >> #+end_src > >> >> >> > >> >> >> ** Example 4 > >> >> >> The "Hey" class defines a static method but no main. C-c C-c on > the > >> >> >> "Hey" source block will write "./org/orgmode/Hey.java" and compile > >> it. > >> >> >> > >> >> >> The "Main" class calls the "Hey" class. C-c C-c on the "Main" > source > >> >> >> block will write "./org/orgmode/Main.java" and compile and run it. > >> >> >> > >> >> >> #+begin_src java :results output silent :dir . > >> >> >> package org.orgmode; > >> >> >> > >> >> >> public class Hey { > >> >> >> public static String say() { > >> >> >> return "hey"; > >> >> >> } > >> >> >> } > >> >> >> #+end_src > >> >> >> > >> >> >> #+begin_src java :results output silent :dir . > >> >> >> package org.orgmode; > >> >> >> > >> >> >> public class Main { > >> >> >> public static void main(String[] args) { > >> >> >> System.out.print(Hey.say()); > >> >> >> } > >> >> >> } > >> >> >> #+end_src > >> >> >> > >> >> >> Instead of C-c C-c, we could have added tangle headers and written > >> the > >> >> >> source files out by tangling. > >> >> >> > >> >> >> ** Example 5 > >> >> >> This prints the variable from the header > >> >> >> > >> >> >> #+begin_src java :var msg="hello, org-mode" :results output silent > >> >> >> System.out.print(msg); > >> >> >> #+end_src > >> >> >> > >> >> >> ** Example 6 > >> >> >> This prints "hello, org-mode." The table is provided to the method > >> as a > >> >> >> list of lists. > >> >> >> > >> >> >> #+name: table > >> >> >> | message | hello, org-mode | > >> >> >> > >> >> >> #+begin_src java :var tbl=table :results output silent > >> >> >> System.out.print(tbl.get(0).get(1)); > >> >> >> #+end_src > >> >> >> > >> >> >> ** Example 7 > >> >> >> This example returns a list. > >> >> >> > >> >> >> Note that you're allowed to specify imports without defining the > >> class > >> >> >> or main methods. > >> >> >> > >> >> >> #+begin_src java :results value :exports both > >> >> >> import java.util.Arrays; > >> >> >> > >> >> >> return Arrays.asList("message", "hello, org-mode"); > >> >> >> #+end_src > >> >> >> > >> >> >> #+RESULTS: > >> >> >> | message | hello, org-mode | > >> >> >> > >> >> >> On Mon, Oct 5, 2020 at 8:35 AM ian martins wrote: > >> >> >> > >> >> >>> 1 Changes > >> >> >>> ========= > >> >> >>> > >> >> >>> - support for functional mode (`:results value') > >> >> >>> - accept variables > >> >> >>> - don't require package, class, and main definitions > >> >> >>> - write source and result tempfiles to > >> >> >>> `org-babel-temporary-directory', but respects the `:dir' > header > >> >> >>> - work with tramp > >> >> >>> > >> >> >>> > >> >> >>> 2 Examples > >> >> >>> ========== > >> >> >>> Some examples follow. See the tests for more examples. I'll > write > >> >> >>> proper docs after review. > >> >> >>> > >> >> >>> 2.1 Example 1 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> This outputs "hello." If class and main definitions aren't > given > >> the > >> >> >>> code block will be wrapped in generic ones. > >> >> >>> > >> >> >>> ,---- > >> >> >>> | System.out.print("hello"); > >> >> >>> `---- > >> >> >>> > >> >> >>> This is exactly equivalent: > >> >> >>> > >> >> >>> ,---- > >> >> >>> | public class Main { > >> >> >>> | public static void main(String[] args) { > >> >> >>> | System.out.print("hello"); > >> >> >>> | } > >> >> >>> | } > >> >> >>> `---- > >> >> >>> > >> >> >>> > >> >> >>> 2.2 Example 2 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> This also outputs "hello." > >> >> >>> > >> >> >>> ,---- > >> >> >>> | return "hello"; > >> >> >>> `---- > >> >> >>> > >> >> >>> > >> >> >>> 2.3 Example 3 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> This generates the class "Example" in the package > "org.orgmode" in > >> >> the > >> >> >>> current directory. > >> >> >>> > >> >> >>> ,---- > >> >> >>> | System.out.print("hello, org-mode"); > >> >> >>> `---- > >> >> >>> > >> >> >>> > >> >> >>> 2.4 Example 4 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> The "Hey" class defines a static method but no main. C-c C-c on > >> the > >> >> >>> "Hey" source block will write "./org/orgmode/Hey.java" and > compile > >> >> it. > >> >> >>> > >> >> >>> The "Main" class calls the "Hey" class. C-c C-c on the "Main" > >> source > >> >> >>> block will write "./org/orgmode/Main.java" and compile and run > it. > >> >> >>> > >> >> >>> ,---- > >> >> >>> | package org.orgmode; > >> >> >>> | > >> >> >>> | public class Hey { > >> >> >>> | public static String say() { > >> >> >>> | return "hey"; > >> >> >>> | } > >> >> >>> | } > >> >> >>> `---- > >> >> >>> > >> >> >>> ,---- > >> >> >>> | package org.orgmode; > >> >> >>> | > >> >> >>> | public class Main { > >> >> >>> | public static void main(String[] args) { > >> >> >>> | System.out.print(Hey.say()); > >> >> >>> | } > >> >> >>> | } > >> >> >>> `---- > >> >> >>> > >> >> >>> Instead of C-c C-c, we could have added tangle headers and > written > >> >> the > >> >> >>> source files out by tangling. > >> >> >>> > >> >> >>> > >> >> >>> 2.5 Example 5 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> This prints the variable from the header > >> >> >>> > >> >> >>> ,---- > >> >> >>> | System.out.print(msg); > >> >> >>> `---- > >> >> >>> > >> >> >>> > >> >> >>> 2.6 Example 6 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> This prints "hello, org-mode." The table is provided to the > >> method as > >> >> >>> a list of lists. > >> >> >>> > >> >> >>> message hello, org-mode > >> >> >>> > >> >> >>> ,---- > >> >> >>> | System.out.print(tbl.get(0).get(1)); > >> >> >>> `---- > >> >> >>> > >> >> >>> > >> >> >>> 2.7 Example 7 > >> >> >>> ~~~~~~~~~~~~~ > >> >> >>> > >> >> >>> This example returns a list. > >> >> >>> > >> >> >>> Note that you're allowed to specify imports without defining > the > >> >> class > >> >> >>> or main methods. > >> >> >>> > >> >> >>> ,---- > >> >> >>> | import java.util.Arrays; > >> >> >>> | > >> >> >>> | return Arrays.asList("message", "hello, org-mode"); > >> >> >>> `---- > >> >> >>> > >> >> >>> message hello, org-mode > >> >> >>> > >> >> >> > >> >> > >> > --00000000000005cd0805b2418981 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Actually I realized if I keep the commits separate an= d generate a patch set instead of squashing then I can preserve authorship.=

These patches, which follow patch 0001, fix the s= pacing and allow non-public classes.

Thanks again = for testing, debugging, and reporting.

On Wed, Oct 21, 2020 at 9:5= 4 AM John Herrlin <jherrlin@gmail.= com> wrote:

ian martins <ianxm@jh= u.edu> writes:

>>
>> What do you think about having a configurable list where the user = can
>> add =3Dorg-babel-java--import-maybe=3D? In my current use case I c= ould then
>> add RxJava imports to that list and the imports could be removed f= rom
>> the source code block.
>
>
> I think this can already be done. imports can be added to the headers,= and
> babel allows file-wide headers, so you could add a =3D#+HEADER: :impor= t
> rx.Observable=3D line to the file and all source blocks would get it.= =C2=A0 it's
> slightly different in that =3Dorg-babel-java--import-maybe=3D skips im= ports
> that it thinks aren't needed. also if there are any non-java sourc= e blocks
> in the same file, these imports could be added to them which would be = bad,
> so when mixing multiple languages in the same file this wouldn't b= e an
> option.

Thanks for pointing that out! It work just fine!

>
> NIT
>> Some spacing when writing =3Dpublic static...=3D
>>
>
> Thanks for fixing the spacing. I don't think I can give you credit= for the
> patch, though, without leaving it out until ob-java is accepted.

I dont need any credits, the important part is the result!

I have made a couple of more runs and I cant find anything that doesnt
work!

>
> On Wed, Oct 21, 2020 at 1:59 AM John Herrlin <jherrlin@gmail.com> wrote:
>
>>
>> I did and it looks really good. The difference in this example: >>
>>=C2=A0 =C2=A0 =C2=A0#+BEGIN_SRC java
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0import rx.Observable;
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0Observable.range(5, 3)
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0.subscribe((Integer i) -&g= t;=C2=A0 =C2=A0{ System.out.println("Got: " + i); },
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (Throwable t) -> { t.printStackTrace();},
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 () ->=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 { System.out.p= rintln("Ending
>> stream"); });
>>=C2=A0 =C2=A0 =C2=A0#+END_SRC
>>
>> from the ones I posted yesterday is tremendous!
>>
>> I am not very experienced with Emacs lisp but I think it's pre= tty easy
>> to understand how things works and follow the code. The comments a= re
>> also of good help. I really appreciate the work you have done!
>>
>>
>> What do you think about having a configurable list where the user = can
>> add =3Dorg-babel-java--import-maybe=3D? In my current use case I c= ould then
>> add RxJava imports to that list and the imports could be removed f= rom
>> the source code block.
>>
>>
>> NIT
>>
>> Some spacing when writing =3Dpublic static...=3D
>>
>>=C2=A0 =C2=A0 #+BEGIN_SRC diff
>>=C2=A0 =C2=A0 =C2=A0 diff --git a/lisp/ob-java.el b/lisp/ob-java.el=
>>=C2=A0 =C2=A0 =C2=A0 index 94c3f69cf..4f3904871 100644
>>=C2=A0 =C2=A0 =C2=A0 --- a/lisp/ob-java.el
>>=C2=A0 =C2=A0 =C2=A0 +++ b/lisp/ob-java.el
>>=C2=A0 =C2=A0 =C2=A0 @@ -220,7 +220,7 @@ RESULT-FILE is the temp fi= le to write the result."
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(org-babel-java--mo= ve-past org-babel-java--class-re)
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert "\n=C2= =A0 =C2=A0 public static void main(String[] args) {
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0System.out.p= rint(\"success\");
>>=C2=A0 =C2=A0 =C2=A0 -}\n\n"))
>>=C2=A0 =C2=A0 =C2=A0 +=C2=A0 =C2=A0 }\n\n"))
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; special handling to ret= urn value
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(when (eq result-type '= ;value)
>>=C2=A0 =C2=A0 #+END_SRC
>>
>>
>>
>> ian martins <ianxm@jhu.edu> writes:
>>
>> > Thanks for testing, and thanks for pointing that out. I will = fix it so
>> that
>> > `public` is optional.
>> >
>> > btw, in your example you didn't have to specify `:classna= me` since you
>> > defined the class name in the source block.
>> >
>> > btw2, did you notice that you can C-c C-c on source blocks th= at don't
>> have
>> > main methods and it'll compile without error?
>> >
>> > On Tue, Oct 20, 2020 at 3:17 PM John Herrlin <jherrlin@gmail.com> wrot= e:
>> >
>> >>
>> >> Hey,
>> >>
>> >> Did some debugging and found out that my class didn't= contained =3Dpublic=3D
>> >> and the patch requires it to be.
>> >>
>> >> This works fine:
>> >>
>> >>=C2=A0 =C2=A0 #+HEADER: :classname Main
>> >>=C2=A0 =C2=A0 #+HEADER: :dir src
>> >>=C2=A0 =C2=A0 #+HEADER: :cmdline -classpath ./rxjava-1.3.8= .jar:.
>> >>=C2=A0 =C2=A0 #+HEADER: :cmpflag -classpath ./rxjava-1.3.8= .jar
>> >>=C2=A0 =C2=A0 #+BEGIN_SRC java :results output code
>> >>=C2=A0 =C2=A0 =C2=A0 import rx.Observable;
>> >>=C2=A0 =C2=A0 =C2=A0 public class Main {
>> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 public static void main= (String[] args) {
>> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Observabl= e.range(5, 5)
>> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 .subscribe(System.out::println);
>> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
>> >>=C2=A0 =C2=A0 =C2=A0 }
>> >>=C2=A0 =C2=A0 #+END_SRC
>> >>
>> >>
>> >>
>> >>
>> >> ian martins <ianxm@jhu.edu> writes:
>> >>
>> >> > I noticed that the tests didn't run with "m= ake test." This updates the
>> >> > patch so that they can. I didn't add java to the= list of default
>> >> languages
>> >> > because the java tests are slow.
>> >> >
>> >> > On Mon, Oct 5, 2020 at 9:23 AM ian martins <ianxm@jhu.edu> wrote:<= br> >> >> >
>> >> >> I wrote those examples in an org file so I could= test as I wrote
>> them,
>> >> and
>> >> >> then exported it to make it more readable, but t= he export resulted in
>> >> >> source block headers being lost.=C2=A0 Here is t= he same without export:
>> >> >> ----
>> >> >> * Changes
>> >> >>
>> >> >> - support for functional mode (~:results value~)=
>> >> >> - accept variables
>> >> >> - don't require package, class, and main def= initions
>> >> >> - write source and result tempfiles to
>> ~org-babel-temporary-directory~,
>> >> >> but respects the ~:dir~ header
>> >> >> - work with tramp
>> >> >>
>> >> >> * Examples
>> >> >> ** Example 1
>> >> >> This outputs "hello."=C2=A0 If class a= nd main definitions aren't given the
>> >> >> code block will be wrapped in generic ones.
>> >> >>
>> >> >> #+begin_src java :results output silent
>> >> >>=C2=A0 =C2=A0System.out.print("hello");=
>> >> >> #+end_src
>> >> >>
>> >> >> This is exactly equivalent:
>> >> >>
>> >> >> #+begin_src java :results output silent
>> >> >>=C2=A0 =C2=A0public class Main {
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0public static void mai= n(String[] args) {
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0System.o= ut.print("hello");
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> >>=C2=A0 =C2=A0}
>> >> >> #+end_src
>> >> >>
>> >> >> ** Example 2
>> >> >> This also outputs "hello."
>> >> >>
>> >> >> #+begin_src java :results value silent
>> >> >>=C2=A0 =C2=A0return "hello";
>> >> >> #+end_src
>> >> >>
>> >> >> ** Example 3
>> >> >> This generates the class "Example" in = the package "org.orgmode" in
>> the
>> >> >> current directory.
>> >> >>
>> >> >> #+begin_src java :results output silent :classna= me
>> org.orgmode.Example
>> >> >> :dir .
>> >> >>=C2=A0 =C2=A0System.out.print("hello, org-mo= de");
>> >> >> #+end_src
>> >> >>
>> >> >> ** Example 4
>> >> >> The "Hey" class defines a static metho= d but no main. C-c C-c on the
>> >> >> "Hey" source block will write "./= org/orgmode/Hey.java" and compile
>> it.
>> >> >>
>> >> >> The "Main" class calls the "Hey&q= uot; class. C-c C-c on the "Main" source
>> >> >> block will write "./org/orgmode/Main.java&q= uot; and compile and run it.
>> >> >>
>> >> >> #+begin_src java :results output silent :dir . >> >> >>=C2=A0 =C2=A0package org.orgmode;
>> >> >>
>> >> >>=C2=A0 =C2=A0public class Hey {
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0public static String s= ay() {
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return &= quot;hey";
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> >>=C2=A0 =C2=A0}
>> >> >> #+end_src
>> >> >>
>> >> >> #+begin_src java :results output silent :dir . >> >> >>=C2=A0 =C2=A0package org.orgmode;
>> >> >>
>> >> >>=C2=A0 =C2=A0public class Main {
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0public static void mai= n(String[] args) {
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0System.o= ut.print(Hey.say());
>> >> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> >>=C2=A0 =C2=A0}
>> >> >> #+end_src
>> >> >>
>> >> >> Instead of C-c C-c, we could have added tangle h= eaders and written
>> the
>> >> >> source files out by tangling.
>> >> >>
>> >> >> ** Example 5
>> >> >> This prints the variable from the header
>> >> >>
>> >> >> #+begin_src java :var msg=3D"hello, org-mod= e" :results output silent
>> >> >>=C2=A0 =C2=A0System.out.print(msg);
>> >> >> #+end_src
>> >> >>
>> >> >> ** Example 6
>> >> >> This prints "hello, org-mode." The tab= le is provided to the method
>> as a
>> >> >> list of lists.
>> >> >>
>> >> >> #+name: table
>> >> >> | message | hello, org-mode=C2=A0 |
>> >> >>
>> >> >> #+begin_src java :var tbl=3Dtable :results outpu= t silent
>> >> >>=C2=A0 =C2=A0System.out.print(tbl.get(0).get(1));=
>> >> >> #+end_src
>> >> >>
>> >> >> ** Example 7
>> >> >> This example returns a list.
>> >> >>
>> >> >> Note that you're allowed to specify imports = without defining the
>> class
>> >> >> or main methods.
>> >> >>
>> >> >> #+begin_src java :results value :exports both >> >> >>=C2=A0 =C2=A0import java.util.Arrays;
>> >> >>
>> >> >>=C2=A0 =C2=A0return Arrays.asList("message&q= uot;, "hello, org-mode");
>> >> >> #+end_src
>> >> >>
>> >> >> #+RESULTS:
>> >> >> | message | hello, org-mode |
>> >> >>
>> >> >> On Mon, Oct 5, 2020 at 8:35 AM ian martins <<= a href=3D"mailto:ianxm@jhu.edu" target=3D"_blank">ianxm@jhu.edu> wro= te:
>> >> >>
>> >> >>> 1 Changes
>> >> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D
>> >> >>>
>> >> >>>=C2=A0 =C2=A0- support for functional mode (`= :results value')
>> >> >>>=C2=A0 =C2=A0- accept variables
>> >> >>>=C2=A0 =C2=A0- don't require package, cla= ss, and main definitions
>> >> >>>=C2=A0 =C2=A0- write source and result tempfi= les to
>> >> >>>=C2=A0 =C2=A0 =C2=A0`org-babel-temporary-dire= ctory', but respects the `:dir' header
>> >> >>>=C2=A0 =C2=A0- work with tramp
>> >> >>>
>> >> >>>
>> >> >>> 2 Examples
>> >> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> >> >>> Some examples follow.=C2=A0 See the tests fo= r more examples.=C2=A0 I'll write
>> >> >>> proper docs after review.
>> >> >>>
>> >> >>> 2.1 Example 1
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This outputs "hello."= =C2=A0 If class and main definitions aren't given
>> the
>> >> >>>=C2=A0 =C2=A0code block will be wrapped in ge= neric ones.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| System.out.print("hello&q= uot;);
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This is exactly equivalent:
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| public class Main {
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0public stat= ic void main(String[] args) {
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0System.out.print("hello");
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0}
>> >> >>>=C2=A0 =C2=A0| }
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>
>> >> >>> 2.2 Example 2
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This also outputs "hello.&q= uot;
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| return "hello";
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>
>> >> >>> 2.3 Example 3
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This generates the class "E= xample" in the package "org.orgmode" in
>> >> the
>> >> >>>=C2=A0 =C2=A0current directory.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| System.out.print("hello, = org-mode");
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>
>> >> >>> 2.4 Example 4
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0The "Hey" class define= s a static method but no main. C-c C-c on
>> the
>> >> >>>=C2=A0 =C2=A0"Hey" source block wil= l write "./org/orgmode/Hey.java" and compile
>> >> it.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0The "Main" class calls= the "Hey" class. C-c C-c on the "Main"
>> source
>> >> >>>=C2=A0 =C2=A0block will write "./org/org= mode/Main.java" and compile and run it.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| package org.orgmode;
>> >> >>>=C2=A0 =C2=A0|
>> >> >>>=C2=A0 =C2=A0| public class Hey {
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0public stat= ic String say() {
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0return "hey";
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0}
>> >> >>>=C2=A0 =C2=A0| }
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| package org.orgmode;
>> >> >>>=C2=A0 =C2=A0|
>> >> >>>=C2=A0 =C2=A0| public class Main {
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0public stat= ic void main(String[] args) {
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0System.out.print(Hey.say());
>> >> >>>=C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0}
>> >> >>>=C2=A0 =C2=A0| }
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>=C2=A0 =C2=A0Instead of C-c C-c, we could hav= e added tangle headers and written
>> >> the
>> >> >>>=C2=A0 =C2=A0source files out by tangling. >> >> >>>
>> >> >>>
>> >> >>> 2.5 Example 5
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This prints the variable from th= e header
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| System.out.print(msg);
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>
>> >> >>> 2.6 Example 6
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This prints "hello, org-mod= e." The table is provided to the
>> method as
>> >> >>>=C2=A0 =C2=A0a list of lists.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0 message=C2=A0 hello, org-mode >> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| System.out.print(tbl.get(0).ge= t(1));
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>
>> >> >>> 2.7 Example 7
>> >> >>> ~~~~~~~~~~~~~
>> >> >>>
>> >> >>>=C2=A0 =C2=A0This example returns a list.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0Note that you're allowed to = specify imports without defining the
>> >> class
>> >> >>>=C2=A0 =C2=A0or main methods.
>> >> >>>
>> >> >>>=C2=A0 =C2=A0,----
>> >> >>>=C2=A0 =C2=A0| import java.util.Arrays;
>> >> >>>=C2=A0 =C2=A0|
>> >> >>>=C2=A0 =C2=A0| return Arrays.asList("mes= sage", "hello, org-mode");
>> >> >>>=C2=A0 =C2=A0`----
>> >> >>>
>> >> >>>=C2=A0 =C2=A0 message=C2=A0 hello, org-mode >> >> >>>
>> >> >>
>> >>
>>
--00000000000005cd0805b2418981-- --00000000000005cd0905b2418983 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-ob-java.el-Allow-non-public-classes.patch" Content-Disposition: attachment; filename="0003-ob-java.el-Allow-non-public-classes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kgksi6od1 RnJvbSAwZjc1NDYxM2Y3Yjk2MTZlNmNjMWMyYmQzYjYxYTY1NTI3OTZlYTlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gTWFydGlucyA8aWFueG1Aamh1LmVkdT4KRGF0ZTogVGh1 LCAyMiBPY3QgMjAyMCAwNjo1NTo1OSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSBvYi1qYXZh LmVsOiBBbGxvdyBub24tcHVibGljIGNsYXNzZXMKCiogbGlzcC9vYi1qYXZhLmVsOiBEb24ndCBy ZXF1aXJlIGNsYXNzIGRlZmluaXRpb25zIHRvIGJlIGRlY2xhcmVkCnB1YmxpYy4KCiogdGVzdGlu Zy9saXNwL3Rlc3Qtb2ItamF2YS5lbDogQWRkIHRlc3Qgd2l0aCBub24tcHVibGljIGNsYXNzLgot LS0KIGxpc3Avb2ItamF2YS5lbCAgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KIHRlc3Rp bmcvbGlzcC90ZXN0LW9iLWphdmEuZWwgfCAxMiArKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdl ZCwgMTggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL29i LWphdmEuZWwgYi9saXNwL29iLWphdmEuZWwKaW5kZXggNjViOGMzZWJhLi5lYWViNzg4NDQgMTAw NjQ0Ci0tLSBhL2xpc3Avb2ItamF2YS5lbAorKysgYi9saXNwL29iLWphdmEuZWwKQEAgLTEyNSwy MiArMTI1LDIyIEBACiBMb29rIHRocm91Z2ggQk9EWSBmb3IgdGhlIHBhY2thZ2UgYW5kIGNsYXNz LiAgSWYgZm91bmQsIHB1dCB0aGVtCiB0b2dldGhlciBpbnRvIGEgZnVsbHkgcXVhbGlmaWVkIGNs YXNzIG5hbWUgYW5kIHJldHVybi4gIEVsc2UganVzdAogcmV0dXJuIGNsYXNzIG5hbWUuICBJZiB0 aGF0IGlzbid0IGZvdW5kIGVpdGhlciwgZGVmYXVsdCB0byBNYWluLiIKLSAgKGxldCAoKHBhY2th Z2UgKGlmIChzdHJpbmctbWF0Y2ggInBhY2thZ2UgXFxcKFteIF0qXFxcKTsiIGJvZHkpCisgIChs ZXQgKChwYWNrYWdlIChpZiAoc3RyaW5nLW1hdGNoIG9yZy1iYWJlbC1qYXZhLS1wYWNrYWdlLXJl IGJvZHkpCiAgICAgICAgICAgICAgICAgICAgICAobWF0Y2gtc3RyaW5nIDEgYm9keSkpKQotICAg ICAgICAoY2xhc3MgKGlmIChzdHJpbmctbWF0Y2ggInB1YmxpYyBjbGFzcyBcXFwoW14gXG5dKlxc XCkiIGJvZHkpCisgICAgICAgIChjbGFzcyAoaWYgKHN0cmluZy1tYXRjaCBvcmctYmFiZWwtamF2 YS0tY2xhc3MtcmUgYm9keSkKICAgICAgICAgICAgICAgICAgICAobWF0Y2gtc3RyaW5nIDEgYm9k eSkpKSkKICAgICAob3IgKGFuZCBwYWNrYWdlIGNsYXNzIChjb25jYXQgcGFja2FnZSAiLiIgY2xh c3MpKQogICAgICAgICAoYW5kIGNsYXNzIGNsYXNzKQogICAgICAgICAoYW5kIHBhY2thZ2UgKGNv bmNhdCBwYWNrYWdlICIuTWFpbiIpKQogICAgICAgICAiTWFpbiIpKSkKIAotKGRlZmNvbnN0IG9y Zy1iYWJlbC1qYXZhLS1wYWNrYWdlLXJlICJeW1s6c3BhY2U6XV0qcGFja2FnZSAuKjskIgorKGRl ZmNvbnN0IG9yZy1iYWJlbC1qYXZhLS1wYWNrYWdlLXJlICJeW1s6c3BhY2U6XV0qcGFja2FnZVtb OnNwYWNlOl1dK1xcXChbWzphbG51bTpdX1wuXStcXFwpOyQiCiAgICJSZWdleHAgZm9yIHRoZSBw YWNrYWdlIHN0YXRlbWVudC4iKQotKGRlZmNvbnN0IG9yZy1iYWJlbC1qYXZhLS1pbXBvcnRzLXJl ICJeW1s6c3BhY2U6XV0qaW1wb3J0IC4qOyQiCisoZGVmY29uc3Qgb3JnLWJhYmVsLWphdmEtLWlt cG9ydHMtcmUgIl5bWzpzcGFjZTpdXSppbXBvcnRbWzpzcGFjZTpdXStcXFwoW1s6YWxudW06XV9c Ll0rXFxcKTskIgogICAiUmVnZXhwIGZvciBpbXBvcnQgc3RhdGVtZW50cy4iKQotKGRlZmNvbnN0 IG9yZy1iYWJlbC1qYXZhLS1jbGFzcy1yZSAiXnB1YmxpYyBjbGFzcyBbWzphbG51bTpdX10rW1s6 c3BhY2U6XV0qXG4/W1s6c3BhY2U6XV0qeyIKKyhkZWZjb25zdCBvcmctYmFiZWwtamF2YS0tY2xh c3MtcmUgIl5bWzpzcGFjZTpdXSpcXFwoPzpwdWJsaWNbWzpzcGFjZTpdXStcXFwpP2NsYXNzW1s6 c3BhY2U6XV0rXFxcKFtbOmFsbnVtOl1fXStcXFwpW1s6c3BhY2U6XV0qXG4/W1s6c3BhY2U6XV0q eyIKICAgIlJlZ2V4cCBmb3IgdGhlIGNsYXNzIGRlY2xhcmF0aW9uLiIpCi0oZGVmY29uc3Qgb3Jn LWJhYmVsLWphdmEtLW1haW4tcmUgInB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1xcKD86 XFxbXVxcKT8gYXJnc1xcKD86XFxbXVxcKT8pLipcbj9bWzpzcGFjZTpdXSp7IgorKGRlZmNvbnN0 IG9yZy1iYWJlbC1qYXZhLS1tYWluLXJlICJwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdc XFwoPzpcXFtdXFxcKT9bWzpzcGFjZTpdXStbXiBdK1xcXCg/OlxcW11cXFwpPykuKlxuP1tbOnNw YWNlOl1dKnsiCiAgICJSZWdleHAgZm9yIHRoZSBtYWluIG1ldGhvZCBkZWNsYXJhdGlvbi4iKQog KGRlZmNvbnN0IG9yZy1iYWJlbC1qYXZhLS1hbnktbWV0aG9kLXJlICJwdWJsaWMgLiooLiopLipc bj9bWzpzcGFjZTpdXSp7IgogICAiUmVnZXhwIGZvciBhbnkgbWV0aG9kLiIpCmRpZmYgLS1naXQg YS90ZXN0aW5nL2xpc3AvdGVzdC1vYi1qYXZhLmVsIGIvdGVzdGluZy9saXNwL3Rlc3Qtb2ItamF2 YS5lbAppbmRleCAwOTBjNDAwODQuLmNiMDNjYWRhYyAxMDA2NDQKLS0tIGEvdGVzdGluZy9saXNw L3Rlc3Qtb2ItamF2YS5lbAorKysgYi90ZXN0aW5nL2xpc3AvdGVzdC1vYi1qYXZhLmVsCkBAIC0x MzcsNiArMTM3LDE4IEBAIHB1YmxpYyBjbGFzcyBTaW1wbGUgewogIytlbmRfc3JjIgogICAgKHNo b3VsZCAoc3RyaW5nPSAiNDIiIChvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2spKSkpKQogCiso ZXJ0LWRlZnRlc3Qgb2ItamF2YS9zaW1wbGUtd2l0aC1ub24tcHVibGljLWNsYXNzICgpCisgICJI ZWxsbyB3b3JsZCBwcm9ncmFtIHRoYXQgZGVmaW5lcyBhIG5vbi1wdWJsaWMgY2xhc3MuIgorICAo b3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQKKyAgICAgICIjK2JlZ2luX3NyYyBqYXZhIDpyZXN1bHRz IG91dHB1dCBzaWxlbnQKK2NsYXNzIFNpbXBsZSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1h aW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KDQyKTsKKyAgICB9 Cit9CisjK2VuZF9zcmMiCisgICAoc2hvdWxkIChzdHJpbmc9ICI0MiIgKG9yZy1iYWJlbC1leGVj dXRlLXNyYy1ibG9jaykpKSkpCisKIChlcnQtZGVmdGVzdCBvYi1qYXZhL3NpbXBsZS13aXRoLWNs YXNzLWFuZC1wYWNrYWdlICgpCiAgICJIZWxsbyB3b3JsZCBwcm9ncmFtIHRoYXQgZGVmaW5lcyBh IGNsYXNzIGFuZCBwYWNrYWdlLiIKICAgKG9yZy10ZXN0LXdpdGgtdGVtcC10ZXh0Ci0tIAoyLjI1 LjEKCg== --00000000000005cd0905b2418983 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-ob-java.el-Fix-spacing-in-generated-main-method.patch" Content-Disposition: attachment; filename="0002-ob-java.el-Fix-spacing-in-generated-main-method.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kgksi6np0 RnJvbSAyYjQ1OWQ1OWQwMDZjMTkwYzZiNzUxM2UxNzM3OGI2N2M4MTYyYmY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIEhlcnJsaW4gPGpoZXJybGluQGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyMiBPY3QgMjAyMCAwNjo1MjoyMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBv Yi1qYXZhLmVsOiBGaXggc3BhY2luZyBpbiBnZW5lcmF0ZWQgbWFpbiBtZXRob2QKCiogbGlzcC9v Yi1qYXZhLmVsOiBDb3JyZWN0IEluZGVudGF0aW9uIG9mIGNsb3NpbmcgY3VybHkgYnJhY2VzIHdo ZW4KdGhlIGRlZmF1bHQgbWFpbiBtZXRob2QgaXMgdXNlZC4KLS0tCiBsaXNwL29iLWphdmEuZWwg fCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRp ZmYgLS1naXQgYS9saXNwL29iLWphdmEuZWwgYi9saXNwL29iLWphdmEuZWwKaW5kZXggZTcwNGM1 NTUyLi42NWI4YzNlYmEgMTAwNjQ0Ci0tLSBhL2xpc3Avb2ItamF2YS5lbAorKysgYi9saXNwL29i LWphdmEuZWwKQEAgLTIxOCw3ICsyMTgsNyBAQCBSRVNVTFQtRklMRSBpcyB0aGUgdGVtcCBmaWxl IHRvIHdyaXRlIHRoZSByZXN1bHQuIgogICAgICAgKG9yZy1iYWJlbC1qYXZhLS1tb3ZlLXBhc3Qg b3JnLWJhYmVsLWphdmEtLWNsYXNzLXJlKQogICAgICAgKGluc2VydCAiXG4gICAgcHVibGljIHN0 YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50 KFwic3VjY2Vzc1wiKTsKLX1cblxuIikpCisgICAgfVxuXG4iKSkKIAogICAgIDs7IHNwZWNpYWwg aGFuZGxpbmcgdG8gcmV0dXJuIHZhbHVlCiAgICAgKHdoZW4gKGVxIHJlc3VsdC10eXBlICd2YWx1 ZSkKLS0gCjIuMjUuMQoK --00000000000005cd0905b2418983--