001 package railo.transformer.bytecode.util; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 006 import org.objectweb.asm.ClassReader; 007 import org.objectweb.asm.ClassVisitor; 008 009 import railo.commons.lang.StringUtil; 010 import railo.runtime.type.util.ListUtil; 011 012 public class SourceNameClassVisitor extends ClassVisitor { 013 014 private String sourceName; 015 016 public SourceNameClassVisitor(int arg0) { 017 super(arg0); 018 } 019 020 @Override 021 public void visitSource(String source, String debug) { 022 super.visitSource(source, debug); 023 if(!StringUtil.isEmpty(source)){ 024 String name=ListUtil.last(source, "/\\"); 025 if(StringUtil.endsWithIgnoreCase(name, ".cfc")) { 026 this.sourceName=name; 027 } 028 } 029 } 030 031 032 public static String getSourceName(Class clazz) throws IOException { 033 String name = "/"+clazz.getName().replace('.', '/')+".class"; 034 InputStream in=clazz.getResourceAsStream(name); 035 ClassReader classReader=new ClassReader(in); 036 SourceNameClassVisitor visitor = new SourceNameClassVisitor(4); 037 classReader.accept(visitor, 0); 038 return visitor.sourceName; 039 040 } 041 042 }