I realize that I am trying to do something different, compile Java using
Groovy. I wonder if supporting this will open up a lot more usage of Groovy
(especially when doing AST transformations), which is exactly what I am
trying to do

Greedy is a solution, I think another way would be to use ; as a delimiter
when trying to compile java code. Is there a way to do this, some sort of
mixed compilation mode? The array problem listed is also a pain when
compiling java code (I suppose a simple regex can solve that). The last one
about static analysis, I just realized also works if I explicitly provide
the function generic types

class MyData ( String dataType; }
List<MyData> allMyData = []

// This is valid Java but wont compile in Groovy. The error is (getDataType
is not a valid method on Object)
Map<String, List<String>> myList =
allMyData.stream().collect(Collectors.groupingBy(data -> data.dataType ));
// It needs to be converted to this
Map<String, List<String>> myList =
allMyData.stream().collect(Collectors.<MyData, String> groupingBy(data ->
data.dataType) );

regards
Saravanan

On Sat, Nov 2, 2024 at 7:41 PM Christopher Smith <chry...@gmail.com> wrote:

> I suggest that the Groovy parser should be "greedier" in both of the
> return cases you showed. Furthermore, as this is a trap that's bitten me
> before, I propose that it should be a compile-time error to use a bare
> "return" statement in a method with a non-void return type; implied "return
> null" is almost never what the programmer intends.
>
> On Sat, Nov 2, 2024, 08:28 Saravanan Palanichamy <chava...@gmail.com>
> wrote:
>
>> Hello there
>>
>> I am compiling standard Java code with Groovy (it works for the most part
>> with some exceptions) and want to call out some differences. Is there a way
>> for me to auto fix these discrepancies with say a text pre-processor or
>> some AST parsing modifications?
>>
>> *Compile errors with new lines. *This snippet of code below will cause a
>> compile error with "Cannot find matching method
>> java.lang.String#positive()" on the line after the return statement. I
>> suppose this is because the parser thinks return blah is a statement by
>> itself
>>
>> @Override
>> public String toString() {
>>     return "blah"
>>         + "blah blah";
>> }
>>
>> *Unexpected behaviour with new lines.* This can cause other issues
>> unexpectedly. The following is valid java code, but it returns null in
>> Groovy instead of blah blah
>>
>>  @Override
>> public String toString() {
>>     return
>>         "blah blah";
>> }
>>
>> *Array constructs. *This is valid java code but will cause a compile
>> error in Groovy because arrays need to be created with [ ] instead of { }
>> enum MyEnum { ME, YOU, US }
>>
>> @MyEnums(value = {ME, YOU})
>> void function1() { ... }
>>
>>
>> *Static type checking for stream constructs. *
>>
>> class MyData ( String dataType; }
>> List<MyData> allMyData = []
>>
>> // This is valid Java but wont compile in Groovy. The error is
>> (getDataType is not a valid method on Object)
>> Map<String, List<String>> myList =
>> allMyData.stream().collect(Collectors.groupingBy(data -> data.dataType ));
>> // It needs to be converted to this
>> Map<String, List<String>> myList =
>> allMyData.stream().collect(Collectors.groupingBy { MyData data ->
>> data.dataType } );
>>
>> regards
>> Saravanan
>>
>

Reply via email to