Javassist: ClassPoolの親子関係とgetAndRename

package aop;

import javassist.*;

public class Javassist
{
  public static void main(String[] args) throws Exception
  {
    ClassPool parent = new ClassPool(true);
    ClassPool child = new ClassPool(parent);
    
    getAndRename(child, "hoge1");
    getAndRename(parent, "hoge2");
    getAndRename(child, "hoge3");
    
    child.appendSystemPath();
    getAndRename(child, "hoge4");
  }
  
  public static void getAndRename(ClassPool pool, String newName)
  {
    try
    {
      CtClass t = pool.getAndRename(InnerClass.class.getName(), newName);
      t.detach();
      System.out.println("[SUCCESS]name='" + newName + "'");
    }
    catch(Exception e)
    {
      System.out.println( "[FAILURE]name='" + newName + "', message='" + e.getMessage() + "'");
    }    
  }
  
  public static class InnerClass
  {
  }
}

実行結果

[FAILURE]name='hoge1', message='javassist.NotFoundException: aop.Javassist$InnerClass'
[SUCCESS]name='hoge2'
[FAILURE]name='hoge3', message='javassist.NotFoundException: aop.Javassist$InnerClass'
[SUCCESS]name='hoge4'

こういうもんなんだろうか。おかしいなあ。自身の検索パス探して見つからなかった場合は、親のClassPoolを見に行くとチュートリアルには書いてあったのだけれども。ちなみにgetAndRenameではなく、ただのgetなら大丈夫。もともとこういう動きが仕様どおりって事なんかいな? むーん。。