So users who wish to download our code will need to read some documentation
on how to setup IDEA/Eclipse before they can compile. It's not a simple
"import and work with default IDEA setup" now.

+0 on this. Personally I would prefer to bear with the extra getter/setters
than giving new contributors more headache at startup.

On Thu, Nov 8, 2018 at 5:10 PM Udo Kohlmeyer <u...@apache.org> wrote:

> As an informative comparison on conciseness offering same functionality:
>
> Java Code:
>
> import java.io.Serializable; import lombok.Getter; import
> org.apache.geode.cache.configuration.CacheConfig.GatewayReceiver; import
> org.apache.geode.cache.configuration.DeclarableType; /** * This class
> stores the arguments provided in the create
> gateway-receiver command. */ @Getter public class
> GatewayReceiverFunctionArgsimplements Serializable {
>     private static final long serialVersionUID = -5158224572470173267L;
> private final BooleanmanualStart; private final IntegerstartPort; private
> final IntegerendPort; private final StringbindAddress; private final
> IntegersocketBufferSize; private final IntegermaximumTimeBetweenPings;
> private final String[]gatewayTransportFilters; private final
> StringhostnameForSenders; private final BooleanifNotExists; public
> GatewayReceiverFunctionArgs(GatewayReceiver configuration, Boolean
> ifNotExists) {
>        this.manualStart = configuration.isManualStart(); this.startPort =
>           configuration.getStartPort() !=null ?
> Integer.valueOf(configuration.getStartPort()) :null; this.endPort =
>           configuration.getEndPort() !=null ?
> Integer.valueOf(configuration.getEndPort()) :null; this.bindAddress =
> configuration.getBindAddress(); this.socketBufferSize =
> configuration.getSocketBufferSize() !=null ?
> Integer.valueOf(configuration.getSocketBufferSize()) :null;
> this.maximumTimeBetweenPings = configuration.getMaximumTimeBetweenPings()
> !=null ? Integer.valueOf(configuration.getMaximumTimeBetweenPings()) :null;
> this.gatewayTransportFilters = configuration.getGatewayTransportFilter()
> !=null ?
> configuration.getGatewayTransportFilter().stream().map(DeclarableType::getClassName)
>           .toArray(String[]::new)
>           :null; this.hostnameForSenders =
> configuration.getHostnameForSenders(); this.ifNotExists = ifNotExists; }
> }
>
> The equivalent Kotlin definition is:
>
> import org.apache.geode.cache.configuration.CacheConfig
> import org.apache.geode.cache.configuration.ClassWithParametersType
> import java.io.Serializable
>
> data class GatewayReceiverFunctionArgs
> @JvmOverloads private constructor(val manualStart: Boolean, val startPort:
> Int?, val endPort: Int?, val bindAddress: String, val socketBufferSize:
> Int?, val maximumTimeBetweenPings: Int?, val gatewayTransportFilters:
> Array<String>, val hostNameForSender: String, val ifNotExists: Boolean) :
> Serializable{
>
>      constructor(configuration: CacheConfig.GatewayReceiver, ifNotExists:
> Boolean) :
>          this(configuration.isManualStart,
> configuration.startPort?.toInt(), configuration.endPort?.toInt(),
> configuration.bindAddress, configuration.socketBufferSize?.toInt(),
> configuration.maximumTimeBetweenPings?.toInt(),
> configuration.gatewayTransportFilter ?.map { classWithParametersType:
> ClassWithParametersType-> classWithParametersType.className }
> ?.toTypedArray<String>()
>                  ?:emptyArray(), configuration.hostnameForSenders,
> ifNotExists)
>
>
>      companion object {
>          @JvmStatic val serialVersionUID = -5158224572470173267L }
> }
>
>
> On 11/8/18 12:02, Aditya Anchuri wrote:
> > I've only touched a few classes in my PR, but I feel like there's a lot
> > more boilerplate floating around that can be removed. Having said that, I
> > agree with your point regarding Kotlin, but for the Java code I would
> find
> > Lombok pretty useful. Have included a link to the PR:
> >
> > https://github.com/apache/geode/pull/2815
> >
> > -Aditya
> >
> >
> >
> > On Thu, Nov 8, 2018 at 11:24 AM Udo Kohlmeyer <u...@apache.org> wrote:
> >
> >> The Spring world/community are heavy users of Lombok.
> >>
> >> In essence it is "nice", BUT it does now add a new dependency on a
> >> library that is to provide functionality that developers should provide.
> >> IJ Idea does provide support for Lombok.
> >>
> >> I have not yet seen any code bloat that Lombok could reduce for us.
> >> Also, the reduction is only in terms of "visible", the compiled class
> >> might be more verbose.
> >>
> >> Kotlin on the other hand, as some of the boilerplate code built in as a
> >> language feature. I prefer that over choosing a library, that might have
> >> compatibility issues in the future.
> >>
> >> Also, Kotlin's conciseness is also a language feature rather than
> >> library plugin. I've also seen cases where compiled Java was larger than
> >> the equivalent compiled Kotlin code.
> >>
> >> --Udo
> >>
> >>
> >> On 11/8/18 10:31, Aditya Anchuri wrote:
> >>> Hi everyone,
> >>>
> >>> I am considering adding Lombok as a compile-time dependency (
> >>> https://projectlombok.org/) so we can reduce the amount of boilerplate
> >> code
> >>> and reduce the size of some of our classes. I have a small proof of
> >> concept
> >>> PR ready to go. Before I do so, I want to find out if people have tried
> >> it
> >>> before and how they feel about it, especially when used with IDEs like
> >>> IntelliJ and/or Eclipse?
> >>>
> >>> Thanks,
> >>> -Aditya
> >>>
> >>
>
>

-- 
Cheers

Jinmei

Reply via email to