Hi,

That was my idea: why not leveraging the JDK11 style here as we are
now based on JDK11+ ?

Thoughts ?

Regards
JB

On Thu, Oct 24, 2024 at 7:50 PM Alex Dutra
<alex.du...@dremio.com.invalid> wrote:
>
> Hi all,
>
> But aren't we now building on Java 11+? I think we could go one step ahead 
> and replace most of these Guava factory methods by List.of(), List.copyOf() 
> and the like – as long as the collection is not modified after. It's more 
> concise and saves us a Guava import.
>
> Thanks,
>
> Alex
>
> On Thu, Oct 24, 2024 at 7:21 PM rdb...@gmail.com <rdb...@gmail.com> wrote:
>>
>> It’s correct that these methods aren’t strictly needed. We could translate 
>> every case into a slightly different form:
>>
>> Lists.newArrayList() -> new ArrayList<>()
>> Lists.newArrayList(iter) -> new ArrayList(); Iterators.addAll(list, iter)
>> Lists.newArrayList(iterable) -> new ArrayList<>(); Iterators.addAll(list, 
>> iterable.iterator()
>> Lists.newArrayList(collection) -> new ArrayList<>(collection)
>> Lists.newArrayList(1, 2, 3) -> new ArrayList<>(); Collections.addAll(list, 
>> 1, 2, 3)
>>
>> You could make that argument for all syntactic sugar. These constructors are 
>> concise, clear, and avoid a bit of code that’s specific to the thing you’re 
>> converting to a list. That’s why this is part of the project’s style.
>>
>> I think there’s value here, but even if this were an arbitrary choice I 
>> don’t think there’s value in refactoring to avoid it. If and when these 
>> convenience methods are deprecated, we can always replace them with our own 
>> utility in iceberg-common and move on without a ton of changes.
>>
>> Ryan
>>
>>
>> On Thu, Oct 24, 2024 at 9:58 AM Jean-Baptiste Onofré <j...@nanthrax.net> 
>> wrote:
>>>
>>> Hi Eduard
>>>
>>> Yeah, I mean checkstyle (not spotless).
>>>
>>> AFAIR, I saw a couple of locations without the diamond syntax. Let me
>>> find it out. Maybe we can start with fixing there.
>>>
>>> Thanks !
>>> Regards
>>> JB
>>>
>>> On Thu, Oct 24, 2024 at 5:07 PM Eduard Tudenhöfner
>>> <etudenhoef...@apache.org> wrote:
>>> >
>>> > Hey JB,
>>> >
>>> > I don't think we're ever using e.g. Lists.newArrayList() without the 
>>> > diamond syntax in the codebase, so it's typically always List<String> 
>>> > list = Lists.newArrayList().
>>> > So I wonder how much of an issue that actually is? Do you have examples 
>>> > in the codebase that don't use the diamond syntax and is it worth 
>>> > updating the entire codebase?
>>> >
>>> >> to loosen the Lists/Maps/... enforcement in spotless)
>>> >
>>> >
>>> > FYI this is being enforced by checkstyle and was first introduced by 
>>> > https://github.com/apache/iceberg/pull/3689 in order to have a consistent 
>>> > style around collection instantiation.
>>> >
>>> > Thanks
>>> > Eduard
>>> >
>>> > On Thu, Oct 24, 2024 at 8:20 AM Jean-Baptiste Onofré <j...@nanthrax.net> 
>>> > wrote:
>>> >>
>>> >> Hi folks,
>>> >>
>>> >> We are using Guava for different "utils" methods. Especially, we are
>>> >> using Guava to create lists and maps. For instance, we do (and we
>>> >> force the use of):
>>> >>
>>> >> List myList = Lists.newArrayList();
>>> >>
>>> >> or
>>> >>
>>> >> Map myMap = Maps.newHashMap();
>>> >>
>>> >> If it was a good idea up to JDK7, these methods are now unnecessary,
>>> >> and the "regular" approach should be preferred in order to cleanly use
>>> >> the diamond syntax
>>> >> (https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html#type-inference-instantiation).
>>> >>
>>> >> The Guava Javadoc actually clearly states this:
>>> >> https://github.com/google/guava/blob/v33.3.1/guava/src/com/google/common/collect/Lists.java#L79
>>> >>
>>> >> So, I propose:
>>> >> - to loosen the Lists/Maps/... enforcement in spotless)
>>> >> - to refactore Iceberg to use JDK list and map constructors instead of
>>> >> Guava Lists/Maps/...
>>> >>
>>> >> I started the change, but as it's a pretty large one, I would like
>>> >> your feedback before completing the PR.
>>> >>
>>> >> Regards
>>> >> JB

Reply via email to