From 05d928f50a074db0ff6ce1eda2a3e0555f8bf47b Mon Sep 17 00:00:00 2001 From: Norman Walsh Date: Fri, 4 Oct 2024 12:10:46 +0100 Subject: [PATCH 1/2] Uniformly make sure @package is really the package name --- .../xmldoclet/scanners/XmlTypeElement.java | 47 ++----------------- .../saxonica/xmldoclet/utils/TypeUtils.java | 43 ++++++++++++++++- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/xmldoclet/src/main/java/com/saxonica/xmldoclet/scanners/XmlTypeElement.java b/xmldoclet/src/main/java/com/saxonica/xmldoclet/scanners/XmlTypeElement.java index 02ee6ff..58935f5 100644 --- a/xmldoclet/src/main/java/com/saxonica/xmldoclet/scanners/XmlTypeElement.java +++ b/xmldoclet/src/main/java/com/saxonica/xmldoclet/scanners/XmlTypeElement.java @@ -25,13 +25,10 @@ public XmlTypeElement(XmlProcessor xmlproc, TypeElement element) { public void scan(DocTree tree) { String s = element.getQualifiedName().toString(); - String pkgName = getPackage(element); - String typeName = getType(element); - Map attr = new HashMap<>(); attr.put("fullname", element.getQualifiedName().toString()); - attr.put("package", pkgName); - attr.put("name", typeName); + attr.put("package", TypeUtils.getPackage(element)); + attr.put("name", TypeUtils.getType(element)); attr.put("nesting", element.getNestingKind().toString().toLowerCase()); attr.putAll(modifierAttributes(element)); @@ -97,42 +94,6 @@ public void scan(DocTree tree) { builder.endElement(typeName()); } - /** - * Find the element's package. - *

For nested classes, we may have to look up several times.

- * @return the package name - */ - private String getPackage(Element element) { - Element enclosing = element.getEnclosingElement(); - - if (enclosing == null) { - return ""; - } - - if (enclosing instanceof PackageElement) { - return enclosing.toString(); - } - - return getPackage(enclosing); - } - - /** - * Find the name of this type; that's our ancestor names if this is a nested class. - * @param element The element - * @return The type name - */ - private String getType(Element element) { - Element enclosing = element.getEnclosingElement(); - if (enclosing instanceof TypeElement) { - String stype = getType(enclosing); - if (!"".equals(stype)) { - return stype + "." + element.getSimpleName().toString(); - } - return element.getSimpleName().toString(); - } - return element.getSimpleName().toString(); - } - /** * Find the implemented interfaces *

This includes the interfaces of any classes we extend.

@@ -234,9 +195,9 @@ private void showSuperclass(TypeElement element, DeclaredType superclass, Implem private void showInterfaces(TypeElement element, DeclaredType xinter, Implemented impl) { Map attr = new HashMap<>(); - attr.put("name", xinter.asElement().getSimpleName().toString()); + attr.put("name", TypeUtils.getType(xinter.asElement())); attr.put("fullname", xinter.asElement().toString()); - attr.put("package", xinter.asElement().getEnclosingElement().toString()); + attr.put("package", TypeUtils.getPackage(xinter.asElement())); builder.startElement("interface", attr); for (TypeMirror tm : xinter.getTypeArguments()) { diff --git a/xmldoclet/src/main/java/com/saxonica/xmldoclet/utils/TypeUtils.java b/xmldoclet/src/main/java/com/saxonica/xmldoclet/utils/TypeUtils.java index be5bb98..6ff8443 100644 --- a/xmldoclet/src/main/java/com/saxonica/xmldoclet/utils/TypeUtils.java +++ b/xmldoclet/src/main/java/com/saxonica/xmldoclet/utils/TypeUtils.java @@ -2,6 +2,9 @@ import com.saxonica.xmldoclet.builder.XmlProcessor; +import javax.lang.model.element.Element; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; import javax.lang.model.type.*; import java.util.HashMap; import java.util.Map; @@ -60,9 +63,9 @@ private static void primitiveType(XmlProcessor builder, String wrapper, TypeMirr private static void declaredType(XmlProcessor builder, String wrapper, DeclaredType dtype) { Map attr = new HashMap<>(); - attr.put("name", dtype.asElement().getSimpleName().toString()); + attr.put("name", getType(dtype.asElement())); attr.put("fullname", dtype.asElement().toString()); - attr.put("package", dtype.asElement().getEnclosingElement().toString()); + attr.put("package", getPackage(dtype.asElement())); builder.startElement(wrapper, attr); for (TypeMirror tm : dtype.getTypeArguments()) { @@ -73,6 +76,42 @@ private static void declaredType(XmlProcessor builder, String wrapper, DeclaredT builder.endElement(wrapper); } + /** + * Find the element's package. + *

For nested classes, we may have to look up several times.

+ * @return the package name + */ + public static String getPackage(Element element) { + Element enclosing = element.getEnclosingElement(); + + if (enclosing == null) { + return ""; + } + + if (enclosing instanceof PackageElement) { + return enclosing.toString(); + } + + return getPackage(enclosing); + } + + /** + * Find the name of this type; that's our ancestor names if this is a nested class. + * @param element The element + * @return The type name + */ + public static String getType(Element element) { + Element enclosing = element.getEnclosingElement(); + if (enclosing instanceof TypeElement) { + String stype = getType(enclosing); + if (!"".equals(stype)) { + return stype + "." + element.getSimpleName().toString(); + } + return element.getSimpleName().toString(); + } + return element.getSimpleName().toString(); + } + private static void wildcardType(XmlProcessor builder, String wrapper, WildcardType wtype) { Map attr = new HashMap<>(); From 1280292e0035240a9c27a4151f13facbef72542b Mon Sep 17 00:00:00 2001 From: Norman Walsh Date: Fri, 4 Oct 2024 12:11:35 +0100 Subject: [PATCH 2/2] Bump version and update README --- README.md | 5 +++++ gradle.properties | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d82faaa..b460e8c 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,11 @@ incomplete or incorrect, please [open an issue](https://github.com/Saxonica/xmld ## Change log +* **0.14.0** Fixed package name + + The package name was sometimes (e.g., in the superclass type) + incorrect (missed in the fix to [#10](https://github.com/Saxonica/xmldoclet/issues/10)). + * **0.13.0** Handle type parameters on methods, renamed a few attributes Extended support for type parameters to methods. On several elements, renamed diff --git a/gradle.properties b/gradle.properties index dd501de..ee9c050 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -docletVersion=0.13.0 +docletVersion=0.14.0 schemaVersion=0.13.0 docletTitle=XmlDoclet docletName=xmldoclet