src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/SerializedFormBuilder.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 21,40 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package com.sun.tools.doclets.internal.toolkit.builders; import java.io.*; import java.util.*; ! import com.sun.javadoc.*; ! import com.sun.tools.doclets.internal.toolkit.*; ! import com.sun.tools.doclets.internal.toolkit.util.*; ! import com.sun.tools.javac.util.StringUtils; /** * Builds the serialized form. * * <p><b>This is NOT part of any supported API. * If you write code that depends on this, you do so at your own risk. --- 21,49 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! package jdk.javadoc.internal.doclets.toolkit.builders; import java.io.*; import java.util.*; ! import javax.lang.model.element.Element; ! import javax.lang.model.element.ExecutableElement; ! import javax.lang.model.element.PackageElement; ! import javax.lang.model.element.TypeElement; ! import javax.lang.model.element.VariableElement; + import com.sun.source.doctree.DocTree; + import com.sun.source.doctree.SerialFieldTree; + import jdk.javadoc.internal.doclets.toolkit.Content; + import jdk.javadoc.internal.doclets.toolkit.SerializedFormWriter; + import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper; + import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException; + import jdk.javadoc.internal.doclets.toolkit.util.Utils; + /** * Builds the serialized form. * * <p><b>This is NOT part of any supported API. * If you write code that depends on this, you do so at your own risk.
*** 70,95 **** /** * The header for the serial version UID. Save the string * here instead of the properties file because we do not want * this string to be localized. */ ! private static final String SERIAL_VERSION_UID_HEADER = "serialVersionUID:"; /** * The current package being documented. */ ! private PackageDoc currentPackage; /** * The current class being documented. */ ! private ClassDoc currentClass; /** * The current member being documented. */ ! protected MemberDoc currentMember; /** * The content that will be added to the serialized form documentation tree. */ private Content contentTree; --- 79,105 ---- /** * The header for the serial version UID. Save the string * here instead of the properties file because we do not want * this string to be localized. */ ! private static final String SERIAL_VERSION_UID = "serialVersionUID"; ! private static final String SERIAL_VERSION_UID_HEADER = SERIAL_VERSION_UID + ":"; /** * The current package being documented. */ ! private PackageElement currentPackage; /** * The current class being documented. */ ! private TypeElement currentTypeElement; /** * The current member being documented. */ ! protected Element currentMember; /** * The content that will be added to the serialized form documentation tree. */ private Content contentTree;
*** 113,123 **** /** * Build the serialized form. */ public void build() throws IOException { ! if (! serialClassFoundToDocument(configuration.root.classes())) { //Nothing to document. return; } try { writer = configuration.getWriterFactory().getSerializedFormWriter(); --- 123,135 ---- /** * Build the serialized form. */ public void build() throws IOException { ! SortedSet<TypeElement> rootclasses = new TreeSet<>(utils.makeGeneralPurposeComparator()); ! rootclasses.addAll(configuration.root.getIncludedClasses()); ! if (!serialClassFoundToDocument(rootclasses)) { //Nothing to document. return; } try { writer = configuration.getWriterFactory().getSerializedFormWriter();
*** 160,170 **** * @param node the XML element that specifies which components to document * @param serializedTree content tree to which the documentation will be added */ public void buildSerializedFormSummaries(XMLNode node, Content serializedTree) { Content serializedSummariesTree = writer.getSerializedSummariesHeader(); ! for (PackageDoc pkg : configuration.packages) { currentPackage = pkg; buildChildren(node, serializedSummariesTree); } serializedTree.addContent(writer.getSerializedContent( serializedSummariesTree)); --- 172,182 ---- * @param node the XML element that specifies which components to document * @param serializedTree content tree to which the documentation will be added */ public void buildSerializedFormSummaries(XMLNode node, Content serializedTree) { Content serializedSummariesTree = writer.getSerializedSummariesHeader(); ! for (PackageElement pkg : configuration.packages) { currentPackage = pkg; buildChildren(node, serializedSummariesTree); } serializedTree.addContent(writer.getSerializedContent( serializedSummariesTree));
*** 176,191 **** * @param node the XML element that specifies which components to document * @param serializedSummariesTree content tree to which the documentation will be added */ public void buildPackageSerializedForm(XMLNode node, Content serializedSummariesTree) { Content packageSerializedTree = writer.getPackageSerializedHeader(); ! String foo = currentPackage.name(); ! ClassDoc[] classes = currentPackage.allClasses(false); ! if (classes == null || classes.length == 0) { return; } ! if (!serialInclude(currentPackage)) { return; } if (!serialClassFoundToDocument(classes)) { return; } --- 188,202 ---- * @param node the XML element that specifies which components to document * @param serializedSummariesTree content tree to which the documentation will be added */ public void buildPackageSerializedForm(XMLNode node, Content serializedSummariesTree) { Content packageSerializedTree = writer.getPackageSerializedHeader(); ! SortedSet<TypeElement> classes = utils.getAllClassesUnfiltered(currentPackage); ! if (classes.isEmpty()) { return; } ! if (!serialInclude(utils, currentPackage)) { return; } if (!serialClassFoundToDocument(classes)) { return; }
*** 210,230 **** * @param node the XML element that specifies which components to document * @param packageSerializedTree content tree to which the documentation will be added */ public void buildClassSerializedForm(XMLNode node, Content packageSerializedTree) { Content classSerializedTree = writer.getClassSerializedHeader(); ! ClassDoc[] classes = currentPackage.allClasses(false); ! Arrays.sort(classes); ! for (ClassDoc classDoc : classes) { ! currentClass = classDoc; ! fieldWriter = writer.getSerialFieldWriter(currentClass); ! methodWriter = writer.getSerialMethodWriter(currentClass); ! if (currentClass.isClass() && currentClass.isSerializable()) { ! if (!serialClassInclude(currentClass)) { continue; } ! Content classTree = writer.getClassHeader(currentClass); buildChildren(node, classTree); classSerializedTree.addContent(classTree); } } packageSerializedTree.addContent(classSerializedTree); --- 221,240 ---- * @param node the XML element that specifies which components to document * @param packageSerializedTree content tree to which the documentation will be added */ public void buildClassSerializedForm(XMLNode node, Content packageSerializedTree) { Content classSerializedTree = writer.getClassSerializedHeader(); ! SortedSet<TypeElement> typeElements = utils.getAllClassesUnfiltered(currentPackage); ! for (TypeElement typeElement : typeElements) { ! currentTypeElement = typeElement; ! fieldWriter = writer.getSerialFieldWriter(currentTypeElement); ! methodWriter = writer.getSerialMethodWriter(currentTypeElement); ! if (utils.isClass(currentTypeElement) && utils.isSerializable(currentTypeElement)) { ! if (!serialClassInclude(utils, currentTypeElement)) { continue; } ! Content classTree = writer.getClassHeader(currentTypeElement); buildChildren(node, classTree); classSerializedTree.addContent(classTree); } } packageSerializedTree.addContent(classSerializedTree);
*** 236,250 **** * @param node the XML element that specifies which components to document * @param classTree content tree to which the serial UID information will be added */ public void buildSerialUIDInfo(XMLNode node, Content classTree) { Content serialUidTree = writer.getSerialUIDInfoHeader(); ! for (FieldDoc field : currentClass.fields(false)) { ! if (field.name().equals("serialVersionUID") && ! field.constantValueExpression() != null) { writer.addSerialUIDInfo(SERIAL_VERSION_UID_HEADER, ! field.constantValueExpression(), serialUidTree); break; } } classTree.addContent(serialUidTree); } --- 246,261 ---- * @param node the XML element that specifies which components to document * @param classTree content tree to which the serial UID information will be added */ public void buildSerialUIDInfo(XMLNode node, Content classTree) { Content serialUidTree = writer.getSerialUIDInfoHeader(); ! for (Element e : utils.getFieldsUnfiltered(currentTypeElement)) { ! VariableElement field = (VariableElement)e; ! if (field.getSimpleName().toString().compareTo(SERIAL_VERSION_UID) == 0 && ! field.getConstantValue() != null) { writer.addSerialUIDInfo(SERIAL_VERSION_UID_HEADER, ! utils.constantValueExpresion(field), serialUidTree); break; } } classTree.addContent(serialUidTree); }
*** 268,297 **** * @param node the XML element that specifies which components to document * @param classContentTree content tree to which the documentation will be added */ public void buildSerializableMethods(XMLNode node, Content classContentTree) { Content serializableMethodTree = methodWriter.getSerializableMethodsHeader(); ! MemberDoc[] members = currentClass.serializationMethods(); ! int membersLength = members.length; ! if (membersLength > 0) { ! for (int i = 0; i < membersLength; i++) { ! currentMember = members[i]; Content methodsContentTree = methodWriter.getMethodsContentHeader( ! (i == membersLength - 1)); buildChildren(node, methodsContentTree); serializableMethodTree.addContent(methodsContentTree); } } ! if (currentClass.serializationMethods().length > 0) { classContentTree.addContent(methodWriter.getSerializableMethods( configuration.getText("doclet.Serialized_Form_methods"), serializableMethodTree)); ! if (currentClass.isSerializable() && !currentClass.isExternalizable()) { ! if (currentClass.serializationMethods().length == 0) { Content noCustomizationMsg = methodWriter.getNoCustomizationMsg( ! configuration.getText( ! "doclet.Serializable_no_customization")); classContentTree.addContent(methodWriter.getSerializableMethods( configuration.getText("doclet.Serialized_Form_methods"), noCustomizationMsg)); } } --- 279,306 ---- * @param node the XML element that specifies which components to document * @param classContentTree content tree to which the documentation will be added */ public void buildSerializableMethods(XMLNode node, Content classContentTree) { Content serializableMethodTree = methodWriter.getSerializableMethodsHeader(); ! SortedSet<ExecutableElement> members = utils.serializationMethods(currentTypeElement); ! if (!members.isEmpty()) { ! for (ExecutableElement member : members) { ! currentMember = member; Content methodsContentTree = methodWriter.getMethodsContentHeader( ! currentMember == members.last()); buildChildren(node, methodsContentTree); serializableMethodTree.addContent(methodsContentTree); } } ! if (!utils.serializationMethods(currentTypeElement).isEmpty()) { classContentTree.addContent(methodWriter.getSerializableMethods( configuration.getText("doclet.Serialized_Form_methods"), serializableMethodTree)); ! if (utils.isSerializable(currentTypeElement) && !utils.isExternalizable(currentTypeElement)) { ! if (utils.serializationMethods(currentTypeElement).isEmpty()) { Content noCustomizationMsg = methodWriter.getNoCustomizationMsg( ! configuration.getText("doclet.Serializable_no_customization")); classContentTree.addContent(methodWriter.getSerializableMethods( configuration.getText("doclet.Serialized_Form_methods"), noCustomizationMsg)); } }
*** 303,323 **** * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildMethodSubHeader(XMLNode node, Content methodsContentTree) { ! methodWriter.addMemberHeader((MethodDoc)currentMember, methodsContentTree); } /** * Build the deprecated method description. * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildDeprecatedMethodInfo(XMLNode node, Content methodsContentTree) { ! methodWriter.addDeprecatedMemberInfo((MethodDoc) currentMember, methodsContentTree); } /** * Build the information for the method. * --- 312,332 ---- * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildMethodSubHeader(XMLNode node, Content methodsContentTree) { ! methodWriter.addMemberHeader((ExecutableElement)currentMember, methodsContentTree); } /** * Build the deprecated method description. * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildDeprecatedMethodInfo(XMLNode node, Content methodsContentTree) { ! methodWriter.addDeprecatedMemberInfo((ExecutableElement)currentMember, methodsContentTree); } /** * Build the information for the method. *
*** 336,363 **** * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildMethodDescription(XMLNode node, Content methodsContentTree) { ! methodWriter.addMemberDescription((MethodDoc) currentMember, methodsContentTree); } /** * Build the method tags. * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildMethodTags(XMLNode node, Content methodsContentTree) { ! methodWriter.addMemberTags((MethodDoc) currentMember, methodsContentTree); ! MethodDoc method = (MethodDoc)currentMember; ! if (method.name().compareTo("writeExternal") == 0 ! && method.tags("serialData").length == 0) { if (configuration.serialwarn) { ! configuration.getDocletSpecificMsg().warning( ! currentMember.position(), "doclet.MissingSerialDataTag", ! method.containingClass().qualifiedName(), method.name()); } } } /** --- 345,373 ---- * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildMethodDescription(XMLNode node, Content methodsContentTree) { ! methodWriter.addMemberDescription((ExecutableElement)currentMember, methodsContentTree); } /** * Build the method tags. * * @param node the XML element that specifies which components to document * @param methodsContentTree content tree to which the documentation will be added */ public void buildMethodTags(XMLNode node, Content methodsContentTree) { ! methodWriter.addMemberTags((ExecutableElement)currentMember, methodsContentTree); ! ExecutableElement method = (ExecutableElement)currentMember; ! if (method.getSimpleName().toString().compareTo("writeExternal") == 0 ! && utils.getSerialDataTrees(method).isEmpty()) { if (configuration.serialwarn) { ! TypeElement encl = (TypeElement) method.getEnclosingElement(); ! configuration.getDocletSpecificMsg().warning(currentMember, ! "doclet.MissingSerialDataTag", encl.getQualifiedName().toString(), ! method.getSimpleName().toString()); } } } /**
*** 365,400 **** * * @param node the XML element that specifies which components to document * @param classContentTree content tree to which the documentation will be added */ public void buildFieldHeader(XMLNode node, Content classContentTree) { ! if (currentClass.serializableFields().length > 0) { ! buildFieldSerializationOverview(currentClass, classContentTree); } } /** * Build the serialization overview for the given class. * ! * @param classDoc the class to print the overview for. * @param classContentTree content tree to which the documentation will be added */ ! public void buildFieldSerializationOverview(ClassDoc classDoc, Content classContentTree) { ! if (classDoc.definesSerializableFields()) { ! FieldDoc serialPersistentField = classDoc.serializableFields()[0]; // Check to see if there are inline comments, tags or deprecation // information to be printed. ! if (fieldWriter.shouldPrintOverview(serialPersistentField)) { Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader(); Content fieldsOverviewContentTree = fieldWriter.getFieldsContentHeader(true); ! fieldWriter.addMemberDeprecatedInfo(serialPersistentField, ! fieldsOverviewContentTree); if (!configuration.nocomment) { ! fieldWriter.addMemberDescription(serialPersistentField, ! fieldsOverviewContentTree); ! fieldWriter.addMemberTags(serialPersistentField, ! fieldsOverviewContentTree); } serializableFieldsTree.addContent(fieldsOverviewContentTree); classContentTree.addContent(fieldWriter.getSerializableFields( configuration.getText("doclet.Serialized_Form_class"), serializableFieldsTree)); --- 375,407 ---- * * @param node the XML element that specifies which components to document * @param classContentTree content tree to which the documentation will be added */ public void buildFieldHeader(XMLNode node, Content classContentTree) { ! if (!utils.serializableFields(currentTypeElement).isEmpty()) { ! buildFieldSerializationOverview(currentTypeElement, classContentTree); } } /** * Build the serialization overview for the given class. * ! * @param typeElement the class to print the overview for. * @param classContentTree content tree to which the documentation will be added */ ! public void buildFieldSerializationOverview(TypeElement typeElement, Content classContentTree) { ! if (utils.definesSerializableFields(typeElement)) { ! VariableElement ve = utils.serializableFields(typeElement).first(); // Check to see if there are inline comments, tags or deprecation // information to be printed. ! if (fieldWriter.shouldPrintOverview(ve)) { Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader(); Content fieldsOverviewContentTree = fieldWriter.getFieldsContentHeader(true); ! fieldWriter.addMemberDeprecatedInfo(ve, fieldsOverviewContentTree); if (!configuration.nocomment) { ! fieldWriter.addMemberDescription(ve, fieldsOverviewContentTree); ! fieldWriter.addMemberTags(ve, fieldsOverviewContentTree); } serializableFieldsTree.addContent(fieldsOverviewContentTree); classContentTree.addContent(fieldWriter.getSerializableFields( configuration.getText("doclet.Serialized_Form_class"), serializableFieldsTree));
*** 407,429 **** * * @param node the XML element that specifies which components to document * @param classContentTree content tree to which the documentation will be added */ public void buildSerializableFields(XMLNode node, Content classContentTree) { ! MemberDoc[] members = currentClass.serializableFields(); ! int membersLength = members.length; ! if (membersLength > 0) { Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader(); ! for (int i = 0; i < membersLength; i++) { ! currentMember = members[i]; ! if (!currentClass.definesSerializableFields()) { Content fieldsContentTree = fieldWriter.getFieldsContentHeader( ! (i == membersLength - 1)); buildChildren(node, fieldsContentTree); serializableFieldsTree.addContent(fieldsContentTree); ! } ! else { buildSerialFieldTagsInfo(serializableFieldsTree); } } classContentTree.addContent(fieldWriter.getSerializableFields( configuration.getText("doclet.Serialized_Form_fields"), --- 414,434 ---- * * @param node the XML element that specifies which components to document * @param classContentTree content tree to which the documentation will be added */ public void buildSerializableFields(XMLNode node, Content classContentTree) { ! SortedSet<VariableElement> members = utils.serializableFields(currentTypeElement); ! if (!members.isEmpty()) { Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader(); ! for (VariableElement ve : members) { ! currentMember = ve; ! if (!utils.definesSerializableFields(currentTypeElement)) { Content fieldsContentTree = fieldWriter.getFieldsContentHeader( ! currentMember == members.last()); buildChildren(node, fieldsContentTree); serializableFieldsTree.addContent(fieldsContentTree); ! } else { buildSerialFieldTagsInfo(serializableFieldsTree); } } classContentTree.addContent(fieldWriter.getSerializableFields( configuration.getText("doclet.Serialized_Form_fields"),
*** 436,449 **** * * @param node the XML element that specifies which components to document * @param fieldsContentTree content tree to which the documentation will be added */ public void buildFieldSubHeader(XMLNode node, Content fieldsContentTree) { ! if (!currentClass.definesSerializableFields()) { ! FieldDoc field = (FieldDoc) currentMember; ! fieldWriter.addMemberHeader(field.type().asClassDoc(), ! field.type().typeName(), field.type().dimension(), field.name(), fieldsContentTree); } } /** --- 441,455 ---- * * @param node the XML element that specifies which components to document * @param fieldsContentTree content tree to which the documentation will be added */ public void buildFieldSubHeader(XMLNode node, Content fieldsContentTree) { ! if (!utils.definesSerializableFields(currentTypeElement)) { ! VariableElement field = (VariableElement) currentMember; ! fieldWriter.addMemberHeader(utils.asTypeElement(field.asType()), ! utils.getTypeName(field.asType(), false), utils.getDimension(field.asType()), ! utils.getSimpleName(field), fieldsContentTree); } } /**
*** 451,463 **** * * @param node the XML element that specifies which components to document * @param fieldsContentTree content tree to which the documentation will be added */ public void buildFieldDeprecationInfo(XMLNode node, Content fieldsContentTree) { ! if (!currentClass.definesSerializableFields()) { ! FieldDoc field = (FieldDoc)currentMember; ! fieldWriter.addMemberDeprecatedInfo(field, fieldsContentTree); } } /** * Build the serial field tags information. --- 457,469 ---- * * @param node the XML element that specifies which components to document * @param fieldsContentTree content tree to which the documentation will be added */ public void buildFieldDeprecationInfo(XMLNode node, Content fieldsContentTree) { ! if (!utils.definesSerializableFields(currentTypeElement)) { ! fieldWriter.addMemberDeprecatedInfo((VariableElement)currentMember, ! fieldsContentTree); } } /** * Build the serial field tags information.
*** 466,491 **** */ public void buildSerialFieldTagsInfo(Content serializableFieldsTree) { if(configuration.nocomment){ return; } ! FieldDoc field = (FieldDoc)currentMember; // Process Serializable Fields specified as array of // ObjectStreamFields. Print a member for each serialField tag. // (There should be one serialField tag per ObjectStreamField // element.) ! SerialFieldTag[] tags = field.serialFieldTags(); ! Arrays.sort(tags); ! int tagsLength = tags.length; ! for (int i = 0; i < tagsLength; i++) { ! if (tags[i].fieldName() == null || tags[i].fieldType() == null) // ignore malformed @serialField tags continue; ! Content fieldsContentTree = fieldWriter.getFieldsContentHeader( ! (i == tagsLength - 1)); ! fieldWriter.addMemberHeader(tags[i].fieldTypeDoc(), ! tags[i].fieldType(), "", tags[i].fieldName(), fieldsContentTree); ! fieldWriter.addMemberDescription(tags[i], fieldsContentTree); serializableFieldsTree.addContent(fieldsContentTree); } } /** --- 472,515 ---- */ public void buildSerialFieldTagsInfo(Content serializableFieldsTree) { if(configuration.nocomment){ return; } ! VariableElement field = (VariableElement)currentMember; // Process Serializable Fields specified as array of // ObjectStreamFields. Print a member for each serialField tag. // (There should be one serialField tag per ObjectStreamField // element.) ! SortedSet<SerialFieldTree> tags = new TreeSet<>(utils.makeSerialFieldTreeComparator()); ! // sort the elements ! for (DocTree dt : utils.getSerialFieldTrees(field)) { ! SerialFieldTree st = (SerialFieldTree) dt; ! tags.add(st); ! } ! ! CommentHelper ch = utils.getCommentHelper(field); ! for (SerialFieldTree tag : tags) { ! if (tag.getName() == null || tag.getType() == null) // ignore malformed @serialField tags continue; ! Content fieldsContentTree = fieldWriter.getFieldsContentHeader(tag.equals(tags.last())); ! TypeElement te = ch.getReferencedClass(configuration, tag); ! String fieldType = ch.getReferencedMemberName(tag); ! if (te != null && utils.isPrimitive(te.asType())) { ! fieldType = utils.getTypeName(te.asType(), false); ! te = null; ! } ! String refSignature = ch.getReferencedSignature(tag); ! // TODO: Print the signature directly, if it is an array, the ! // current DocTree APIs makes it very hard to distinguish ! // an as these are returned back as "Array" a DeclaredType. ! if (refSignature.endsWith("[]")) { ! te = null; ! fieldType = refSignature; ! } ! fieldWriter.addMemberHeader(te, fieldType, "", ! tag.getName().getName().toString(), fieldsContentTree); ! fieldWriter.addMemberDescription(field, tag, fieldsContentTree); serializableFieldsTree.addContent(fieldsContentTree); } } /**
*** 496,574 **** */ public void buildFieldInfo(XMLNode node, Content fieldsContentTree) { if(configuration.nocomment){ return; } ! FieldDoc field = (FieldDoc)currentMember; ! ClassDoc cd = field.containingClass(); // Process default Serializable field. ! if ((field.tags("serial").length == 0) && ! field.isSynthetic() && configuration.serialwarn) { ! configuration.message.warning(field.position(), ! "doclet.MissingSerialTag", cd.qualifiedName(), ! field.name()); } fieldWriter.addMemberDescription(field, fieldsContentTree); fieldWriter.addMemberTags(field, fieldsContentTree); } /** ! * Return true if the given Doc should be included * in the serialized form. * ! * @param doc the Doc object to check for serializability. */ ! public static boolean serialInclude(Doc doc) { ! if (doc == null) { return false; } ! return doc.isClass() ? ! serialClassInclude((ClassDoc)doc) : ! serialDocInclude(doc); } /** ! * Return true if the given ClassDoc should be included * in the serialized form. * ! * @param cd the ClassDoc object to check for serializability. */ ! private static boolean serialClassInclude(ClassDoc cd) { ! if (cd.isEnum()) { return false; } ! try { ! cd.superclassType(); ! } catch (NullPointerException e) { ! //Workaround for null pointer bug in ClassDoc.superclassType(). ! return false; ! } ! if (cd.isSerializable()) { ! if (cd.tags("serial").length > 0) { ! return serialDocInclude(cd); ! } else if (cd.isPublic() || cd.isProtected()) { return true; } else { return false; } } return false; } /** ! * Return true if the given Doc should be included * in the serialized form. * ! * @param doc the Doc object to check for serializability. */ ! private static boolean serialDocInclude(Doc doc) { ! if (doc.isEnum()) { return false; } ! Tag[] serial = doc.tags("serial"); ! if (serial.length > 0) { ! String serialtext = StringUtils.toLowerCase(serial[0].text()); if (serialtext.contains("exclude")) { return false; } else if (serialtext.contains("include")) { return true; } --- 520,593 ---- */ public void buildFieldInfo(XMLNode node, Content fieldsContentTree) { if(configuration.nocomment){ return; } ! VariableElement field = (VariableElement)currentMember; ! TypeElement te = utils.getEnclosingTypeElement(currentMember); // Process default Serializable field. ! if ((utils.getSerialTrees(field).isEmpty()) /*&& ! field.isSynthetic()*/ && configuration.serialwarn) { ! configuration.message.warning(field, ! "doclet.MissingSerialTag", utils.getFullyQualifiedName(te), ! utils.getSimpleName(field)); } fieldWriter.addMemberDescription(field, fieldsContentTree); fieldWriter.addMemberTags(field, fieldsContentTree); } /** ! * Return true if the given Element should be included * in the serialized form. * ! * @param element the Element object to check for serializability. */ ! public static boolean serialInclude(Utils utils, Element element) { ! if (element == null) { return false; } ! return utils.isClass(element) ! ? serialClassInclude(utils, (TypeElement)element) ! : serialDocInclude(utils, element); } /** ! * Return true if the given TypeElement should be included * in the serialized form. * ! * @param te the TypeElement object to check for serializability. */ ! private static boolean serialClassInclude(Utils utils, TypeElement te) { ! if (utils.isEnum(te)) { return false; } ! if (utils.isSerializable(te)) { ! if (!utils.getSerialTrees(te).isEmpty()) { ! return serialDocInclude(utils, te); ! } else if (utils.isPublic(te) || utils.isProtected(te)) { return true; } else { return false; } } return false; } /** ! * Return true if the given Element should be included * in the serialized form. * ! * @param element the Element to check for serializability. */ ! private static boolean serialDocInclude(Utils utils, Element element) { ! if (utils.isEnum(element)) { return false; } ! List<? extends DocTree> serial = utils.getSerialTrees(element); ! if (!serial.isEmpty()) { ! CommentHelper ch = utils.getCommentHelper(element); ! String serialtext = Utils.toLowerCase(ch.getText(serial.get(0))); if (serialtext.contains("exclude")) { return false; } else if (serialtext.contains("include")) { return true; }
*** 575,592 **** } return true; } /** ! * Return true if any of the given classes have a @serialinclude tag. * ! * @param classes the classes to check. ! * @return true if any of the given classes have a @serialinclude tag. */ ! private boolean serialClassFoundToDocument(ClassDoc[] classes) { ! for (ClassDoc aClass : classes) { ! if (serialClassInclude(aClass)) { return true; } } return false; } --- 594,611 ---- } return true; } /** ! * Return true if any of the given typeElements have a @serialinclude tag. * ! * @param classes the typeElements to check. ! * @return true if any of the given typeElements have a @serialinclude tag. */ ! private boolean serialClassFoundToDocument(SortedSet<TypeElement> classes) { ! for (TypeElement aClass : classes) { ! if (serialClassInclude(utils, aClass)) { return true; } } return false; }