private boolean recordTypedefs(TypeDeclaration declaration) { SourceTypeBinding binding = declaration.binding; if (binding == null) { return false; } Annotation[] annotations = declaration.annotations; if (annotations != null) { if (declaration.binding.isAnnotationType()) { for (Annotation annotation : annotations) { String typeName = Extractor.getFqn(annotation); if (typeName == null) { continue; } if (Extractor.isNestedAnnotation(typeName)) { String fqn = new String(binding.readableName()); List<Annotation> list = mMap.get(fqn); if (list == null) { list = new ArrayList<Annotation>(2); mMap.put(fqn, list); } list.add(annotation); if (mRequireHide) { Javadoc javadoc = declaration.javadoc; if (javadoc != null) { StringBuffer stringBuffer = new StringBuffer(200); javadoc.print(0, stringBuffer); String documentation = stringBuffer.toString(); if (!documentation.contains("@hide")) { Extractor.warning( getFileName() + ": The typedef annotation " + fqn + " should specify @hide in a doc comment"); } } } if (mRequireSourceRetention && !Extractor.hasSourceRetention(annotations)) { Extractor.warning( getFileName() + ": The typedef annotation " + fqn + " should have @Retention(RetentionPolicy.SOURCE)"); } if (declaration.binding != null && (declaration.modifiers & ClassFileConstants.AccPublic) == 0) { StringBuilder sb = new StringBuilder(100); for (char c : declaration.binding.qualifiedPackageName()) { if (c == '.') { sb.append('/'); } else { sb.append(c); } } sb.append(File.separatorChar); for (char c : declaration.binding.qualifiedSourceName()) { if (c == '.') { sb.append('$'); } else { sb.append(c); } } mTypedefClasses.add(sb.toString()); } } } } } return true; }