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    }