private static void checkAnnotationsJarAttached(@NotNull LocalInspectionToolSession session) { PsiFile file = session.getFile(); final Project project = file.getProject(); PsiClass event = JavaPsiFacade.getInstance(project) .findClass("java.awt.event.InputEvent", GlobalSearchScope.allScope(project)); if (event == null) return; // no jdk to attach PsiMethod[] methods = event.findMethodsByName("getModifiers", false); if (methods.length != 1) return; // no jdk to attach PsiMethod getModifiers = methods[0]; PsiAnnotation annotation = ExternalAnnotationsManager.getInstance(project) .findExternalAnnotation(getModifiers, MagicConstant.class.getName()); if (annotation != null) return; final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(getModifiers); if (virtualFile == null) return; // no jdk to attach final List<OrderEntry> entries = ProjectRootManager.getInstance(project).getFileIndex().getOrderEntriesForFile(virtualFile); Sdk jdk = null; for (OrderEntry orderEntry : entries) { if (orderEntry instanceof JdkOrderEntry) { jdk = ((JdkOrderEntry) orderEntry).getJdk(); if (jdk != null) break; } } if (jdk == null) return; // no jdk to attach if (!ApplicationManager.getApplication().isUnitTestMode()) { final Sdk finalJdk = jdk; ApplicationManager.getApplication() .invokeLater( new Runnable() { @Override public void run() { ApplicationManager.getApplication() .runWriteAction( new Runnable() { public void run() { attachJdkAnnotations(finalJdk); } }); } }, ModalityState.NON_MODAL, project.getDisposed()); } }
// need to shorten references in type argument list public static void shortenReference(final PsiFile file, final int offset) throws IncorrectOperationException { Project project = file.getProject(); final PsiDocumentManager manager = PsiDocumentManager.getInstance(project); Document document = manager.getDocument(file); if (document == null) { PsiUtilCore.ensureValid(file); LOG.error("No document for " + file); return; } manager.commitDocument(document); final PsiReference ref = file.findReferenceAt(offset); if (ref != null) { PsiElement element = ref.getElement(); if (element != null) { JavaCodeStyleManager.getInstance(project).shortenClassReferences(element); PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document); } } }
public PsiFile[] getRelatedFiles(final XPathFile file) { final XmlAttribute attribute = PsiTreeUtil.getContextOfType(file, XmlAttribute.class, false); assert attribute != null; final PsiFile psiFile = attribute.getContainingFile(); assert psiFile != null; final List<PsiFile> files = new ArrayList<PsiFile>(); psiFile.accept( new XmlRecursiveElementVisitor() { @Override public void visitXmlAttribute(XmlAttribute attribute) { final PsiFile[] _files = XsltSupport.getFiles(attribute); for (PsiFile _file : _files) { if (_file != file) files.add(_file); } } }); return PsiUtilCore.toPsiFileArray(files); }