diff options
author | Jiayu Liu <Jimexist@users.noreply.github.com> | 2022-05-06 03:19:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-05 15:19:57 -0400 |
commit | ada086529730b13eedb74a975db5167f405d18af (patch) | |
tree | 3311044cf35ddc4c9a45bd39d96eab4d74483268 /lib/java/src/main/java/org/apache/thrift | |
parent | 7fb21ebff73d6d1f87c67d7d0285ef39f704bce6 (diff) | |
download | thrift-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.java | 35 |
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); } |