diff --git a/src/main/java/org/redkale/annotation/ConstructorParameters.java b/src/main/java/org/redkale/annotation/ConstructorParameters.java index 186a0a1ff..420fd06cf 100644 --- a/src/main/java/org/redkale/annotation/ConstructorParameters.java +++ b/src/main/java/org/redkale/annotation/ConstructorParameters.java @@ -5,9 +5,10 @@ */ package org.redkale.annotation; +import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.RUNTIME; +import org.redkale.asm.AsmDepends; /** * 类似java.beans.ConstructorProperties, 必须配合Creator使用 @@ -20,6 +21,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Documented @Target({METHOD, CONSTRUCTOR}) @Retention(RUNTIME) +@AsmDepends public @interface ConstructorParameters { String[] value(); diff --git a/src/main/java/org/redkale/asm/AsmDepends.java b/src/main/java/org/redkale/asm/AsmDepends.java new file mode 100644 index 000000000..86ef3c84e --- /dev/null +++ b/src/main/java/org/redkale/asm/AsmDepends.java @@ -0,0 +1,25 @@ +/* + * + */ +package org.redkale.asm; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.*; + +/** + * 被标记的元素表示会被asm动态字节码调用到 + * + *

+ * 详情见: https://redkale.org + * + * + * @author zhangjx + * @since 2.8.0 + */ +@Documented +@Target({TYPE, METHOD, FIELD}) +@Retention(SOURCE) +public @interface AsmDepends { + +} diff --git a/src/main/java/org/redkale/convert/Decodeable.java b/src/main/java/org/redkale/convert/Decodeable.java index be197771c..fff9ba86e 100644 --- a/src/main/java/org/redkale/convert/Decodeable.java +++ b/src/main/java/org/redkale/convert/Decodeable.java @@ -6,6 +6,7 @@ package org.redkale.convert; import java.lang.reflect.Type; +import org.redkale.asm.AsmDepends; /** * 反序列化操作类 @@ -17,6 +18,7 @@ import java.lang.reflect.Type; * @param Reader输入的子类 * @param 反解析的数据类型 */ +@AsmDepends public interface Decodeable { /** diff --git a/src/main/java/org/redkale/convert/Encodeable.java b/src/main/java/org/redkale/convert/Encodeable.java index 06d60a4c3..f279f07c2 100644 --- a/src/main/java/org/redkale/convert/Encodeable.java +++ b/src/main/java/org/redkale/convert/Encodeable.java @@ -6,6 +6,7 @@ package org.redkale.convert; import java.lang.reflect.Type; +import org.redkale.asm.AsmDepends; /** * 序列化操作类 @@ -17,6 +18,7 @@ import java.lang.reflect.Type; * @param Writer输出的子类 * @param 序列化的数据类型 */ +@AsmDepends public interface Encodeable { /** diff --git a/src/main/java/org/redkale/convert/Writer.java b/src/main/java/org/redkale/convert/Writer.java index c2977a3bb..7aedcb6e6 100644 --- a/src/main/java/org/redkale/convert/Writer.java +++ b/src/main/java/org/redkale/convert/Writer.java @@ -7,6 +7,7 @@ package org.redkale.convert; import java.lang.reflect.*; import java.util.function.*; +import org.redkale.asm.AsmDepends; import org.redkale.util.*; /** @@ -118,6 +119,7 @@ public abstract class Writer { * * @param clazz 对象的类名 */ + @AsmDepends public final void writeObjectNull(final Class clazz) { writeClassName(null); writeNull(); diff --git a/src/main/java/org/redkale/convert/json/JsonWriter.java b/src/main/java/org/redkale/convert/json/JsonWriter.java index fb8136632..c903262dc 100644 --- a/src/main/java/org/redkale/convert/json/JsonWriter.java +++ b/src/main/java/org/redkale/convert/json/JsonWriter.java @@ -6,6 +6,7 @@ package org.redkale.convert.json; import java.lang.reflect.Type; +import org.redkale.asm.AsmDepends; import org.redkale.convert.*; /** @@ -34,6 +35,7 @@ public abstract class JsonWriter extends Writer { return this; } + @AsmDepends public boolean isExtFuncEmpty() { return this.objExtFunc == null && this.objFieldFunc == null; } @@ -63,42 +65,57 @@ public abstract class JsonWriter extends Writer { * @param quote 是否加双引号 * @param value 非null且不含需要转义的字符的String值 */ + @AsmDepends public abstract void writeLatin1To(final boolean quote, final String value); + @AsmDepends public abstract void writeFieldShortValue(final byte[] fieldBytes, final short value); + @AsmDepends public abstract void writeFieldIntValue(final byte[] fieldBytes, final int value); + @AsmDepends public abstract void writeFieldLongValue(final byte[] fieldBytes, final long value); + @AsmDepends public abstract void writeFieldLatin1Value(final byte[] fieldBytes, final String value); + @AsmDepends public abstract void writeLastFieldShortValue(final byte[] fieldBytes, final short value); + @AsmDepends public abstract void writeLastFieldIntValue(final byte[] fieldBytes, final int value); + @AsmDepends public abstract void writeLastFieldLongValue(final byte[] fieldBytes, final long value); + @AsmDepends public abstract void writeLastFieldLatin1Value(final byte[] fieldBytes, final String value); //firstFieldBytes 必须带{开头 + @AsmDepends public abstract void writeObjectByOnlyOneLatin1FieldValue(final byte[] firstFieldBytes, final String value); //firstFieldBytes 必须带{开头, lastFieldBytes必须,开头 + @AsmDepends public abstract void writeObjectByOnlyTwoIntFieldValue(final byte[] firstFieldBytes, final int value1, final byte[] lastFieldBytes, final int value2); @Override + @AsmDepends public abstract void writeBoolean(boolean value); @Override + @AsmDepends public abstract void writeInt(int value); @Override + @AsmDepends public abstract void writeLong(long value); public abstract void writeString(final boolean quote, String value); @Override + @AsmDepends public abstract void writeString(String value); @Override //只容许JsonBytesWriter重写此方法 diff --git a/src/main/java/org/redkale/net/sncp/SncpResponse.java b/src/main/java/org/redkale/net/sncp/SncpResponse.java index 110ca7cd5..8392ab758 100644 --- a/src/main/java/org/redkale/net/sncp/SncpResponse.java +++ b/src/main/java/org/redkale/net/sncp/SncpResponse.java @@ -8,6 +8,7 @@ package org.redkale.net.sncp; import java.lang.reflect.Type; import java.nio.channels.CompletionHandler; import java.util.concurrent.*; +import org.redkale.asm.AsmDepends; import org.redkale.convert.bson.BsonWriter; import org.redkale.net.Response; import org.redkale.util.ByteArray; @@ -82,6 +83,7 @@ public class SncpResponse extends Response { return this; } + @AsmDepends public T getParamAsyncHandler() { return (T) this.paramAsyncHandler; } diff --git a/src/main/java/org/redkale/util/Utility.java b/src/main/java/org/redkale/util/Utility.java index b72053709..e033f61f3 100644 --- a/src/main/java/org/redkale/util/Utility.java +++ b/src/main/java/org/redkale/util/Utility.java @@ -24,6 +24,7 @@ import java.util.stream.Stream; import java.util.zip.GZIPInputStream; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; +import org.redkale.asm.AsmDepends; import org.redkale.convert.json.JsonConvert; /** @@ -2741,6 +2742,7 @@ public final class Utility { * * @return 对象 */ + @AsmDepends public static T convertValue(Type type, Object value) { if (type == null || value == null) { return (T) value;