Mirror of the JODE repository
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
jode/jode/src/net/sf/jode/type/ClassInfoType.java

105 lines
2.7 KiB

/* ClassInfoType Copyright (C) 1998-2002 Jochen Hoenicke.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; see the file COPYING.LESSER. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id$
*/
package net.sf.jode.type;
import net.sf.jode.bytecode.ClassInfo;
import net.sf.jode.GlobalOptions;
import java.lang.reflect.Modifier;
import java.io.IOException;
/**
* This class is the type representing a class loaded from a ClassPath.<p>
*
* @author Jochen Hoenicke */
public class ClassInfoType extends ClassType {
ClassInfo clazz;
ClassType superClass = null;
ClassType[] interfaces = null;
public ClassInfo getClazz() {
return clazz;
}
public ClassInfoType(ClassInfo clazz) {
super(TC_CLASS, clazz.getName());
this.clazz = clazz;
try {
clazz.load(ClassInfo.HIERARCHY);
} catch (IOException ex) {
clazz.guess(ClassInfo.HIERARCHY);
GlobalOptions.err.println
("Can't get full class hierarchy for "+clazz+
" types may be incorrect.");
GlobalOptions.err.println(ex.toString());
}
}
public boolean isUnknown() {
return clazz.isGuessed();
}
public boolean isFinal() {
return Modifier.isFinal(clazz.getModifiers());
}
public boolean isInterface() {
return clazz.isInterface();
}
public ClassType getSuperClass() {
if (clazz.isInterface())
return null;
if (superClass == null) {
ClassInfo superInfo = clazz.getSuperclass();
if (superInfo == null)
return null;
superClass = Type.tClass(superInfo);
}
return superClass;
}
public ClassType[] getInterfaces() {
if (interfaces == null) {
ClassInfo[] ifaceInfos = clazz.getInterfaces();
if (ifaceInfos.length == 0)
interfaces = EMPTY_IFACES;
else {
interfaces = new ClassType[ifaceInfos.length];
for (int i=0; i < interfaces.length; i++)
interfaces[i] = Type.tClass(ifaceInfos[i]);
}
}
return interfaces;
}
public ClassInfo getClassInfo() {
return clazz;
}
public boolean equals(Object o) {
if (o instanceof ClassInfoType)
return ((ClassInfoType) o).clazz == clazz;
return super.equals(o);
}
}