]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/FindAllowedChars.java
Merge commit 'd186091'
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / FindAllowedChars.java
1 package org.simantics.scl.compiler.tests;\r
2 \r
3 import java.lang.reflect.Method;\r
4 \r
5 import org.objectweb.asm.ClassWriter;\r
6 import org.objectweb.asm.MethodVisitor;\r
7 import org.objectweb.asm.Opcodes;\r
8 \r
9 public class FindAllowedChars {\r
10     public static class MyClassLoader extends ClassLoader {\r
11         final String className;\r
12         final byte[] classBytes;\r
13         \r
14         public MyClassLoader(ClassLoader parent, String className, byte[] classBytes) {\r
15             super(parent);\r
16             this.className = className;\r
17             this.classBytes = classBytes;\r
18         }\r
19         \r
20         public MyClassLoader(String className, byte[] classBytes) {\r
21             this.className = className;\r
22             this.classBytes = classBytes;\r
23         }\r
24 \r
25         @Override\r
26         protected Class<?> findClass(String name) throws ClassNotFoundException {\r
27             if(name.equals(name))\r
28                 return defineClass(name, classBytes, 0, classBytes.length);\r
29             else\r
30                 return super.findClass(name);\r
31         }\r
32     }\r
33     \r
34     public static void test(String className, String methodName) throws Exception {\r
35         ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);\r
36         classWriter.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", null);\r
37         \r
38         MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, methodName, "()V", null, null);\r
39         /*methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");\r
40         methodVisitor.visitLdcInsn("Hello world!");\r
41         methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);*/\r
42         methodVisitor.visitInsn(Opcodes.RETURN);\r
43         methodVisitor.visitMaxs(0, 0);\r
44         methodVisitor.visitEnd();\r
45         classWriter.visitEnd();\r
46  \r
47         ClassLoader loader = new MyClassLoader(className, classWriter.toByteArray());\r
48         Class<?> clazz = loader.loadClass(className);\r
49         Method method = clazz.getMethod(methodName);\r
50         method.invoke(null);\r
51     }\r
52     \r
53     public static void main(String[] args) throws Exception {\r
54         for(int a=Character.MIN_VALUE;a<Character.MAX_VALUE;++a) {\r
55             //for(char b=0;b<256;++b) {\r
56                 String name = new String(new char[] {(char)a});\r
57                 try {\r
58                     test(name, "test");\r
59                 } catch(Throwable e) {\r
60                     System.out.println(name + " (" + a + ")");\r
61                 }\r
62             //}   \r
63         }\r
64         System.out.println((int)Character.MAX_VALUE);\r
65     }\r
66 }\r