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