瀏覽代碼

JDK 11 migration

Mariusz Sieroń 6 年之前
父節點
當前提交
228b5cc8d3

+ 4 - 4
assira.asm/pom.xml

@@ -9,7 +9,7 @@
     </parent>
     <groupId>net.ranides</groupId>
     <artifactId>assira.asm</artifactId>
-    <version>5.0.4</version> 
+    <version>7.1</version>
     <packaging>jar</packaging>  
 
     <build>
@@ -17,7 +17,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-shade-plugin</artifactId>
-                <version>1.4</version>
+                <version>3.2.1</version>
                 <executions>
                     <execution>
                         <phase>package</phase>
@@ -59,8 +59,8 @@
     <dependencies>
         <dependency>
             <groupId>org.ow2.asm</groupId>
-            <artifactId>asm-all</artifactId>
-            <version>5.1</version>
+            <artifactId>asm</artifactId>
+            <version>7.1</version>
         </dependency>
         <dependency>
             <groupId>cglib</groupId>

+ 12 - 30
assira.benchmark/src/main/java/net/ranides/assira/trace/StackInspectorBenchmark.java

@@ -67,73 +67,55 @@ public class StackInspectorBenchmark {
     @Benchmark
     @BenchmarkName("names: SecurityManager")
     public int listSecurityManager() {
-        return TraceUtils.test_getNames(TraceUtils.RESOLVER_SM).size();
+        return TraceUtils.test_getNames(TraceUtils.RESOLVER_SECURITY).size();
     }
     
     @Benchmark
     @BenchmarkName("names: thread")
     public int listThread() {
-        return TraceUtils.test_getNames(TraceUtils.RESOLVER_TS).size();
+        return TraceUtils.test_getNames(TraceUtils.RESOLVER_THREAD).size();
     }
-    
-    @Benchmark
-    @BenchmarkName("names: sun.reflect")
-    public int listSunReflect() {
-        return TraceUtils.test_getNames(TraceUtils.RESOLVER_SR).size();
-    }
-    
+
     @Benchmark
     @BenchmarkName("names: exception")
     public int listException() {
-        return TraceUtils.test_getNames(TraceUtils.RESOLVER_ES).size();
+        return TraceUtils.test_getNames(TraceUtils.RESOLVER_EXCEPT).size();
     }
     
     @Benchmark
     @BenchmarkName("callee: SecurityManager")
     public int calleeSecurityManager() {
-        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_SM).length();
+        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_SECURITY).length();
     }
     
     @Benchmark
     @BenchmarkName("callee: thread")
     public int calleeThread() {
-        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_TS).length();
-    }
-    
-    @Benchmark
-    @BenchmarkName("callee: sun.reflect")
-    public int calleeSunReflect() {
-        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_SR).length();
+        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_THREAD).length();
     }
-    
+
     @Benchmark
     @BenchmarkName("callee: exception")
     public int calleeException() {
-        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_ES).length();
+        return TraceUtils.test_getCalleeName(TraceUtils.RESOLVER_EXCEPT).length();
     }
     
     @Benchmark
     @BenchmarkName("caller: SecurityManager")
     public int callerSecurityManager() {
-        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_SM).length();
+        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_SECURITY).length();
     }
     
     @Benchmark
     @BenchmarkName("caller: thread")
     public int callerThread() {
-        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_TS).length();
+        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_THREAD).length();
     }
