import jp.sourceforge.stigmata.BirthmarkElement;
import jp.sourceforge.stigmata.birthmarks.BirthmarkExtractVisitor;
import jp.sourceforge.stigmata.birthmarks.NullBirthmarkElement;
+import jp.sourceforge.stigmata.digger.ClassFileEntry;
+import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.stigmata.utils.WellknownClassManager;
import org.objectweb.asm.ClassVisitor;
+import com.sun.xml.internal.ws.org.objectweb.asm.Opcodes;
+
/**
*
*
@Override
public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces){
- try {
- Class<?> c = getEnvironment().getClasspathContext().findClass(name.replace('/', '.'));
- if(c != null && !c.isInterface()){
- addISBirthmark(c);
+ if((access & Opcodes.ACC_INTERFACE) != Opcodes.ACC_INTERFACE){
+ ClasspathContext context = getEnvironment().getClasspathContext();
+ name = name.replace('/', '.');
+ ClassFileEntry entry = context.findEntry(name);
+ if(entry == null){
+ superName = superName.replace('/', '.');
+ ClassFileEntry parent = context.findEntry(superName);
+ if(parent != null){
+ addIsBirthmark(name);
+ addIsBirthmark(superName);
+ }
+ else{
+ addFailur(new ClassNotFoundException(superName));
+ }
+ }
+ else{
+ try{
+ Class<?> clazz = context.findClass(name);
+ addISBirthmark(clazz);
+ } catch(ClassNotFoundException e){
+ addFailur(e);
+ }
}
- } catch (ClassNotFoundException ex){
- addFailur(ex);
}
}
+ private void addIsBirthmark(String className){
+ WellknownClassManager wcm = getEnvironment().getWellknownClassManager();
+ BirthmarkElement element;
+ if(wcm.isWellKnownClass(className)){
+ element = new BirthmarkElement(className);
+ }
+ else{
+ element = NullBirthmarkElement.getInstance();
+ }
+ addElement(element);
+ }
+
private void addISBirthmark(Class<?> c){
WellknownClassManager wcm = getEnvironment().getWellknownClassManager();
do{