public void testDocumentGced() throws Exception { VirtualFile vFile = createFile(); PsiDocumentManagerImpl documentManager = getPsiDocumentManager(); long id = System.identityHashCode(documentManager.getDocument(getPsiManager().findFile(vFile))); documentManager.commitAllDocuments(); UIUtil.dispatchAllInvocationEvents(); UIUtil.dispatchAllInvocationEvents(); assertEmpty(documentManager.getUncommittedDocuments()); LeakHunter.checkLeak(documentManager, DocumentImpl.class); LeakHunter.checkLeak( documentManager, PsiFileImpl.class, new Processor<PsiFileImpl>() { @Override public boolean process(PsiFileImpl psiFile) { return psiFile.getViewProvider().getVirtualFile().getFileSystem() instanceof LocalFileSystem; } }); // Class.forName("com.intellij.util.ProfilingUtil").getDeclaredMethod("forceCaptureMemorySnapshot").invoke(null); Reference<Document> reference = vFile.getUserData(FileDocumentManagerImpl.DOCUMENT_KEY); assertNotNull(reference); for (int i = 0; i < 1000; i++) { UIUtil.dispatchAllInvocationEvents(); if (reference.get() == null) break; System.gc(); } assertNull(documentManager.getCachedDocument(getPsiManager().findFile(vFile))); Document newDoc = documentManager.getDocument(getPsiManager().findFile(vFile)); assertTrue(id != System.identityHashCode(newDoc)); }
public void testRangeMarkersAreWeakReferenced_NoVerify() throws Exception { final Document document = EditorFactory.getInstance().createDocument("[xxxxxxxxxxxxxx]"); for (int i = 0; i < 10; i++) { document.createRangeMarker(0, document.getTextLength()); } LeakHunter.checkLeak(document, RangeMarker.class); }