-    
-    @Benchmark
-    @BenchmarkName("caller: sun.reflect")
-    public int callerSunReflect() {
-        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_SR).length();
-    }
-    
+
     @Benchmark
     @BenchmarkName("caller: exception")
     public int callerException() {
-        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_ES).length();
+        return TraceUtils.test_getCallerName(TraceUtils.RESOLVER_EXCEPT).length();
     }
         
     private static List<StackTraceElement> getFramesArray() {

+ 18 - 8
assira/pom.xml

@@ -66,11 +66,27 @@
 	
     <build>
         <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${maven.compiler.source}</source>
+                    <target>${maven.compiler.target}</target>
+                    <compilerArgs>
+                        <argument>-Xlint:unchecked</argument>
+                        <argument>-Xlint:removal</argument>
+                        <argument>-parameters</argument>
+                        <argument>--add-exports</argument>
+                        <argument>java.base/jdk.internal.reflect=ALL-UNNAMED</argument>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
                     <excludedGroups>net.ranides.assira.junit.JCategories$Slow,net.ranides.assira.junit.JCategories$Unstable</excludedGroups>
+                    <argLine>--add-exports java.base/jdk.internal.reflect=ALL-UNNAMED</argLine>
                 </configuration>
             </plugin>
             <plugin>
@@ -91,15 +107,9 @@
             <artifactId>junit</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm</artifactId>
-            <version>7.1</version>
+            <groupId>net.ranides</groupId>
+            <artifactId>assira.asm</artifactId>
         </dependency>
-        <!--        <dependency>-->
-<!--            <groupId>net.ranides</groupId>-->
-<!--            <artifactId>assira.asm</artifactId>-->
-<!--        </dependency>-->
-
         <dependency>
             <groupId>net.ranides</groupId>
             <artifactId>assira.junit</artifactId>

+ 1 - 1
assira/src/main/java/net/ranides/assira/reflection/impl/CDParameters.java

@@ -73,7 +73,7 @@ public class CDParameters {
         private final Map<String,Constructor<?>> mConstructors = new HashMap<>();
 
         public PNVisitor(Class<?> type) {
-            super(Opcodes.ASM5);
+            super(Opcodes.ASM7);
 
             List<Method> methods = new ArrayList<>(Arrays.asList(type.getMethods()));
             methods.addAll(Arrays.asList(type.getDeclaredMethods()));

+ 68 - 73
assira/src/main/java/net/ranides/assira/reflection/impl/CPInspector.java

@@ -33,20 +33,18 @@ public final class CPInspector {
      * @return all methods referenced in class' bytecode
      */
     public static Stream<Method> getMethods(Class<?> clazz) {
-        throw new UnsupportedOperationException("JDK11");
-//        CPP cp = new CPP(clazz);
-//        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getMethodAt), false)
-//            .filter(m -> m instanceof Method)
-//            .map(m -> (Method)m);
+        CPP cp = new CPP(clazz);
+        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getMethodAt), false)
+            .filter(m -> m instanceof Method)
+            .map(m -> (Method)m);
     }
     
     @SuppressWarnings("unchecked")
     public static <T> Stream<Constructor<T>> getConstructors(Class<T> clazz) {
-        throw new UnsupportedOperationException("JDK11");
-//        CPP cp = new CPP(clazz);
-//        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getMethodAt), false)
-//            .filter(m -> m instanceof Constructor<?>)
-//            .map(m -> (Constructor<T>)m);
+        CPP cp = new CPP(clazz);
+        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getMethodAt), false)
+            .filter(m -> m instanceof Constructor<?>)
+            .map(m -> (Constructor<T>)m);
     }
     
     /**
@@ -55,9 +53,8 @@ public final class CPInspector {
      * @return fields referenced in class' bytecode
      */
     public static Stream<Field> getFields(Class<?> clazz) {
-        throw new UnsupportedOperationException("JDK11");
-//        CPP cp = new CPP(clazz);
-//        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getFieldAt), false);
+        CPP cp = new CPP(clazz);
+        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getFieldAt), false);
     }
     
     /**
@@ -66,9 +63,8 @@ public final class CPInspector {
      * @return types referenced in class' bytecode
      */
     public static Stream<Class<?>> getClasses(Class<?> clazz) {
-        throw new UnsupportedOperationException("JDK11");
-//        CPP cp = new CPP(clazz);
-//        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getClassAt), false);
+        CPP cp = new CPP(clazz);
+        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getClassAt), false);
     }
     
     /**
@@ -77,64 +73,63 @@ public final class CPInspector {
      * @return string constants referenced in class' bytecode
      */
     public static Stream<String> getStrings(Class<?> clazz) {
-        throw new UnsupportedOperationException("JDK11");
-//        CPP cp = new CPP(clazz);
-//        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getUTF8At), false);
+        CPP cp = new CPP(clazz);
+        return StreamSupport.stream(new CPSpliterator<>(cp.v.getSize(), cp.v::getUTF8At), false);
     }
         
