svnno****@sourc*****
svnno****@sourc*****
2009年 10月 9日 (金) 10:07:22 JST
Revision: 3736 http://sourceforge.jp/projects/jiemamy/svn/view?view=rev&revision=3736 Author: ashigeru Date: 2009-10-09 10:07:22 +0900 (Fri, 09 Oct 2009) Log Message: ----------- privateメンバにドキュメンテーションコメントを整備中 Modified Paths: -------------- leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/InterfaceEnhancer.java leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/helper/EnhanceManipulator.java Modified: leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/InterfaceEnhancer.java =================================================================== --- leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/InterfaceEnhancer.java 2009-10-08 13:05:56 UTC (rev 3735) +++ leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/InterfaceEnhancer.java 2009-10-09 01:07:22 UTC (rev 3736) @@ -40,6 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.jiemamy.utils.enhancer.helper.AccessibilityValidator; import org.jiemamy.utils.enhancer.helper.AspectList; import org.jiemamy.utils.enhancer.helper.EnhanceManager; import org.jiemamy.utils.enhancer.helper.JavassistConverter; @@ -284,6 +285,7 @@ Map<CtClass, CtClass> targetProducts = createProductMap(); CtClass implementation = createFactory(targetProducts); + AccessibilityValidator.validate(implementation); Map<CtClass, AspectList<CtMethod>> allProductAspects = weavePointcutIntoAllProducts(enhanceManager, targetProducts); Modified: leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/helper/EnhanceManipulator.java =================================================================== --- leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/helper/EnhanceManipulator.java 2009-10-08 13:05:56 UTC (rev 3735) +++ leto/factory-enhancer/trunk/src/main/java/org/jiemamy/utils/enhancer/helper/EnhanceManipulator.java 2009-10-09 01:07:22 UTC (rev 3736) @@ -67,6 +67,7 @@ * 指定のクラスをコピーした新しいクラスを作成して返す。 * <p> * 作成したクラスは元のクラスの名称を変更したクラスで、すべての内容は元のクラスと同一である。 + * ただし、自身への参照は、コピー先への参照に貼りかえられる。 * </p> * @param klass コピー元のクラス * @return 作成したクラス @@ -134,7 +135,7 @@ * </p> * <ul> * <li> ファクトリインターフェースを実装した新しいファクトリ実装クラスの作成 </li> - * <li> ファクトリインターフェースに含まれるすべてのメソッドについて + * <li> ファクトリインターフェース、およびその親インターフェースに含まれるすべてのメソッドについて * <ul> * <li> そのメソッドが生成するプロダクトの実装に対し、そのメソッドと同一の引数リストを取るコンストラクタの追加 </li> * <li> 追加したコンストラクタを起動するメソッドをファクトリ実装クラス内に生成 </li> @@ -203,9 +204,24 @@ createFactoryMethod(implementation, factoryMethod, productImpl); } + /** + * 指定のファクトリメソッドに定義された仮引数と同じ仮引数を有するコンストラクタを指定のクラス上に生成する。 + * <p> + * 生成されたコンストラクタは、親クラスの引数をとらないコンストラクタを起動するのみである。 + * このため、{@code productImplementation}の親クラスは引数をとらないコンストラクタを + * 子に対して公開している必要がある。 + * なお、このメソッドによって生成されるコンストラクタは{@code public}となる。 + * </p> + * <p> + * 生成しようとするコンストラクタがすでに師弟のクラス上に存在する場合、この呼び出しは何も行わない。 + * </p> + * @param productImplementation コンストラクタを生成する対象のクラス + * @param factoryMethod 生成するコンストラクタと同様の仮引数リストを有するメソッド + * @throws EnhanceException コンストラクタの生成に失敗した場合 + */ private static void createProductConstructor( CtClass productImplementation, - CtMethod factoryMethod) throws EnhanceException { + CtBehavior factoryMethod) throws EnhanceException { assert productImplementation != null; assert factoryMethod != null; LOG.trace("Creating product constructor: {}", factoryMethod); @@ -242,6 +258,12 @@ } } + /** + * 指定のクラス上に指定の型をとる仮引数リストを持つようなコンストラクタが存在する場合にのみ{@code true}を返す。 + * @param aClass 対象コンストラクタを宣言するクラス + * @param parameterTypes 対象コンストラクタの仮引数型一覧 + * @return コンストラクタがすでに宣言されていれば{@code true} + */ private static boolean isConstructorExist(CtClass aClass, CtClass[] parameterTypes) { assert aClass != null; assert parameterTypes != null;