Changeset 3565


Ignore:
Timestamp:
Mar 25, 2008, 2:27:35 PM (13 years ago)
Author:
yura
Message:
Location:
to-imperative/trunk/java/compiler/org/refal/plus/comp
Files:
1 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/java/compiler/org/refal/plus/comp/FormatReader.java

    r3135 r3565  
    1010import java.io.InputStream;
    1111
     12import org.objectweb.asm.AnnotationVisitor;
     13import org.objectweb.asm.Attribute;
    1214import org.objectweb.asm.ClassReader;
     15import org.objectweb.asm.ClassVisitor;
     16import org.objectweb.asm.FieldVisitor;
     17import org.objectweb.asm.Label;
     18import org.objectweb.asm.MethodVisitor;
     19import org.objectweb.asm.Opcodes;
    1320
    1421public class FormatReader {
    1522    public static String ReadFormatsFromClass (InputStream is) {
    1623        try {
    17             return ClassFormatReader.ReadFormatsFromClass(new ClassReader(is));
     24            return (new FormatReader()).ReadFormatsFromClass(new ClassReader(is));
    1825        } catch (Exception exc) {
    1926            return null;
     
    2330    public static String ReadFormatsFromClass (String classname) {
    2431        try {
    25             InputStream inputStream = FormatReader.class.getClassLoader().getResourceAsStream(classname+".class");
     32            InputStream inputStream = FormatReader.class.getClassLoader().getResourceAsStream(classname + ".class");
    2633            String res = ReadFormatsFromClass(inputStream);
    2734            inputStream.close();
     
    4956        }
    5057    }
     58
     59    private class MethodFormatAnnotationReader implements AnnotationVisitor {
     60        public MethodFormatAnnotationReader () {}
     61
     62        public void visit (String name, Object value) {
     63            if (name.equals("value") && value instanceof String) {
     64                if (!formats.equals(""))
     65                    formats += " ";
     66                formats += ((String) value);
     67            }
     68        }
     69
     70        public AnnotationVisitor visitAnnotation (String name, String desc) {
     71            return null;
     72        }
     73
     74        public AnnotationVisitor visitArray (String name) {
     75            return null;
     76        }
     77
     78        public void visitEnd () {}
     79
     80        public void visitEnum (String name, String desc, String value) {}
     81    }
     82
     83    private class FieldFormatReader implements FieldVisitor {
     84        public FieldFormatReader () {}
     85
     86        public AnnotationVisitor visitAnnotation (String desc, boolean visible) {
     87            if (desc.equals("Lorg/refal/plus/RefalFormat;"))
     88                return new MethodFormatAnnotationReader();
     89            else
     90                return null;
     91        }
     92
     93        public void visitAttribute (Attribute attr) {}
     94
     95        public void visitEnd () {}
     96    }
     97
     98    private class MethodFormatReader implements MethodVisitor {
     99        public MethodFormatReader () {}
     100
     101        public AnnotationVisitor visitAnnotation (String desc, boolean visible) {
     102            if (desc.equals("Lorg/refal/plus/RefalFormat;"))
     103                return new MethodFormatAnnotationReader();
     104            else
     105                return null;
     106        }
     107
     108        public AnnotationVisitor visitAnnotationDefault () {
     109            return null;
     110        }
     111
     112        public void visitAttribute (Attribute attr) {}
     113
     114        public void visitCode () {}
     115
     116        public void visitEnd () {}
     117
     118        public void visitFieldInsn (int opcode, String owner, String name, String desc) {}
     119
     120        public void visitFrame (int type, int nLocal, Object[] local, int nStack, Object[] stack) {}
     121
     122        public void visitIincInsn (int var, int increment) {}
     123
     124        public void visitInsn (int opcode) {}
     125
     126        public void visitIntInsn (int opcode, int operand) {}
     127
     128        public void visitJumpInsn (int opcode, Label label) {}
     129
     130        public void visitLabel (Label label) {}
     131
     132        public void visitLdcInsn (Object cst) {}
     133
     134        public void visitLineNumber (int line, Label start) {}
     135
     136        public void visitLocalVariable (String name, String desc, String signature, Label start, Label end, int index) {}
     137
     138        public void visitLookupSwitchInsn (Label dflt, int[] keys, Label[] labels) {}
     139
     140        public void visitMaxs (int maxStack, int maxLocals) {}
     141
     142        public void visitMethodInsn (int opcode, String owner, String name, String desc) {}
     143
     144        public void visitMultiANewArrayInsn (String desc, int dims) {}
     145
     146        public AnnotationVisitor visitParameterAnnotation (int parameter, String desc, boolean visible) {
     147            return null;
     148        }
     149
     150        public void visitTableSwitchInsn (int min, int max, Label dflt, Label[] labels) {}
     151
     152        public void visitTryCatchBlock (Label start, Label end, Label handler, String type) {}
     153
     154        public void visitTypeInsn (int opcode, String desc) {}
     155
     156        public void visitVarInsn (int opcode, int var) {}
     157    }
     158
     159    private class ClassFormatReader implements ClassVisitor {
     160        public ClassFormatReader () {}
     161
     162        public void visit (int version, int access, String name, String signature, String superName, String[] interfaces) {
     163            if (superName != null) {
     164                String fmts = ReadFormatsFromClass(superName);
     165                if (fmts != null) {
     166                    if (!formats.equals(""))
     167                        formats += " ";
     168                    formats += fmts;
     169                }
     170            }
     171        }
     172
     173        public AnnotationVisitor visitAnnotation (String desc, boolean visible) {
     174            return null;
     175        }
     176
     177        public void visitAttribute (Attribute attr) {}
     178
     179        public void visitEnd () {}
     180
     181        public FieldVisitor visitField (int access, String name, String desc, String signature, Object value) {
     182            return ((access & Opcodes.ACC_PUBLIC) != 0) ? new FieldFormatReader() : null;
     183        }
     184
     185        public void visitInnerClass (String name, String outerName, String innerName, int access) {}
     186
     187        public MethodVisitor visitMethod (int access, String name, String desc, String signature, String[] exceptions) {
     188            return ((access & Opcodes.ACC_PUBLIC) != 0) ? new MethodFormatReader() : null;
     189        }
     190
     191        public void visitOuterClass (String owner, String name, String desc) {}
     192
     193        public void visitSource (String source, String debug) {}
     194    }
     195   
     196    private String formats;
     197   
     198    private FormatReader () {
     199        formats = "";
     200    }
     201
     202    private String ReadFormatsFromClass (ClassReader cr) {
     203        ClassFormatReader cv = new ClassFormatReader();
     204        cr.accept(cv, 0);
     205        return formats;
     206    }
    51207}
Note: See TracChangeset for help on using the changeset viewer.