-//    private static final class CPSpliterator<T> extends ForwardSpliterator<T> {
-//
-//        private final IntFunction<T> function;
-//        private final int max;
-//        private int index;
-//
-//
-//        public CPSpliterator(int size, IntFunction<T> function) {
-//            this.function = function;
-//            this.max = size;
-//            this.index = 0;
-//        }
-//
-//        @Override
-//        public boolean tryAdvance(Consumer<? super T> action) {
-//            while(index<max) {
-//                try {
-//                    action.accept(function.apply(index++));
-//                    return true;
-//                } catch(IllegalArgumentException $0) { // NOPMD
-//                    // do nothing
-//                }
-//            }
-//            return false;
-//        }
-//
-//    }
-//
-//	private static final class Li { // NOPMD - lazy init idiom
-//
-//		public static final Method GET_CONSTANT_POOL;
-//
-//		static {
-//			try {
-//				GET_CONSTANT_POOL = Class.class.getDeclaredMethod("getConstantPool");
-//				GET_CONSTANT_POOL.setAccessible(true);
-//			} catch(ReflectiveOperationException cause) {
-//				throw ExceptionUtils.rethrow(cause);
-//			}
-//		}
-//
-//	}
-//
-//    // Cały cyrk z tym wrapperem tylko po to, aby nie mieć 20 warningów z powodu użycia klasy "sun.reflect".
-//    // Mamy jedno użycie (tutaj). A reszta kodu używa typu niejawnie, używając pola "v"
-//    private static final class CPP {
-//
-//        public final sun.reflect.ConstantPool v;
-//
-//        public CPP(Class<?> clazz) {
-//            this.v = MethodUtils.$invoke(Li.GET_CONSTANT_POOL, clazz);
-//        }
-//
-//    }
+    private static final class CPSpliterator<T> extends ForwardSpliterator<T> {
+
+        private final IntFunction<T> function;
+        private final int max;
+        private int index;
+
+
+        public CPSpliterator(int size, IntFunction<T> function) {
+            this.function = function;
+            this.max = size;
+            this.index = 0;
+        }
+
+        @Override
+        public boolean tryAdvance(Consumer<? super T> action) {
+            while(index<max) {
+                try {
+                    action.accept(function.apply(index++));
+                    return true;
+                } catch(IllegalArgumentException $0) { // NOPMD
+                    // do nothing
+                }
+            }
+            return false;
+        }
+
+    }
+
+	private static final class Li { // NOPMD - lazy init idiom
+
+		public static final Method GET_CONSTANT_POOL;
+
+		static {
+			try {
+				GET_CONSTANT_POOL = Class.class.getDeclaredMethod("getConstantPool");
+				GET_CONSTANT_POOL.setAccessible(true);
+			} catch(ReflectiveOperationException cause) {
+				throw ExceptionUtils.rethrow(cause);
+			}
+		}
+
+	}
+
+    // Cały cyrk z tym wrapperem tylko po to, aby nie mieć 20 warningów z powodu użycia klasy "sun.reflect".
+    // Mamy jedno użycie (tutaj). A reszta kodu używa typu niejawnie, używając pola "v"
+    private static final class CPP {
+
+        public final jdk.internal.reflect.ConstantPool v;
+
+        public CPP(Class<?> clazz) {
+            this.v = MethodUtils.$invoke(Li.GET_CONSTANT_POOL, clazz);
+        }
+
+    }
     
 }

+ 7 - 11
assira/src/main/java/net/ranides/assira/reflection/impl/LMethod.java

