OSDN Git Service

Remove Id tag
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / is / InheritanceStructureBirthmarkExtractVisitor.java
1 package jp.sourceforge.stigmata.birthmarks.is;
2
3 import jp.sourceforge.stigmata.Birthmark;
4 import jp.sourceforge.stigmata.BirthmarkContext;
5 import jp.sourceforge.stigmata.BirthmarkElement;
6 import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
7 import jp.sourceforge.stigmata.birthmarks.NullBirthmarkElement;
8 import jp.sourceforge.stigmata.utils.WellknownClassManager;
9
10 import org.objectweb.asm.ClassVisitor;
11
12 /**
13  * 
14  * 
15  *
16  * @author Haruaki TAMADA
17  */
18 public class InheritanceStructureBirthmarkExtractVisitor extends BirthmarkExtractVisitor{
19     public InheritanceStructureBirthmarkExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
20         super(visitor, birthmark, context);
21     }
22
23     @Override
24     public void visit(int version, int access, String name, String signature,
25                       String superName, String[] interfaces){
26         try {
27             Class<?> c = getEnvironment().getClasspathContext().findClass(name.replace('/', '.'));
28             if(c != null && !c.isInterface()){
29                 addISBirthmark(c);
30             }
31         } catch (ClassNotFoundException ex){
32             addFailur(ex);
33         }
34     }
35
36     private void addISBirthmark(Class<?> c){
37         WellknownClassManager wcm = getEnvironment().getWellknownClassManager();
38         do{
39             String className = c.getName();
40             BirthmarkElement element = null;
41             if(wcm.isWellKnownClass(className)){
42                 element = new BirthmarkElement(className);
43             }
44             else{
45                 element = NullBirthmarkElement.getInstance();
46             }
47
48             addElement(element);
49             c = c.getSuperclass();
50         } while(!c.getName().equals("java.lang.Object"));
51         addElement(new BirthmarkElement("java.lang.Object"));
52     }
53 }