summaryrefslogtreecommitdiff
path: root/lib/java/src/main/java/org/apache/thrift
diff options
context:
space:
mode:
authorJiayu Liu <Jimexist@users.noreply.github.com>2022-05-06 03:19:57 +0800
committerGitHub <noreply@github.com>2022-05-05 15:19:57 -0400
commitada086529730b13eedb74a975db5167f405d18af (patch)
tree3311044cf35ddc4c9a45bd39d96eab4d74483268 /lib/java/src/main/java/org/apache/thrift
parent7fb21ebff73d6d1f87c67d7d0285ef39f704bce6 (diff)
downloadthrift-ada086529730b13eedb74a975db5167f405d18af.tar.gz
THRIFT-5544: annotations_as_metadata java code gen param (#2553)
Add a java code generation parameter called "annotations_as_metadata" to optionally include Thrift field annotations as metadata in the generated code.
Diffstat (limited to 'lib/java/src/main/java/org/apache/thrift')
-rw-r--r--lib/java/src/main/java/org/apache/thrift/meta_data/FieldMetaData.java35
1 files changed, 25 insertions, 10 deletions
diff --git a/lib/java/src/main/java/org/apache/thrift/meta_data/FieldMetaData.java b/lib/java/src/main/java/org/apache/thrift/meta_data/FieldMetaData.java
index 753439045..5691f83e6 100644
--- a/lib/java/src/main/java/org/apache/thrift/meta_data/FieldMetaData.java
+++ b/lib/java/src/main/java/org/apache/thrift/meta_data/FieldMetaData.java
@@ -19,9 +19,14 @@
package org.apache.thrift.meta_data;
+import java.util.AbstractMap;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.thrift.TBase;
import org.apache.thrift.TFieldIdEnum;
@@ -42,18 +47,28 @@ public class FieldMetaData implements java.io.Serializable {
public final String fieldName;
public final byte requirementType;
public final FieldValueMetaData valueMetaData;
- private static final Map<Class<? extends TBase>, Map<? extends TFieldIdEnum, FieldMetaData>> structMap;
-
- static {
- structMap = new ConcurrentHashMap<Class<? extends TBase>, Map<? extends TFieldIdEnum, FieldMetaData>>();
- }
-
+ private final Map<String, String> fieldAnnotations;
+ private static final Map<Class<? extends TBase>, Map<? extends TFieldIdEnum, FieldMetaData>> structMap = new ConcurrentHashMap<>();
+
public FieldMetaData(String name, byte req, FieldValueMetaData vMetaData){
- this.fieldName = name;
- this.requirementType = req;
- this.valueMetaData = vMetaData;
+ this(name, req, vMetaData, Collections.emptyMap());
}
-
+
+ public FieldMetaData(String fieldName, byte requirementType, FieldValueMetaData valueMetaData, Map<String, String> fieldAnnotations) {
+ this.fieldName = fieldName;
+ this.requirementType = requirementType;
+ this.valueMetaData = valueMetaData;
+ this.fieldAnnotations = fieldAnnotations;
+ }
+
+ /**
+ * @return an unmodifiable view of the annotations for this field, empty if no annotations present or code gen param
+ * is not turned on
+ */
+ public Map<String, String> getFieldAnnotations() {
+ return Collections.unmodifiableMap(fieldAnnotations);
+ }
+
public static void addStructMetaDataMap(Class<? extends TBase> sClass, Map<? extends TFieldIdEnum, FieldMetaData> map){
structMap.put(sClass, map);
}