@@ -26,29 +26,26 @@ public final class LMethod extends AMethod implements IMethod {
     
     private static final Set<IAttribute> ATTR = IAttribute.collect(LAMBDA, STATIC, DECLARED, SYNTHETIC);
 
-//	private final IMethod typeinfo;
+	private final IMethod typeinfo;
 	private final IMethod method;
 	private final MethodHandle handle;
 	private final CQuery<IArgument> arguments;
 
 	LMethod(IMethod method, Object lambda) {
         super(IContext.DEFAULT);
-//        Method cpinfo = CPInspector.getMethods(lambda.getClass()).findFirst().orElseThrow(()->new IllegalArgumentException("Lambda object is not functional interface: " + lambda));
-//        this.typeinfo = IMethod.typeinfo(cpinfo);
+        Method cpinfo = CPInspector.getMethods(lambda.getClass()).findFirst().orElseThrow(()->new IllegalArgumentException("Lambda object is not functional interface: " + lambda));
+        this.typeinfo = IMethod.typeinfo(cpinfo);
 		this.method = method;
         this.handle = method.handle().bindTo(lambda);
         
         int count = method.arguments().count();
-//        int offset = cpinfo.getParameterCount() - count;
-//        this.arguments = this.typeinfo.arguments().stream().skip(offset);
-        this.arguments = null;
-
+        int offset = cpinfo.getParameterCount() - count;
+        this.arguments = this.typeinfo.arguments().stream().skip(offset);
     }
     
     @Override
 	public List<IClass<?>> params() {
-	    throw new UnsupportedOperationException("JDK11");
-//        return typeinfo.params();
+        return typeinfo.params();
 	}
     
 	@Override
@@ -58,8 +55,7 @@ public final class LMethod extends AMethod implements IMethod {
     
 	@Override
 	public IClass<?> returns() {
-        throw new UnsupportedOperationException("Reflective lambda not supported in JDK11");
-//        return typeinfo.returns();
+        return typeinfo.returns();
 	}
     
 	@Override

+ 0 - 2
assira/src/test/java/net/ranides/assira/io/IOStreamsTest.java

@@ -554,11 +554,9 @@ public class IOStreamsTest {
         
         @Override
         public void close() throws IOException {
-            System.out.println(">>> close...");
             check();
             closed = true;
             super.close();
-            System.out.println(">>> ... closed");
         }
 
         @Override

+ 1 - 1
assira/src/test/java/net/ranides/assira/reflection/mockup/ForCPInspector.java

@@ -22,7 +22,7 @@ public class ForCPInspector {
     
     private static int S2 = 17;
     
-    private int index;
+    private int index = 0;
     
     private EventListener<Event> listener;
     

+ 0 - 4
assira/src/test/java/net/ranides/assira/reflection/util/AnnotationUtilsTest.java

@@ -44,13 +44,9 @@ public class AnnotationUtilsTest {
         String exp1 = "@net.ranides.assira.reflection.mockup.ForAnnotationUtils$MethodInfo(api=GNU, author=ranides, name=m1, type=java.lang.Integer, uid=77)";
         String exp2 = "@net.ranides.assira.reflection.mockup.ForAnnotationUtils$MethodInfo(api=null, author=null, name=null, type=java.lang.Integer, uid=77)";
 
-        System.out.println(tostr(a1));
         assertSymEquals(exp1, tostr(a1));
-        System.out.println(tostr(a2));
         assertSymEquals(exp1, tostr(a2));
-        System.out.println(tostr(a4));
         assertSymEquals(exp2, tostr(a4));
-        System.out.println(tostr(a5));
         assertSymEquals(exp2, tostr(a5));
         
         assertSymEquals(a1, a2);

+ 0 - 1
assira/src/test/java/net/ranides/assira/reflection/util/ReflectUtilsTest.java

@@ -79,7 +79,6 @@ public class ReflectUtilsTest {
     public void testFQLocation() {
         Path p1 = ReflectUtils.getFQLocation(ReflectUtils.class);
 
-        System.out.println(p1);
         assertTrue(p1.endsWith("assira/target/classes/net/ranides/assira/reflection/util/ReflectUtils.class"));
         assertTrue(Files.exists(p1));
   

+ 2 - 2
pom.xml

@@ -68,7 +68,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.3.2</version>
+                <version>3.8.1</version>
                 <configuration>
                     <source>${maven.compiler.source}</source>
                     <target>${maven.compiler.target}</target>
@@ -192,7 +192,7 @@
             <dependency>
                 <groupId>net.ranides</groupId>
                 <artifactId>assira.asm</artifactId>
-                <version>5.0.4</version>
+                <version>7.1</version>
             </dependency>
             <dependency>
                 <groupId>net.ranides</groupId>