ソースを参照

changed the behavior of CtClassType.setSuperclass().

See javadoc comments.


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@54 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/rel_3_17_1_ga
chiba 20年前
コミット
ced4ae1f0e

+ 17
- 5
src/main/javassist/CtClass.java ファイルの表示

@@ -35,7 +35,7 @@ public abstract class CtClass {
/**
* The version number of this release.
*/
public static final String version = "2.7 beta 2";
public static final String version = "2.7 beta 3";

/**
* Prints the version number and the copyright notice.
@@ -415,14 +415,24 @@ public abstract class CtClass {
* It returns null if this object represents the
* <code>java.lang.Object</code> class and thus it does not have
* the super class.
*
* <p>If this object represents an interface, this method
* always returns the <code>java.lang.Object</code> class.
* To obtain the super interfaces
* extended by that interface, call <code>getInterfaces()</code>.
*/
public CtClass getSuperclass() throws NotFoundException {
return null;
}

/**
* Changes a super class. The new super class must be compatible
* with the old one.
* Changes a super class unless this object represents an interface.
* The new super class must be compatible with the old one.
*
* <p>If this object represents an interface, this method is equivalent
* to <code>addInterface()</code>; it appends <code>clazz</code> to
* the list of the super interfaces extended by that interface.
* Note that an interface can extend multiple super interfaces.
*/
public void setSuperclass(CtClass clazz) throws CannotCompileException {
checkModify();
@@ -430,14 +440,16 @@ public abstract class CtClass {

/**
* Obtains the class objects representing the interfaces implemented
* by the class.
* by the class or, if this object represents an interface, the interfaces
* extended by that interface.
*/
public CtClass[] getInterfaces() throws NotFoundException {
return new CtClass[0];
}

/**
* Sets interfaces.
* Sets implemented interfaces. If this object represents an interface,
* this method sets the interfaces extended by that interface.
*
* @param list a list of the <code>CtClass</code> objects
* representing interfaces, or

+ 4
- 1
src/main/javassist/CtClassType.java ファイルの表示

@@ -260,7 +260,10 @@ class CtClassType extends CtClass {

public void setSuperclass(CtClass clazz) throws CannotCompileException {
checkModify();
getClassFile2().setSuperclass(clazz.getName());
if (isInterface())
addInterface(clazz);
else
getClassFile2().setSuperclass(clazz.getName());
}

public CtClass[] getInterfaces() throws NotFoundException {

+ 11
- 1
src/main/javassist/bytecode/ClassFileWriter.java ファイルの表示

@@ -47,8 +47,18 @@ public class ClassFileWriter {
& ~AccessFlag.SYNCHRONIZED);
out.println(Modifier.toString(mod) + " class "
+ cf.getName() + " extends " + cf.getSuperclass());
out.println();

String[] infs = cf.getInterfaces();
if (infs != null && infs.length > 0) {
out.print(" implements ");
out.print(infs[0]);
for (int i = 1; i < infs.length; ++i)
out.print(", " + infs[i]);

out.println();
}

out.println();
ConstPool cp = cf.getConstPool();
list = cf.getFields();
n = list.size();

読み込み中…
キャンセル
保存