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) {
val refs = new JavaRefs()
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 => {
writeDoc(w, doc)
javaAnnotationHeader.foreach(w.wl)
......
......@@ -41,6 +41,7 @@ object Main {
var javaAnnotation: Option[String] = None
var javaNullableAnnotation: Option[String] = None
var javaNonnullAnnotation: Option[String] = None
var javaUseFinalForRecord: Boolean = true
var jniOutFolder: Option[File] = None
var jniHeaderOutFolderOptional: Option[File] = None
var jniNamespace: String = "djinni_generated"
......@@ -105,6 +106,8 @@ object Main {
.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))
.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("")
opt[File]("cpp-out").valueName("<out-folder>").foreach(x => cppOutFolder = Some(x))
.text("The output folder for C++ files (Generator disabled if unspecified).")
......@@ -276,6 +279,7 @@ object Main {
javaAnnotation,
javaNullableAnnotation,
javaNonnullAnnotation,
javaUseFinalForRecord,
cppOutFolder,
cppHeaderOutFolder,
cppIncludePrefix,
......
......@@ -35,6 +35,7 @@ package object generatorTools {
javaAnnotation: Option[String],
javaNullableAnnotation: Option[String],
javaNonnullAnnotation: Option[String],
javaUseFinalForRecord: Boolean,
cppOutFolder: Option[File],
cppHeaderOutFolder: Option[File],
cppIncludePrefix: String,
......
......@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class AssortedPrimitives {
public class AssortedPrimitives {
/*package*/ final boolean mB;
......
......@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/** Record returned by a client */
public final class ClientReturnedRecord {
public class ClientReturnedRecord {
/*package*/ final long mRecordId;
......
......@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/** Record for use in constants */
public final class ConstantRecord {
public class ConstantRecord {
/*package*/ final int mSomeInteger;
......
......@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/** Record containing constants */
public final class Constants {
public class Constants {
/** bool_constant has documentation. */
public static final boolean BOOL_CONSTANT = true;
......
......@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class DateRecord implements Comparable<DateRecord> {
public class DateRecord implements Comparable<DateRecord> {
/*package*/ final java.util.Date mCreatedAt;
......
......@@ -11,7 +11,7 @@ import javax.annotation.Nonnull;
* (Second line of multi-line documentation.
* Indented third line of multi-line documentation.)
*/
public final class EmptyRecord {
public class EmptyRecord {
public EmptyRecord(
......
......@@ -7,7 +7,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/** Extended record */
public final class ExtendedRecord {
public class ExtendedRecord {
@Nonnull
public static final ExtendedRecord EXTENDED_RECORD_CONST = new ExtendedRecord(
......
......@@ -7,7 +7,7 @@ import java.util.HashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class MapDateRecord {
public class MapDateRecord {
/*package*/ final HashMap<String, java.util.Date> mDatesById;
......
......@@ -8,7 +8,7 @@ import java.util.HashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class MapListRecord {
public class MapListRecord {
/*package*/ final ArrayList<HashMap<String, Long>> mMapList;
......
......@@ -7,7 +7,7 @@ import java.util.HashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class MapRecord {
public class MapRecord {
/*package*/ final HashMap<String, Long> mMap;
......
......@@ -8,7 +8,7 @@ import java.util.HashSet;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class NestedCollection {
public class NestedCollection {
/*package*/ final ArrayList<HashSet<String>> mSetList;
......
......@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class OptColorRecord {
public class OptColorRecord {
/*package*/ final Color mMyColor;
......
......@@ -7,7 +7,7 @@ import java.util.ArrayList;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class PrimitiveList {
public class PrimitiveList {
/*package*/ final ArrayList<Long> mList;
......
......@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class RecordWithDerivings implements Comparable<RecordWithDerivings> {
public class RecordWithDerivings implements Comparable<RecordWithDerivings> {
/*package*/ final int mKey1;
......
......@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class RecordWithDurationAndDerivings implements Comparable<RecordWithDurationAndDerivings> {
public class RecordWithDurationAndDerivings implements Comparable<RecordWithDurationAndDerivings> {
/*package*/ final java.time.Duration mDt;
......
......@@ -6,7 +6,7 @@ package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class RecordWithNestedDerivings implements Comparable<RecordWithNestedDerivings> {
public class RecordWithNestedDerivings implements Comparable<RecordWithNestedDerivings> {
/*package*/ final int mKey;
......
......@@ -7,7 +7,7 @@ import java.util.HashSet;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
public final class SetRecord {
public class SetRecord {
/*package*/ final HashSet<String> mSet;
......
......@@ -21,6 +21,7 @@ public class AllTests extends TestSuite {
mySuite.addTestSuite(PrimitivesTest.class);
mySuite.addTestSuite(TokenTest.class);
mySuite.addTestSuite(DurationTest.class);
mySuite.addTestSuite(MockRecordTest.class);
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
--java-package $java_package \
--java-nullable-annotation "javax.annotation.CheckForNull" \
--java-nonnull-annotation "javax.annotation.Nonnull" \
--java-use-final-for-record false \
--ident-java-field mFooBar \
\
--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