google / callbuilder Goto Github PK
View Code? Open in Web Editor NEWMake a Java builder by defining one function.
License: Apache License 2.0
Make a Java builder by defining one function.
License: Apache License 2.0
Hey, I find this project occasionally, it's really a good idea.
But the wiki link seems broken, I've no idea how to use it.
Can anyone help to give a user guide doc?
Default values can be potentially supported by automatically calling a function before building:
@CallBuilder
Person person(String name, int age) {...}
void person_preBuild(PersonBuilder builder) {
if (builder.getAge() == 0) builder.setAge(30);
}
Where {methodName}_preBuild
is an optional method that is called by the build() method automatically if supplied.
There should probably be two release jars:
META-INF/services/javax.annotation.processing.Processor
with the class name of the processor implementationThe former can be added to the processor_path
while the latter can be added to the compile-time and run-time classpath, OR the former can be added to all three if you are not concerned about the size of your release jar.
It doesn't have to be a genrule
necessarily - just some automated, reproducible method for creating the jars.
Generated classes should be annotated with javax.annotation.Generated.
Similar to how AutoValue annotates its generated classes:
@ Generated("com.google.auto.value.processor.AutoValueProcessor")
Since all the builder classes that CallBuilder generates are currently dropped into the same namespace, there's a chance that class names will conflict.
To work around that, one can use a longer class name (perhaps prefixed with the name of the method that will be called). This could result, though, in very long class names.
Can you please enhance CallBuilder so that we can specify a sub-package in which the generated builder class will reside?
e.g.
package foo.bar;
class Baz {
CallBuilder(className="builder.GenerateQuxBuilder")
public static Qux generateQux();
}
will create foo.bar.builder.GenerateQuxBuilder
.
This can then be imported as GenerateQuxBuilder
with no risk of conflicts.
Alternatively, you can add an attribute to the annotation to specify the package name separately.
Having a release in maven central would be nice. :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.