Brian, This seems interesting. How does it interplay with IntelliJ/Eclipse ability to find all usages of the method - will we still be able to find all references to constructors/getters/setters e.t.c. ?
> On May 24, 2018, at 12: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> > ------------------------------