From e8a436d29b94e301127c2c9b6692ab7d8c0e6e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9C=B0=E5=B9=B3=E7=BA=BF?= <22250530@qq.com> Date: Thu, 8 Oct 2015 17:30:10 +0800 Subject: [PATCH] --- .../wentch/redkale/convert/ConvertColumn.java | 2 +- .../com/wentch/redkale/convert/Factory.java | 3 +- .../redkale/util/ConstructorProperties.java | 24 ++++++++ .../src/com/wentch/redkale/util/Creator.java | 10 ++-- .../src/com/wentch/redkale/util/Utility.java | 55 +------------------ 5 files changed, 35 insertions(+), 59 deletions(-) create mode 100644 android-jdk6-redkale/src/com/wentch/redkale/util/ConstructorProperties.java diff --git a/android-jdk6-redkale/src/com/wentch/redkale/convert/ConvertColumn.java b/android-jdk6-redkale/src/com/wentch/redkale/convert/ConvertColumn.java index 1a868f0c4..a53828894 100644 --- a/android-jdk6-redkale/src/com/wentch/redkale/convert/ConvertColumn.java +++ b/android-jdk6-redkale/src/com/wentch/redkale/convert/ConvertColumn.java @@ -18,7 +18,7 @@ import static java.lang.annotation.RetentionPolicy.*; @Documented @Target({METHOD, FIELD}) @Retention(RUNTIME) -@Repeatable(ConvertColumns.class) +//@Repeatable(ConvertColumns.class) public @interface ConvertColumn { /** diff --git a/android-jdk6-redkale/src/com/wentch/redkale/convert/Factory.java b/android-jdk6-redkale/src/com/wentch/redkale/convert/Factory.java index c27cdfc75..25ec6f9ba 100644 --- a/android-jdk6-redkale/src/com/wentch/redkale/convert/Factory.java +++ b/android-jdk6-redkale/src/com/wentch/redkale/convert/Factory.java @@ -128,7 +128,8 @@ public abstract class Factory { ConvertColumnEntry en = this.columnEntrys.get(field); if (en != null) return en; final ConvertType ct = this.getConvertType(); - for (ConvertColumn ref : field.getAnnotationsByType(ConvertColumn.class)) { + ConvertColumn ref = field.getAnnotation(ConvertColumn.class); + if (ref != null) { if (ref.type().contains(ct)) { ConvertColumnEntry entry = new ConvertColumnEntry(ref); if (skipAllIgnore) { diff --git a/android-jdk6-redkale/src/com/wentch/redkale/util/ConstructorProperties.java b/android-jdk6-redkale/src/com/wentch/redkale/util/ConstructorProperties.java new file mode 100644 index 000000000..e3a15bb90 --- /dev/null +++ b/android-jdk6-redkale/src/com/wentch/redkale/util/ConstructorProperties.java @@ -0,0 +1,24 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.wentch.redkale.util; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * + * @author zhangjx + */ +@Documented @Target(CONSTRUCTOR) @Retention(RUNTIME) +public @interface ConstructorProperties { + /** +

The getter names.

