diff options
Diffstat (limited to 'aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassUseMapper.java')
-rw-r--r-- | aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassUseMapper.java | 294 |
1 files changed, 0 insertions, 294 deletions
diff --git a/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassUseMapper.java b/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassUseMapper.java deleted file mode 100644 index 8c1a1ab89..000000000 --- a/aspectj-attic/ajdoc-src/org/aspectj/tools/doclets/standard/ClassUseMapper.java +++ /dev/null @@ -1,294 +0,0 @@ -/* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the debugger and core tools for the AspectJ(tm) - * programming language; see http://aspectj.org - * - * The contents of this file are subject to the Mozilla Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is AspectJ. - * - * The Initial Developer of the Original Code is Xerox Corporation. Portions - * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation. - * All Rights Reserved. - */ -package org.aspectj.tools.doclets.standard; - -import org.aspectj.ajdoc.AdviceDoc; -import org.aspectj.ajdoc.AspectDoc; -import org.aspectj.ajdoc.IntroducedDoc; -import org.aspectj.ajdoc.IntroducedSuperDoc; -import org.aspectj.ajdoc.IntroductionDoc; -import org.aspectj.ajdoc.PointcutDoc; -import org.aspectj.tools.ajdoc.Util; - -import com.sun.javadoc.ClassDoc; -import com.sun.javadoc.ExecutableMemberDoc; -import com.sun.javadoc.FieldDoc; -import com.sun.javadoc.MemberDoc; -import com.sun.javadoc.PackageDoc; -import com.sun.javadoc.Parameter; -import com.sun.javadoc.ProgramElementDoc; -import com.sun.javadoc.RootDoc; -import com.sun.javadoc.Type; -import com.sun.tools.doclets.ClassTree; -import com.sun.tools.doclets.DocletAbortException; - -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * Provides support for aspects. - * - * @author Jeff Palm - */ -public class ClassUseMapper { - - - /** - * Maps a ClassDoc to advice that return its type. - */ - public final Map classToAdviceReturn = new HashMap(); - - /** - * Maps a ClassDoc to advice that have its type - * are arguments. - */ - public final Map classToAdviceArgs = new HashMap(); - - /** - * Maps a ClassDoc to pointcuts that return its type. - */ - public final Map classToPointcutReturn = new HashMap(); - - /** - * Maps a ClassDoc to pointcuts that have its type - * as arguments. - */ - public final Map classToPointcutArgs = new HashMap(); - - /** - * Maps a ClassDoc to field introductions that - * are its type. - */ - public final Map classToFieldIntroductions = new HashMap(); - - /** - * Maps a ClassDoc to class introductions that - * are its type. - */ - public final Map classToClassIntroductions = new HashMap(); - - /** - * Maps a ClassDoc to interface introductions that - * are its type. - */ - public final Map classToInterfaceIntroductions = new HashMap(); - - /** - * Maps a ClassDoc to aspects that advise it. - */ - public final Map classToAdvisors = new HashMap(); - - /** - * Maps a ClassDoc to aspects that it dominates. - */ - public final Map classToDominatees = new HashMap(); - - /** - * Maps a ClassDoc to aspects that dominate it.. - */ - public final Map classToDominators = new HashMap(); - - - public static void generate(RootDoc root, ClassTree classtree) - throws DocletAbortException { - try { - - ClassUseMapper mapper = new ClassUseMapper(root, classtree); - - ClassDoc[] classes = root.classes(); - for (int i = 0; i < classes.length; i++) { - ClassUseWriter.generate(mapper, classes[i]); - } - PackageDoc[] pkgs = Standard.configuration().packages; - for (int i = 0; i < pkgs.length; i++) { - com.sun.tools.doclets.standard.PackageUseWriter. - generate(mapper.mapper, pkgs[i]); - } - } catch (Exception e) { - e.printStackTrace(); - Standard.configuration().standardmessage. - error("doclet.exception", e+"", - "creating class use tree"); - throw new DocletAbortException(); - } - } - - protected final com.sun.tools.doclets.standard.ClassUseMapper mapper; - - public ClassUseMapper(RootDoc root, ClassTree classtree) - throws Exception { - Constructor constr = - com.sun.tools.doclets.standard.ClassUseMapper.class. - getDeclaredConstructor(new Class[] { - com.sun.javadoc.RootDoc.class, - com.sun.tools.doclets.ClassTree.class, - }); - constr.setAccessible(true); - mapper = (com.sun.tools.doclets.standard.ClassUseMapper)constr. - newInstance(new Object[]{root, classtree}); - - classToPackageSave = new HashMap(); - for (Iterator i = mapper.classToPackage.keySet().iterator(); i.hasNext();) { - Object key = i.next(); - classToPackageSave.put(key, new HashSet((Collection) - mapper.classToPackage. - get(key))); - } - - finish(root, classtree); - } - - protected Object saved; - protected final Map classToPackageSave; - protected final com.sun.tools.doclets.standard.ClassUseMapper mapper - (ClassDoc classdoc) - { - Object noaspects = classToPackageSave.get(classdoc); - saved = mapper.classToPackage.get(classdoc); - mapper.classToPackage.put(classdoc, noaspects); - return mapper; - } - - protected void restore(ClassDoc classdoc) { - mapper.classToPackage.put(classdoc, saved); - } - - protected void finish(RootDoc root, ClassTree classtree) { - - ClassDoc[] classes = root.classes(); - for (int i = 0; i < classes.length; i++) { - ClassDoc cd = classes[i]; - if (cd instanceof org.aspectj.ajdoc.ClassDoc) { - org.aspectj.ajdoc.ClassDoc acd = (org.aspectj.ajdoc.ClassDoc)cd; - PointcutDoc[] pcs = acd.pointcuts(); - for (int j = 0; j < pcs.length; j++) { - PointcutDoc pd = pcs[j]; - mapExecutable(pd); - Type result = pd.resultType(); - if (result != null) { - ClassDoc tcd = result.asClassDoc(); - if (tcd != null) { - add(classToPointcutReturn, tcd, pd); - } - } - } - } - - if (cd instanceof AspectDoc) { - AspectDoc ad = (AspectDoc)cd; - AdviceDoc[] adocs = ad.advice(); - for (int j = 0; j < adocs.length; j++) { - AdviceDoc adoc = adocs[j]; - mapExecutable(adoc); - Type result = adoc.returnType(); - if (result != null) { - ClassDoc tcd = result.asClassDoc(); - if (tcd != null) { - add(classToAdviceReturn, tcd, adoc); - } - } - ExecutableMemberDoc[] emds = adoc.crosscuts(); - if (null != emds) { - for (int k = 0; k < emds.length; k++) { - ExecutableMemberDoc emd = emds[k]; - if (null != emd) { - ClassDoc tcd = emd.containingClass(); - ClassDoc fcd = adoc.containingClass(); - //TODO: This probably sucks!!! - if (!refList(classToAdvisors, tcd).contains(fcd)) { - add(classToAdvisors, tcd, fcd); - } - } - } - } - } - - IntroductionDoc[] ids = ad.introductions(); - for (int j = 0; j < ids.length; j++) { - IntroductionDoc id = ids[j]; - if (id instanceof IntroducedDoc) { - IntroducedDoc idd = (IntroducedDoc)id; - MemberDoc mem = idd.member(); - if (mem.isField()) { - FieldDoc fd = (FieldDoc)mem; - ClassDoc tcd = fd.type().asClassDoc(); - add(classToFieldIntroductions, tcd, fd); - } - } else if (id instanceof IntroducedSuperDoc) { - IntroducedSuperDoc idd = (IntroducedSuperDoc)id; - boolean isImplements = idd.isImplements(); - Type[] types = idd.types(); - for (int k = 0; k < types.length; k++) { - ClassDoc tcd = types[k].asClassDoc(); - add(isImplements ? - classToInterfaceIntroductions : - classToClassIntroductions, tcd, idd); - } - } - } - AspectDoc[] dominatees = ad.dominatees(); - for (int j = 0; j < dominatees.length; j++) { - add(classToDominatees, ad, dominatees[j]); - } - AspectDoc[] dominators = ad.dominators(); - for (int j = 0; j < dominators.length; j++) { - add(classToDominators, ad, dominators[j]); - } - } - } - } - - protected void mapExecutable(ExecutableMemberDoc em) { - Parameter[] params = em.parameters(); - List classargs = new ArrayList(); - Map argsmap = ((org.aspectj.ajdoc.MemberDoc)em).isAdvice() ? - classToAdviceArgs : classToPointcutArgs ; - for (int i = 0; i < params.length; i++) { - ClassDoc pcd = params[i].type().asClassDoc(); - if (pcd != null && !classargs.contains(pcd)) { - add(argsmap, pcd, em); - classargs.add(pcd); - } - } - } - - protected List refList(Map map, ClassDoc cd) { - return (List)Util.invoke(mapper, "refList", - new Class[]{java.util.Map.class, - com.sun.javadoc.ClassDoc.class}, - new Object[]{map, cd}); - } - - protected void add(Map map, ClassDoc cd, ProgramElementDoc ref) { - Util.invoke(mapper, "add", - new Class[]{java.util.Map.class, - com.sun.javadoc.ClassDoc.class, - com.sun.javadoc.ProgramElementDoc.class}, - new Object[]{map, cd, ref}); - } -} |