Commit c52e1b28 authored by Xianwen Chen's avatar Xianwen Chen Committed by Andrew Twyman

Add an option of generating non-final java class for record type.

parent c8b573a9
...@@ -211,7 +211,9 @@ class JavaGenerator(spec: Spec) extends Generator(spec) { ...@@ -211,7 +211,9 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
val refs = new JavaRefs() val refs = new JavaRefs()
r.fields.foreach(f => refs.find(f.ty)) r.fields.foreach(f => refs.find(f.ty))
val (javaName, javaFinal) = if (r.ext.java) (ident.name + "_base", "") else (ident.name, " final") val javaName = if (r.ext.java) (ident.name + "_base") else ident.name
val javaFinal = if (!r.ext.java && spec.javaUseFinalForRecord) " final" else ""
writeJavaFile(javaName, origin, refs.java, w => { writeJavaFile(javaName, origin, refs.java, w => {
writeDoc(w, doc) writeDoc(w, doc)
javaAnnotationHeader.foreach(w.wl) javaAnnotationHeader.foreach(w.wl)
......
...@@ -41,6 +41,7 @@ object Main { ...@@ -41,6 +41,7 @@ object Main {
var javaAnnotation: Option[String] = None var javaAnnotation: Option[String] = None
var javaNullableAnnotation: Option[String] = None var javaNullableAnnotation: Option[String] = None
var javaNonnullAnnotation: Option[String] = None var javaNonnullAnnotation: Option[String] = None
var javaUseFinalForRecord: Boolean = true
var jniOutFolder: Option[File] = None var jniOutFolder: Option[File] = None
var jniHeaderOutFolderOptional: Option[File] = None var jniHeaderOutFolderOptional: Option[File] = None
var jniNamespace: String = "djinni_generated" var jniNamespace: String = "djinni_generated"
...@@ -105,6 +106,8 @@ object Main { ...@@ -105,6 +106,8 @@ object Main {
.text("Java annotation (@Nullable) to place on all fields and return values that are optional") .text("Java annotation (@Nullable) to place on all fields and return values that are optional")
opt[String]("java-nonnull-annotation").valueName("<nonnull-annotation-class>").foreach(x => javaNonnullAnnotation = Some(x)) opt[String]("java-nonnull-annotation").valueName("<nonnull-annotation-class>").foreach(x => javaNonnullAnnotation = Some(x))
.text("Java annotation (@Nonnull) to place on all fields and return values that are not optional") .text("Java annotation (@Nonnull) to place on all fields and return values that are not optional")
opt[Boolean]("java-use-final-for-record").valueName("<use-final-for-record>").foreach(x => javaUseFinalForRecord = x)
.text("Whether generated Java classes for records should be marked 'final' (default: true). ")
note("") note("")
opt[File]("cpp-out").valueName("<out-folder>").foreach(x => cppOutFolder = Some(x)) opt[File]("cpp-out").valueName("<out-folder>").foreach(x => cppOutFolder = Some(x))
.text("The output folder for C++ files (Generator disabled if unspecified).") .text("The output folder for C++ files (Generator disabled if unspecified).")
...@@ -276,6 +279,7 @@ object Main { ...@@ -276,6 +279,7 @@ object Main {
javaAnnotation, javaAnnotation,
javaNullableAnnotation, javaNullableAnnotation,
javaNonnullAnnotation, javaNonnullAnnotation,
javaUseFinalForRecord,
cppOutFolder, cppOutFolder,
cppHeaderOutFolder, cppHeaderOutFolder,
cppIncludePrefix, cppIncludePrefix,
......
...@@ -35,6 +35,7 @@ package object generatorTools { ...@@ -35,6 +35,7 @@ package object generatorTools {
javaAnnotation: Option[String], javaAnnotation: Option[String],
javaNullableAnnotation: Option[String], javaNullableAnnotation: Option[String],
javaNonnullAnnotation: Option[String], javaNonnullAnnotation: Option[String],
javaUseFinalForRecord: Boolean,
cppOutFolder: Option[File], cppOutFolder: Option[File],
cppHeaderOutFolder: Option[File], cppHeaderOutFolder: Option[File],
cppIncludePrefix: String, cppIncludePrefix: String,
......
...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test; ...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class AssortedPrimitives { public class AssortedPrimitives {
/*package*/ final boolean mB; /*package*/ final boolean mB;
......
...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull; ...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
/** Record returned by a client */ /** Record returned by a client */
public final class ClientReturnedRecord { public class ClientReturnedRecord {
/*package*/ final long mRecordId; /*package*/ final long mRecordId;
......
...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull; ...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
/** Record for use in constants */ /** Record for use in constants */
public final class ConstantRecord { public class ConstantRecord {
/*package*/ final int mSomeInteger; /*package*/ final int mSomeInteger;
......
...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull; ...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
/** Record containing constants */ /** Record containing constants */
public final class Constants { public class Constants {
/** bool_constant has documentation. */ /** bool_constant has documentation. */
public static final boolean BOOL_CONSTANT = true; public static final boolean BOOL_CONSTANT = true;
......
...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test; ...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class DateRecord implements Comparable<DateRecord> { public class DateRecord implements Comparable<DateRecord> {
/*package*/ final java.util.Date mCreatedAt; /*package*/ final java.util.Date mCreatedAt;
......
...@@ -11,7 +11,7 @@ import javax.annotation.Nonnull; ...@@ -11,7 +11,7 @@ import javax.annotation.Nonnull;
* (Second line of multi-line documentation. * (Second line of multi-line documentation.
* Indented third line of multi-line documentation.) * Indented third line of multi-line documentation.)
*/ */
public final class EmptyRecord { public class EmptyRecord {
public EmptyRecord( public EmptyRecord(
......
...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull; ...@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
/** Extended record */ /** Extended record */
public final class ExtendedRecord { public class ExtendedRecord {
@Nonnull @Nonnull
public static final ExtendedRecord EXTENDED_RECORD_CONST = new ExtendedRecord( public static final ExtendedRecord EXTENDED_RECORD_CONST = new ExtendedRecord(
......
...@@ -7,7 +7,7 @@ import java.util.HashMap; ...@@ -7,7 +7,7 @@ import java.util.HashMap;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class MapDateRecord { public class MapDateRecord {
/*package*/ final HashMap<String, java.util.Date> mDatesById; /*package*/ final HashMap<String, java.util.Date> mDatesById;
......
...@@ -8,7 +8,7 @@ import java.util.HashMap; ...@@ -8,7 +8,7 @@ import java.util.HashMap;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class MapListRecord { public class MapListRecord {
/*package*/ final ArrayList<HashMap<String, Long>> mMapList; /*package*/ final ArrayList<HashMap<String, Long>> mMapList;
......
...@@ -7,7 +7,7 @@ import java.util.HashMap; ...@@ -7,7 +7,7 @@ import java.util.HashMap;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class MapRecord { public class MapRecord {
/*package*/ final HashMap<String, Long> mMap; /*package*/ final HashMap<String, Long> mMap;
......
...@@ -8,7 +8,7 @@ import java.util.HashSet; ...@@ -8,7 +8,7 @@ import java.util.HashSet;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class NestedCollection { public class NestedCollection {
/*package*/ final ArrayList<HashSet<String>> mSetList; /*package*/ final ArrayList<HashSet<String>> mSetList;
......
...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test; ...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class OptColorRecord { public class OptColorRecord {
/*package*/ final Color mMyColor; /*package*/ final Color mMyColor;
......
...@@ -7,7 +7,7 @@ import java.util.ArrayList; ...@@ -7,7 +7,7 @@ import java.util.ArrayList;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class PrimitiveList { public class PrimitiveList {
/*package*/ final ArrayList<Long> mList; /*package*/ final ArrayList<Long> mList;
......
...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test; ...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class RecordWithDerivings implements Comparable<RecordWithDerivings> { public class RecordWithDerivings implements Comparable<RecordWithDerivings> {
/*package*/ final int mKey1; /*package*/ final int mKey1;
......
...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test; ...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class RecordWithDurationAndDerivings implements Comparable<RecordWithDurationAndDerivings> { public class RecordWithDurationAndDerivings implements Comparable<RecordWithDurationAndDerivings> {
/*package*/ final java.time.Duration mDt; /*package*/ final java.time.Duration mDt;
......
...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test; ...@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class RecordWithNestedDerivings implements Comparable<RecordWithNestedDerivings> { public class RecordWithNestedDerivings implements Comparable<RecordWithNestedDerivings> {
/*package*/ final int mKey; /*package*/ final int mKey;
......
...@@ -7,7 +7,7 @@ import java.util.HashSet; ...@@ -7,7 +7,7 @@ import java.util.HashSet;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public final class SetRecord { public class SetRecord {
/*package*/ final HashSet<String> mSet; /*package*/ final HashSet<String> mSet;
......
...@@ -21,6 +21,7 @@ public class AllTests extends TestSuite { ...@@ -21,6 +21,7 @@ public class AllTests extends TestSuite {
mySuite.addTestSuite(PrimitivesTest.class); mySuite.addTestSuite(PrimitivesTest.class);
mySuite.addTestSuite(TokenTest.class); mySuite.addTestSuite(TokenTest.class);
mySuite.addTestSuite(DurationTest.class); mySuite.addTestSuite(DurationTest.class);
mySuite.addTestSuite(MockRecordTest.class);
return mySuite; return mySuite;
} }
......
package com.dropbox.djinni.test;
import junit.framework.TestCase;
class MockConstants extends Constants {
@Override
public String toString() {
return "MockConstants{}";
}
}
public class MockRecordTest extends TestCase {
public void testMockConstants() {
Constants mock = new MockConstants();
assertEquals("The toString() method should be overrided.", "MockConstants{}", mock.toString());
}
}
...@@ -64,6 +64,7 @@ fi ...@@ -64,6 +64,7 @@ fi
--java-package $java_package \ --java-package $java_package \
--java-nullable-annotation "javax.annotation.CheckForNull" \ --java-nullable-annotation "javax.annotation.CheckForNull" \
--java-nonnull-annotation "javax.annotation.Nonnull" \ --java-nonnull-annotation "javax.annotation.Nonnull" \
--java-use-final-for-record false \
--ident-java-field mFooBar \ --ident-java-field mFooBar \
\ \
--cpp-out "$temp_out_relative/cpp" \ --cpp-out "$temp_out_relative/cpp" \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment