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