/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.powermock.api.mockito.repackaged.cglib.core;
import org.powermock.api.mockito.repackaged.asm.ClassAdapter;
import org.powermock.api.mockito.repackaged.asm.ClassReader;
import java.util.ArrayList;
import java.util.List;
// TODO: optimize (ClassReader buffers entire class before accept)
public class ClassNameReader {
private static final EarlyExitException EARLY_EXIT = new EarlyExitException();
private ClassNameReader() {
}
public static String getClassName(ClassReader r) {
return getClassInfo(r)[0];
}
public static String[] getClassInfo(ClassReader r) {
final List array = new ArrayList();
try {
r.accept(new ClassAdapter(null) {
public void visit(int version,
int access,
String name,
String signature,
String superName,
String[] interfaces) {
array.add( name.replace('/', '.') );
if(superName != null){
array.add( superName.replace('/', '.') );
}
for(int i = 0; i < interfaces.length; i++ ){
array.add( interfaces[i].replace('/', '.') );
}
throw EARLY_EXIT;
}
}, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
} catch (EarlyExitException e) { }
return (String[])array.toArray( new String[]{} );
}
private static class EarlyExitException extends RuntimeException { }
}