@NotNull private List<AnnotationData> doCollect( @NotNull PsiModifierListOwner listOwner, boolean onlyWritable) { final List<PsiFile> files = findExternalAnnotationsFiles(listOwner); if (files == null) { return NO_DATA; } SmartList<AnnotationData> result = new SmartList<AnnotationData>(); String externalName = getExternalName(listOwner, false); if (externalName == null) return NO_DATA; for (PsiFile file : files) { if (!file.isValid()) continue; if (onlyWritable && !file.isWritable()) continue; MostlySingularMultiMap<String, AnnotationData> fileData = getDataFromFile(file); ContainerUtil.addAll(result, fileData.get(externalName)); } if (result.isEmpty()) { return NO_DATA; } result.trimToSize(); return result; }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("item".equals(qName)) { externalName = null; } else if ("annotation".equals(qName)) { if (externalName != null && annotationFQN != null) { String argumentsString = arguments.length() == 0 ? "" : intern(arguments.toString()); for (AnnotationData existingData : data.get(externalName)) { if (existingData.annotationClassFqName.equals(annotationFQN)) { duplicateError(file, externalName, "Duplicate annotation '" + annotationFQN + "' "); } } AnnotationData annData = internAnnotationData(new AnnotationData(annotationFQN, argumentsString)); data.add(externalName, annData); annotationFQN = null; arguments = null; } } }