| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import java.io.*; |
| |
| import org.objectweb.asm.*; |
| |
| public class SpacesInSimpleName { |
| public static void main(String args[]) throws Exception { |
| String methodName = "method_with_spaces_" |
| + "20 " |
| + "a0\u00a0" |
| + "1680\u1680" |
| + "2000\u2000" |
| + "2001\u2001" |
| + "2002\u2002" |
| + "2003\u2003" |
| + "2004\u2004" |
| + "2005\u2005" |
| + "2006\u2006" |
| + "2007\u2007" |
| + "2008\u2008" |
| + "2009\u2009" |
| + "200a\u200a" |
| + "202f\u202f" |
| + "205f\u205f" |
| + "3000\u3000"; |
| |
| ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); |
| |
| cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Main", |
| null, "java/lang/Object", null); |
| |
| MethodVisitor mvMain = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, |
| "main", "([Ljava/lang/String;)V", null, null); |
| mvMain.visitCode(); |
| mvMain.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", |
| "Ljava/io/PrintStream;"); |
| mvMain.visitLdcInsn("Hello, world!"); |
| mvMain.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", |
| "println", "(Ljava/lang/String;)V", false); |
| mvMain.visitMethodInsn(Opcodes.INVOKESTATIC, "Main", methodName, "()V", false); |
| mvMain.visitInsn(Opcodes.RETURN); |
| mvMain.visitMaxs(0, 0); // args are ignored with COMPUTE_MAXS |
| mvMain.visitEnd(); |
| MethodVisitor mvSpaces = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, |
| methodName, "()V", null, null); |
| mvSpaces.visitCode(); |
| mvSpaces.visitInsn(Opcodes.RETURN); |
| mvSpaces.visitMaxs(0, 0); // args are ignored with COMPUTE_MAXS |
| mvSpaces.visitEnd(); |
| |
| cw.visitEnd(); |
| |
| byte[] b = cw.toByteArray(); |
| OutputStream out = new FileOutputStream("Main.class"); |
| out.write(b, 0, b.length); |
| out.close(); |
| } |
| } |