]> source.dussan.org Git - javassist.git/commitdiff
improved the runtime check by CtClass.addMethod()
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Fri, 10 Apr 2009 06:43:23 +0000 (06:43 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Fri, 10 Apr 2009 06:43:23 +0000 (06:43 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@476 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/CtClassType.java

index 24735dbbe89852dee4c7fca4727563a0ec05be61..7ddee72da797d68115651632978327399f431c4a 100644 (file)
@@ -1229,11 +1229,19 @@ class CtClassType extends CtClass {
     public void addMethod(CtMethod m) throws CannotCompileException {
         checkModify();
         if (m.getDeclaringClass() != this)
-            throw new CannotCompileException("cannot add");
+            throw new CannotCompileException("bad declaring class");
+
+        int mod = m.getModifiers();
+        if ((getModifiers() & Modifier.INTERFACE) != 0) {
+            m.setModifiers(mod | Modifier.PUBLIC);
+            if ((mod & Modifier.ABSTRACT) == 0)
+                throw new CannotCompileException(
+                        "an interface method must be abstract: " + m.toString());
+        }
 
         getMembers().addMethod(m);
         getClassFile2().addMethod(m.getMethodInfo2());
-        if ((m.getModifiers() & Modifier.ABSTRACT) != 0)
+        if ((mod & Modifier.ABSTRACT) != 0)
             setModifiers(getModifiers() | Modifier.ABSTRACT);
     }