1 32 package net.sf.retrotranslator.transformer; 33 34 import java.io.*; 35 import java.util.*; 36 import net.sf.retrotranslator.runtime.asm.ClassReader; 37 import net.sf.retrotranslator.runtime.impl.*; 38 39 42 public class SignatureListGenerator extends EmptyVisitor { 43 44 private static Object [][] CLASSES_14 = { 45 {java.util.Collection .class, "<E:Ljava/lang/Object;>Ljava/lang/Object;"}, 46 {java.util.Set .class}, 47 {java.util.List .class}, 48 {java.util.Queue .class}, 49 {java.util.Map .class}, 50 {java.util.SortedSet .class}, 51 {java.util.SortedMap .class}, 52 {java.util.concurrent.BlockingQueue .class}, 53 {java.util.concurrent.ConcurrentMap .class}, 54 {java.util.HashSet .class}, 55 {java.util.TreeSet .class, 56 "<E:Ljava/lang/Object;>Ljava/util/AbstractSet<TE;>;Ljava/util/SortedSet<TE;>;" + 57 "Ljava/lang/Cloneable;Ljava/io/Serializable;"}, 58 {java.util.LinkedHashSet .class}, 59 {java.util.ArrayList .class}, 60 {java.util.LinkedList .class, 61 "<E:Ljava/lang/Object;>Ljava/util/AbstractSequentialList<TE;>;" + 62 "Ljava/util/List<TE;>;Ljava/lang/Cloneable;Ljava/io/Serializable;"}, 63 {java.util.PriorityQueue .class}, 64 {java.util.HashMap .class}, 65 {java.util.TreeMap .class, "<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;" + 66 "Ljava/util/SortedMap<TK;TV;>;Ljava/lang/Cloneable;Ljava/io/Serializable;"}, 67 {java.util.LinkedHashMap .class, "<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/HashMap<TK;TV;>;"}, 68 {java.util.Vector .class}, 69 {java.util.Hashtable .class}, 70 {java.util.WeakHashMap .class}, 71 {java.util.IdentityHashMap .class}, 72 {java.util.concurrent.CopyOnWriteArrayList .class}, 73 {java.util.concurrent.CopyOnWriteArraySet .class}, 74 {java.util.EnumSet .class, 75 "<E:Lnet/sf/retrotranslator/runtime/java/lang/Enum_<TE;>;>Ljava/util/HashSet<TE;>;"}, 76 {java.util.EnumMap .class, 77 "<K:Lnet/sf/retrotranslator/runtime/java/lang/Enum_<TK;>;V:Ljava/lang/Object;>" + 78 "Ljava/util/TreeMap<TK;TV;>;"}, 79 {java.util.concurrent.ConcurrentLinkedQueue .class}, 80 {java.util.concurrent.LinkedBlockingQueue .class}, 81 {java.util.concurrent.ArrayBlockingQueue .class}, 82 {java.util.concurrent.PriorityBlockingQueue .class}, 83 {java.util.concurrent.DelayQueue .class}, 84 {java.util.concurrent.SynchronousQueue .class}, 85 {java.util.concurrent.ConcurrentHashMap .class, 86 "<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ledu/emory/mathcs/backport/java/util/AbstractMap<TK;TV;>;" + 87 "Ledu/emory/mathcs/backport/java/util/concurrent/ConcurrentMap<TK;TV;>;Ljava/io/Serializable;"}, 88 {java.util.AbstractCollection .class}, 89 {java.util.AbstractSet .class}, 90 {java.util.AbstractList .class}, 91 {java.util.AbstractSequentialList .class}, 92 {java.util.AbstractQueue .class, 93 "<E:Ljava/lang/Object;>Ledu/emory/mathcs/backport/java/util/AbstractCollection<TE;>;" + 94 "Ledu/emory/mathcs/backport/java/util/Queue<TE;>;"}, 95 {java.util.AbstractMap .class}, 96 {java.util.Enumeration .class}, 97 {java.lang.Iterable .class}, 98 {java.util.Iterator .class}, 99 {java.util.ListIterator .class}, 100 {java.lang.Comparable .class}, 101 {java.util.Comparator .class} 102 }; 103 104 private Properties properties = new Properties(); 105 private String specialSignature; 106 107 public static void main(String [] args) throws Exception { 108 new SignatureListGenerator().execute(args[0]); 109 } 110 111 private void execute(String fileName) throws Exception { 112 ClassTransformer classTransformer = new ClassTransformer(false, false, false, null, null, 113 new ReplacementLocatorFactory(ClassVersion.VERSION_14, false, false, new ArrayList<Backport>())); 114 for (Object [] objects : CLASSES_14) { 115 Class aClass = (Class ) objects[0]; 116 specialSignature = objects.length > 1 ? (String ) objects[1] : null; 117 byte[] bytes = RuntimeTools.getBytecode(aClass); 118 bytes = classTransformer.transform(bytes, 0, bytes.length); 119 new ClassReader(bytes).accept(this, true); 120 } 121 OutputStream outputStream = new FileOutputStream(fileName); 122 try { 123 properties.store(outputStream, null); 124 } finally { 125 outputStream.close(); 126 } 127 } 128 129 public void visit(int version, int access, String name, String signature, String superName, String [] interfaces) { 130 if (specialSignature != null) { 131 signature = specialSignature; 132 } 133 if (signature != null) { 134 properties.setProperty(name, signature); 135 } 136 } 137 } 138 | Popular Tags |