+ @return the getter names corresponding to the parameters in the + annotated constructor. + */ + String[] value(); +} diff --git a/android-jdk6-redkale/src/com/wentch/redkale/util/Creator.java b/android-jdk6-redkale/src/com/wentch/redkale/util/Creator.java index 23efe455f..39eace51f 100644 --- a/android-jdk6-redkale/src/com/wentch/redkale/util/Creator.java +++ b/android-jdk6-redkale/src/com/wentch/redkale/util/Creator.java @@ -4,7 +4,6 @@ */ package com.wentch.redkale.util; -import java.beans.ConstructorProperties; import java.lang.reflect.*; import java.util.*; import org.objectweb.asm.*; @@ -110,7 +109,7 @@ public interface Creator { } Constructor constructor = null; for (Constructor c : clazz.getConstructors()) { - if (c.getParameterCount() == 0) { + if (c.getParameterTypes().length == 0) { constructor = c; break; } @@ -154,8 +153,9 @@ public interface Creator { mv.visitTypeInsn(NEW, interName); mv.visitInsn(DUP); //--------------------------------------- + final Class[] params = constructor.getParameterTypes(); { - Parameter[] params = constructor.getParameters(); + final int[] iconsts = {ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5}; for (int i = 0; i < params.length; i++) { mv.visitVarInsn(ALOAD, 1); @@ -165,7 +165,7 @@ public interface Creator { mv.visitIntInsn(BIPUSH, i); } mv.visitInsn(AALOAD); - Class ct = params[i].getType(); + Class ct = params[i]; mv.visitTypeInsn(CHECKCAST, Type.getInternalName(ct)); if (ct.isPrimitive()) { Class fct = Array.get(Array.newInstance(ct, 1), 0).getClass(); @@ -181,7 +181,7 @@ public interface Creator { //--------------------------------------- mv.visitMethodInsn(INVOKESPECIAL, interName, "", Type.getConstructorDescriptor(constructor), false); mv.visitInsn(ARETURN); - mv.visitMaxs((constructor.getParameterCount() > 0 ? (constructor.getParameterCount() + 3) : 2), 2); + mv.visitMaxs((params.length > 0 ? (params.length + 3) : 2), 2); mv.visitEnd(); } { //虚拟 create 方法 diff --git a/android-jdk6-redkale/src/com/wentch/redkale/util/Utility.java b/android-jdk6-redkale/src/com/wentch/redkale/util/Utility.java index 71ef6054a..05138fc82 100644 --- a/android-jdk6-redkale/src/com/wentch/redkale/util/Utility.java +++ b/android-jdk6-redkale/src/com/wentch/redkale/util/Utility.java @@ -5,11 +5,9 @@ package com.wentch.redkale.util; import java.io.*; -import java.lang.reflect.Field; import java.net.*; import java.nio.ByteBuffer; import java.nio.charset.*; -import java.time.*; import java.util.*; import javax.net.ssl.*; @@ -25,25 +23,9 @@ public final class Utility { private static final char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; - private static final sun.misc.Unsafe UNSAFE; - - private static final long strvaloffset; - private static final javax.net.ssl.SSLContext DEFAULTSSL_CONTEXT; static { - sun.misc.Unsafe usafe = null; - long fd = 0L; - try { - Field safeField = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); - safeField.setAccessible(true); - usafe = (sun.misc.Unsafe) safeField.get(null); - fd = usafe.objectFieldOffset(String.class.getDeclaredField("value")); - } catch (Exception e) { - throw new RuntimeException(e); //不可能会发生 - } - UNSAFE = usafe; - strvaloffset = fd; try { DEFAULTSSL_CONTEXT = javax.net.ssl.SSLContext.getInstance("SSL"); @@ -123,37 +105,6 @@ public final class Utility { return back; } - public static int today() { - java.time.LocalDate today = java.time.LocalDate.now(); - return today.getYear() * 10000 + today.getMonthValue() * 100 + today.getDayOfMonth(); - } - - //时间点所在星期的周一 - public static long monday(long time) { - ZoneId zid = ZoneId.systemDefault(); - Instant instant = Instant.ofEpochMilli(time); - LocalDate ld = instant.atZone(zid).toLocalDate(); - ld = ld.minusDays(ld.getDayOfWeek().getValue() - 1); - return ld.atStartOfDay(zid).toInstant().toEpochMilli(); - } - - //时间点所在星期的周日 - public static long sunday(long time) { - ZoneId zid = ZoneId.systemDefault(); - Instant instant = Instant.ofEpochMilli(time); - LocalDate ld = instant.atZone(zid).toLocalDate(); - ld = ld.plusDays(7 - ld.getDayOfWeek().getValue()); - return ld.atStartOfDay(zid).toInstant().toEpochMilli(); - } - - //时间点所在月份的1号 - public static long monthFirstDay(long time) { - ZoneId zid = ZoneId.systemDefault(); - Instant instant = Instant.ofEpochMilli(time); - LocalDate ld = instant.atZone(zid).toLocalDate().withDayOfMonth(1); - return ld.atStartOfDay(zid).toInstant().toEpochMilli(); - } - public static String binToHexString(byte[] bytes) { return new String(binToHex(bytes)); } @@ -260,7 +211,7 @@ public final class Utility { public static byte[] encodeUTF8(final String value) { if (value == null) return new byte[0]; - return encodeUTF8((char[]) UNSAFE.getObject(value, strvaloffset)); + return encodeUTF8(value.toCharArray()); } public static byte[] encodeUTF8(final char[] array) { @@ -301,7 +252,7 @@ public final class Utility { } public static char[] charArray(String value) { - return value == null ? null : (char[]) UNSAFE.getObject(value, strvaloffset); + return value == null ? null : value.toCharArray(); } public static ByteBuffer encodeUTF8(final ByteBuffer buffer, final char[] array) { @@ -314,7 +265,7 @@ public final class Utility { public static int encodeUTF8Length(String value) { if (value == null) return -1; - return encodeUTF8Length((char[]) UNSAFE.getObject(value, strvaloffset)); + return encodeUTF8Length(value.toCharArray()); } public static int encodeUTF8Length(final char[] text) {