diff options
author | aclement <aclement> | 2004-04-08 13:14:48 +0000 |
---|---|---|
committer | aclement <aclement> | 2004-04-08 13:14:48 +0000 |
commit | 66be44ad6c64129239852054a3e75b0c5958035f (patch) | |
tree | b0dd87b6ebc6cf283881cde809135ca59972c06b | |
parent | b0d32cafba6241023d1efdc343a2744a5e25a00d (diff) | |
download | aspectj-66be44ad6c64129239852054a3e75b0c5958035f.tar.gz aspectj-66be44ad6c64129239852054a3e75b0c5958035f.zip |
Fix broken links in ajdoc. Part 4 : fix links to members of types
in other packages (again). Also, fix for nested types. Covers more than one
level of nesting. NOTE: the tool is currently not capable of producing
output for more than one level of nesting. Bug will be raised if Ron has
not already opened it.
-rw-r--r-- | ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java b/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java index 8c93a10ef..81d555257 100644 --- a/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java +++ b/ajdoc/src/org/aspectj/tools/ajdoc/HtmlDecorator.java @@ -475,27 +475,32 @@ class HtmlDecorator { String linkRef = ""; String linkName = rootDir.getAbsolutePath() + "/"; if (currDecl.getKind().isType()) { + // Handling type linkName = packagePath; - if (currDecl.getParent().getKind().isType()) { + if (isNestedType(currDecl)) { linkName = - linkName + currDecl.getParent().getName() + "."; + getAncestorComponents( + currDecl.getParent(), + linkName); } linkName = linkName + currDecl.getName(); linkRef = getRelativeComponent(packagePath) + packagePath; - // XXX: only one level of nested classes - if (currDecl.getParent().getKind().isType()) { + if (isNestedType(currDecl)) { linkRef = - linkRef + currDecl.getParent().getName() + "."; + getAncestorComponents( + currDecl.getParent(), + linkRef); } linkRef = linkRef + currDecl.toLabelString() + ".html"; } else { + // Handling member linkName = packagePath; - if (currDecl.getParent().getParent().getKind().isType()) { + if (isMemberOfNestedType(currDecl)) { linkName = - linkName - + currDecl.getParent().getParent().getName() - + "."; + getAncestorComponents( + currDecl.getParent().getParent(), + linkName); } linkName = linkName @@ -503,16 +508,12 @@ class HtmlDecorator { + "." + currDecl.getName(); - // Constructing the linkRef string requires a check - // to see if the parent type is actually nested inside - // another type. linkRef = getRelativeComponent(packagePath) + packagePath; - // XXX: only one level of nested classes - if (currDecl.getParent().getParent().getKind().isType()) { + if (isMemberOfNestedType(currDecl)) { linkRef = - linkRef - + currDecl.getParent().getParent().getName() - + "."; + getAncestorComponents( + currDecl.getParent().getParent(), + linkRef); } linkRef = linkRef @@ -533,6 +534,33 @@ class HtmlDecorator { return entry; } + private static boolean isNestedType(IProgramElement currDecl) { + return currDecl.getParent().getKind().isType(); + } + + private static boolean isMemberOfNestedType(IProgramElement currDecl) { + return currDecl.getParent().getParent().getKind().isType(); + } + + /** + * Convenience method for dealing with nested inner types. + * Add the parent types to the link path for the supplied + * <code>IProgramElement</code>. + * HEALTH WARNING : May contain traces of recursion. + * @param decl + * @param path + * @return + */ + private static String getAncestorComponents( + IProgramElement decl, + String path) { + String result = path; + if (decl.getParent().getKind().isType()) { + result = getAncestorComponents(decl.getParent(), result); + } + return result + decl.getName() + "."; + } + /** * Generates a relative directory path fragment that can be * used to navigate "upwards" from the directory location |