public void visitClassType(ClassType classType) {
   MapType mapType = MapTypeUtil.findMapType(classType);
   if (mapType != null) {
     setMapXmlType(mapType);
   } else {
     XmlType xmlType = null;
     EnunciateFreemarkerModel model = (EnunciateFreemarkerModel) FreemarkerModel.get();
     ClassDeclaration declaration = classType.getDeclaration();
     if (declaration != null) {
       XmlType knownType = model.getKnownType(declaration);
       if (knownType != null) {
         xmlType = knownType;
       } else {
         // type not known, not specified.  Last chance: look for the type definition.
         TypeDefinition typeDefinition = model.findTypeDefinition(declaration);
         if (typeDefinition != null) {
           xmlType = new XmlClassType(typeDefinition);
         }
       }
     }
     this.xmlType = xmlType;
     if (xmlType == null) {
       this.errorMessage =
           "Unknown xml type for class: "
               + classType
               + ".  If this is a class that is already compiled, you either need to specify an 'api-import' "
               + "element in the configuration file, or your class needs to be explicitly exported. See the FAQ "
               + "( http://tinyurl.com/cte3oq ) for details.";
     }
   }
 }
 public void visitDeclaredType(DeclaredType declaredType) {
   MapType mapType = MapTypeUtil.findMapType(declaredType);
   if (mapType != null) {
     setMapXmlType(mapType);
   } else {
     this.xmlType = null;
     this.errorMessage = "Unknown xml type: " + declaredType;
   }
 }
 public void visitInterfaceType(InterfaceType interfaceType) {
   AdapterType adapterType = AdapterUtil.findAdapterType(interfaceType.getDeclaration());
   if (adapterType != null) {
     adapterType.getAdaptingType().accept(this);
   } else {
     MapType mapType = MapTypeUtil.findMapType(interfaceType);
     if (mapType != null) {
       setMapXmlType(mapType);
     } else {
       this.xmlType = null;
       this.errorMessage = "An interface type cannot be an xml type.";
     }
   }
 }