Would this mainly be on the DB layer? With intellij, theres a shortcut to auto-gen these fields, does this improve on that?
At compile time, does it overwrite the src or generate a new file? In the case of needing additional logic in a set/get method, can I override that? > On May 24, 2018, at 11:08 PM, Na Li <lina...@cloudera.com> wrote: > > Brian, > > That looks quite useful. We can give it a try. > > Cheers, > > Lina > >> On May 24, 2018, at 7:02 PM, Kalyan Kumar Kalvagadda <kkal...@cloudera.com> >> wrote: >> >> Brian, >> >> It will be helpful. I'm in the favor of it. >> >> >> *Thanks,Kalyan Kumar Kalvagadda* | Software Engineer >> t. (469) 279- <0000000000>5732 >> cloudera.com <https://www.cloudera.com> >> >> [image: Cloudera] <https://www.cloudera.com/> >> >> [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image: >> Cloudera on Facebook] <https://www.facebook.com/cloudera> [image: Cloudera >> on LinkedIn] <https://www.linkedin.com/company/cloudera> >> ------------------------------ >> >>> On Thu, May 24, 2018 at 2:54 PM, Brian Towles <btow...@cloudera.com> wrote: >>> >>> Howdy all, >>> >>> I was wondering what the teams thoughts are on using Lombok? >>> >>> https://projectlombok.org/ >>> >>> Lombok is a tool that uses annotations at *compile time* to dynamically >>> generate the boilerplate code for things like getters, setters, basic >>> constructors, toString, equals, etc... >>> There are no actual code changes to the source, so its not a traditional >>> generator. It uses the internal >>> To me it has been a very helpful time saver for coding and maintenance and >>> it allows for us to avoid missing things. >>> >>> A good look at how it works in IntelliJ and Eclipse is here: >>> https://www.javacodegeeks.com/2016/06/lombok-compile-time- >>> java-annotation-preprocessor-minimize-code-size.html >>> >>> But as a quick example of using this for a very simple class and a single >>> @Data annotation takes: >>> >>> package org.apache.sentry; >>> >>> import lombok.Data; >>> >>> @Data >>> public class SimpleBean { >>> private final String name; >>> private int age; >>> private double score; >>> private String[] tags; >>> } >>> >>> and turn it effectively into >>> >>> package org.apache.sentry; >>> >>> public class SimpleBean { >>> private final String name; >>> private int age; >>> private double score; >>> private String[] tags; >>> >>> @java.beans.ConstructorProperties({"name"}) >>> public SimpleBean(String name) { >>> this.name = name; >>> } >>> >>> public String getName() { >>> return this.name; >>> } >>> >>> public int getAge() { >>> return this.age; >>> } >>> >>> public double getScore() { >>> return this.score; >>> } >>> >>> public String[] getTags() { >>> return this.tags; >>> } >>> >>> public void setAge(int age) { >>> this.age = age; >>> } >>> >>> public void setScore(double score) { >>> this.score = score; >>> } >>> >>> public void setTags(String[] tags) { >>> this.tags = tags; >>> } >>> >>> public boolean equals(Object o) { >>> if (o == this) { >>> return true; >>> } >>> if (!(o instanceof SimpleBean)) { >>> return false; >>> } >>> final SimpleBean other = (SimpleBean) o; >>> if (!other.canEqual((Object) this)) { >>> return false; >>> } >>> final Object this$name = this.getName(); >>> final Object other$name = other.getName(); >>> if (this$name == null ? other$name != null : >>> !this$name.equals(other$name)) { >>> return false; >>> } >>> if (this.getAge() != other.getAge()) { >>> return false; >>> } >>> if (Double.compare(this.getScore(), other.getScore()) != 0) { >>> return false; >>> } >>> if (!java.util.Arrays.deepEquals(this.getTags(), other.getTags())) { >>> return false; >>> } >>> return true; >>> } >>> >>> public int hashCode() { >>> final int PRIME = 59; >>> int result = 1; >>> final Object $name = this.getName(); >>> result = result * PRIME + ($name == null ? 43 : $name.hashCode()); >>> result = result * PRIME + this.getAge(); >>> final long $score = Double.doubleToLongBits(this.getScore()); >>> result = result * PRIME + (int) ($score >>> 32 ^ $score); >>> result = result * PRIME + java.util.Arrays.deepHashCode( >>> this.getTags()); >>> return result; >>> } >>> >>> protected boolean canEqual(Object other) { >>> return other instanceof SimpleBean; >>> } >>> >>> public String toString() { >>> return "SimpleBean(name=" + this.getName() + ", age=" + >>> this.getAge() + ", score=" + this >>> .getScore() + ", tags=" + >>> java.util.Arrays.deepToString(this.getTags()) + ")"; >>> } >>> } >>> >>> >>> There are more helper functions in the library for things like Builders, >>> and Synchronized. >>> >>> What do you guys think about using this in Sentry? >>> >>> -=Brian >>> >>> -- >>> *Brian Towles* | Software Engineer >>> t. (512) 415- <0000000000>8105 e. btow...@cloudera.com <j...@cloudera.com> >>> cloudera.com <http://www.cloudera.com/> >>> >>> [image: Cloudera] <http://www.cloudera.com/> >>> >>> [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image: >>> Cloudera on Facebook] <https://www.facebook.com/cloudera> [image: Cloudera >>> on LinkedIn] <https://www.linkedin.com/company/cloudera> >>> ------------------------------ >>>