Skip to content

Commit

Permalink
Merge pull request dropbox#260 from avf/master
Browse files Browse the repository at this point in the history
Added command line option for specifying the access modifier for generated java classes
  • Loading branch information
artwyman authored Aug 9, 2016
2 parents fd141ea + b1a71fd commit e6a54da
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

public final class ItemList {
/*package*/ final class ItemList {


/*package*/ final ArrayList<String> mItems;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

public abstract class SortItems {
/*package*/ abstract class SortItems {
/** For the iOS / Android demo */
public abstract void sort(@Nonnull SortOrder order, @Nonnull ItemList items);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

public enum SortOrder {
/*package*/ enum SortOrder {
ASCENDING,
DESCENDING,
RANDOM,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

public abstract class TextboxListener {
/*package*/ abstract class TextboxListener {
public abstract void update(@Nonnull ItemList items);
}
1 change: 1 addition & 0 deletions example/run_djinni.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ fi
"$base_dir/../src/run-assume-built" \
--java-out "$temp_out/java" \
--java-package $java_package \
--java-class-access-modifier "package" \
--java-nullable-annotation "javax.annotation.CheckForNull" \
--java-nonnull-annotation "javax.annotation.Nonnull" \
--ident-java-field mFooBar \
Expand Down
9 changes: 5 additions & 4 deletions src/source/JavaGenerator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
val javaAnnotationHeader = spec.javaAnnotation.map(pkg => '@' + pkg.split("\\.").last)
val javaNullableAnnotation = spec.javaNullableAnnotation.map(pkg => '@' + pkg.split("\\.").last)
val javaNonnullAnnotation = spec.javaNonnullAnnotation.map(pkg => '@' + pkg.split("\\.").last)
val javaClassAccessModifierString = JavaAccessModifier.getCodeGenerationString(spec.javaClassAccessModifier)
val marshal = new JavaMarshal(spec)

class JavaRefs() {
Expand Down Expand Up @@ -109,7 +110,7 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
writeJavaFile(ident, origin, refs.java, w => {
writeDoc(w, doc)
javaAnnotationHeader.foreach(w.wl)
w.w(s"public enum ${marshal.typename(ident, e)}").braced {
w.w(s"${javaClassAccessModifierString}enum ${marshal.typename(ident, e)}").braced {
for (o <- e.options) {
writeDoc(w, o.doc)
w.wl(idJava.enum(o.ident) + ",")
Expand Down Expand Up @@ -139,7 +140,7 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
writeDoc(w, doc)

javaAnnotationHeader.foreach(w.wl)
w.w(s"public abstract class $javaClass$typeParamList").braced {
w.w(s"${javaClassAccessModifierString}abstract class $javaClass$typeParamList").braced {
val skipFirst = SkipFirst()
generateJavaConstants(w, i.consts)

Expand Down Expand Up @@ -212,7 +213,7 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
r.fields.foreach(f => refs.find(f.ty))

val javaName = if (r.ext.java) (ident.name + "_base") else ident.name
val javaFinal = if (!r.ext.java && spec.javaUseFinalForRecord) " final" else ""
val javaFinal = if (!r.ext.java && spec.javaUseFinalForRecord) "final " else ""

writeJavaFile(javaName, origin, refs.java, w => {
writeDoc(w, doc)
Expand All @@ -225,7 +226,7 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
} else {
""
}
w.w(s"public$javaFinal class ${self + javaTypeParams(params)}$comparableFlag").braced {
w.w(s"${javaClassAccessModifierString}${javaFinal}class ${self + javaTypeParams(params)}$comparableFlag").braced {
w.wl
generateJavaConstants(w, r.consts)
// Field definitions.
Expand Down
4 changes: 4 additions & 0 deletions src/source/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ object Main {
var cppUseWideStrings: Boolean = false
var javaOutFolder: Option[File] = None
var javaPackage: Option[String] = None
var javaClassAccessModifier: JavaAccessModifier.Value = JavaAccessModifier.Public
var javaCppException: Option[String] = None
var javaAnnotation: Option[String] = None
var javaNullableAnnotation: Option[String] = None
Expand Down Expand Up @@ -99,6 +100,8 @@ object Main {
.text("The output for the Java files (Generator disabled if unspecified).")
opt[String]("java-package").valueName("...").foreach(x => javaPackage = Some(x))
.text("The package name to use for generated Java classes.")
opt[JavaAccessModifier.Value]("java-class-access-modifier").valueName("<public/package>").foreach(x => javaClassAccessModifier = x)
.text("The access modifier to use for generated Java classes (default: public).")
opt[String]("java-cpp-exception").valueName("<exception-class>").foreach(x => javaCppException = Some(x))
.text("The type for translated C++ exceptions in Java (default: java.lang.RuntimeException that is not checked)")
opt[String]("java-annotation").valueName("<annotation-class>").foreach(x => javaAnnotation = Some(x))
Expand Down Expand Up @@ -277,6 +280,7 @@ object Main {
val outSpec = Spec(
javaOutFolder,
javaPackage,
javaClassAccessModifier,
javaIdentStyle,
javaCppException,
javaAnnotation,
Expand Down
15 changes: 15 additions & 0 deletions src/source/generator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ package object generatorTools {
case class Spec(
javaOutFolder: Option[File],
javaPackage: Option[String],
javaClassAccessModifier: JavaAccessModifier.Value,
javaIdentStyle: JavaIdentStyle,
javaCppException: Option[String],
javaAnnotation: Option[String],
Expand Down Expand Up @@ -138,6 +139,20 @@ package object generatorTools {
}
}

object JavaAccessModifier extends Enumeration {
val Public = Value("public")
val Package = Value("package")

def getCodeGenerationString(javaAccessModifier: JavaAccessModifier.Value): String = {
javaAccessModifier match {
case Public => "public "
case Package => "/*package*/ "
}
}

}
implicit val javaAccessModifierReads: scopt.Read[JavaAccessModifier.Value] = scopt.Read.reads(JavaAccessModifier withName _)

final case class SkipFirst() {
private var first = true

Expand Down

0 comments on commit e6a54da

Please sign in to comment.