private static boolean shouldAbbreviateName(PsiPackage aPackage) { final Project project = aPackage.getProject(); ConcurrentMap<PsiPackage, Boolean> map = project.getUserData(SHOULD_ABBREV_PACK_KEY); if (map == null) { final ConcurrentMap<PsiPackage, Boolean> newMap = ContainerUtil.createConcurrentWeakMap(); map = ((UserDataHolderEx)project).putUserDataIfAbsent(SHOULD_ABBREV_PACK_KEY, newMap); if (map == newMap) { ((PsiManagerEx)PsiManager.getInstance(project)).registerRunnableToRunOnChange(new Runnable() { @Override public void run() { newMap.clear(); } }); } } Boolean ret = map.get(aPackage); if (ret != null) return ret; ret = scanPackages(aPackage, 1); map.put(aPackage, ret); return ret; }
public void testAllTheseConcurrentThreadsDoNotCrashAnything() throws Exception { long time = System.currentTimeMillis(); for (int i = 0; i < 20/*00000*/; i++) { //System.out.println("i = " + i); getPsiManager().dropResolveCaches(); ((PsiManagerEx)getPsiManager()).getFileManager().cleanupForNextTest(); DaemonCodeAnalyzer.getInstance(getProject()).restart(); configureFromFileText("Stress.java", text); List<HighlightInfo> infos = doHighlighting(); assertEmpty(DaemonAnalyzerTestCase.filter(infos, HighlightSeverity.ERROR)); UIUtil.dispatchAllInvocationEvents(); FileEditorManagerEx.getInstanceEx(getProject()).closeAllFiles(); } System.out.println(System.currentTimeMillis() - time+"ms"); }
public void testClassShouldNotDisappearWithoutEvents_NoDocument() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); final VirtualFile file = myFixture.addFileToProject("Foo.java", "class Foo {}").getVirtualFile(); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); long count1 = tracker.getJavaStructureModificationCount(); // gc softly-referenced file and document PlatformTestUtil.tryGcSoftlyReachableObjects(); assertNull(FileDocumentManager.getInstance().getCachedDocument(file)); assertNull(psiManager.getFileManager().getCachedPsiFile(file)); VfsUtil.saveText(file, ""); assertNull(FileDocumentManager.getInstance().getCachedDocument(file)); assertNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); assertFalse(count1 == tracker.getJavaStructureModificationCount()); }
public void testClassShouldNotDisappearWithoutEvents_VirtualFileDeleted() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); final VirtualFile file = myFixture.addFileToProject("Foo.java", "class Foo {}").getVirtualFile(); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); long count1 = tracker.getJavaStructureModificationCount(); // gc softly-referenced file and document PlatformTestUtil.tryGcSoftlyReachableObjects(); assertNull(FileDocumentManager.getInstance().getCachedDocument(file)); assertNull(psiManager.getFileManager().getCachedPsiFile(file)); file.delete(this); assertNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); assertFalse(count1 == tracker.getJavaStructureModificationCount()); }
public void testClassShouldNotDisappearWithoutEvents_ParentVirtualDirectoryDeleted() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); final VirtualFile file = myFixture.addFileToProject("foo/Foo.java", "package foo; class Foo {}").getVirtualFile(); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", GlobalSearchScope.allScope(getProject()))); long count1 = tracker.getJavaStructureModificationCount(); // gc softly-referenced file and document PlatformTestUtil.tryGcSoftlyReachableObjects(); assertNull(FileDocumentManager.getInstance().getCachedDocument(file)); assertNull(psiManager.getFileManager().getCachedPsiFile(file)); file.getParent().delete(this); assertNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", GlobalSearchScope.allScope(getProject()))); assertFalse(count1 == tracker.getJavaStructureModificationCount()); }
public void testVirtualFileRename_WithPsi() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); final VirtualFile file = myFixture.addFileToProject("foo/Foo.java", "package foo; class Foo {}").getVirtualFile(); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", scope)); long count1 = tracker.getModificationCount(); long hc = psiManager.findFile(file).hashCode(); long stamp1 = psiManager.findFile(file).getModificationStamp(); file.rename(this, "Bar.java"); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", scope)); assertTrue(count1 != tracker.getModificationCount()); assertTrue(stamp1 != psiManager.findFile(file).getModificationStamp()); assertEquals(hc, psiManager.findFile(file).hashCode()); }
public static boolean hasErrors(@NotNull final Project project, @NotNull final VirtualFile virtualFile) { if (project.isDisposed() || !virtualFile.isValid()) { return false; } return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() { @Override public Boolean compute() { if (project.isDisposed()) { return false; } PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(project); PsiFile psiFile = psiManager.getFileManager().findFile(virtualFile); return psiFile != null && hasErrors(psiFile); } }); }
public PsiManagerEx getManager() { Project project = ProjectCoreUtil.theOnlyOpenProject(); if (project != null) { return (PsiManagerEx)PsiManager.getInstance(project); } TreeElement element; for (element = this; element.getTreeParent() != null; element = element.getTreeParent()) { } if (element instanceof FileElement) { //TODO!! return element.getManager(); } else { if (getTreeParent() != null) { return getTreeParent().getManager(); } return null; } }
@Override void doActualPsiChange(@NotNull PsiFile file, @NotNull ASTDiffBuilder astDiffBuilder) { ASTNode child = myOldNode; ASTNode parent = myOldParent; PsiElement psiParent = parent.getPsi(); PsiElement psiChild = file.isPhysical() ? child.getPsi() : null; if (psiParent != null && psiChild != null) { PsiTreeChangeEventImpl event = new PsiTreeChangeEventImpl(file.getManager()); event.setParent(psiParent); event.setChild(psiChild); event.setFile(file); ((PsiManagerEx)file.getManager()).beforeChildRemoval(event); } astDiffBuilder.nodeDeleted(parent, child); ((TreeElement)child).rawRemove(); ((CompositeElement)parent).subtreeChanged(); DebugUtil.checkTreeStructure(parent); }
private static void reloadPsi(final VirtualFile file, final Project project) { final FileManagerImpl fileManager = (FileManagerImpl)((PsiManagerEx)PsiManager.getInstance(project)).getFileManager(); if (fileManager.findCachedViewProvider(file) != null) { UIUtil.invokeLaterIfNeeded(new Runnable() { @Override public void run() { if (project.isDisposed()) { return; } ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { fileManager.forceReload(file); } }); } }); } }
@Override public PsiType[] getParameterTypes() { ArrayList<PsiType> types = new ArrayList<PsiType>(); PsiManagerEx manager = getManager(); GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); for (GrDocMethodParameter parameter : getParameters()) { GrDocReferenceElement typeElement = parameter.getTypeElement(); try { PsiType type = factory.createTypeFromText(typeElement.getText(), this); type = TypesUtil.boxPrimitiveType(type, manager, scope); types.add(type); } catch (IncorrectOperationException e) { LOG.info(e); types.add(null); } } return types.toArray(PsiType.createArray(types.size())); }
@Override @NotNull public PsiJavaCodeReferenceElement[] getReferenceElements() { PsiClassType[] types = getReferencedTypes(); if (types.length == 0) return PsiJavaCodeReferenceElement.EMPTY_ARRAY; PsiManagerEx manager = getManager(); List<PsiJavaCodeReferenceElement> result = ContainerUtil.newArrayList(); for (PsiClassType type : types) { PsiClassType.ClassResolveResult resolveResult = type.resolveGenerics(); PsiClass resolved = resolveResult.getElement(); if (resolved != null) { result.add(new LightClassReference(manager, type.getCanonicalText(), resolved, resolveResult.getSubstitutor())); } } return result.toArray(new PsiJavaCodeReferenceElement[result.size()]); }
@Test public void testInMemoryFileHandledGracefully() { createBuildFile(new WorkspacePath("java/com/google/BUILD"), "glob(['**/*.java'])"); LightVirtualFile inMemoryFile = new LightVirtualFile("mockProjectViewFile", ProjectViewLanguage.INSTANCE, ""); FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).getFileManager(); fileManager.setViewProvider( inMemoryFile, fileManager.createFileViewProvider(inMemoryFile, true)); PsiFile psiFile = fileManager.findFile(inMemoryFile); FindUsages.findAllReferences(psiFile); }
private static void enableLanguageSupport(Project project) { OCLanguage.LANGUAGE_SUPPORT_DISABLED.set(project, false); UIUtil.invokeLaterIfNeeded( () -> ApplicationManager.getApplication() .runWriteAction( () -> { if (project.isDisposed()) { return; } Language langToReset = PlainTextLanguage.INSTANCE; FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(project)).getFileManager(); for (PsiFile file : fileManager.getAllCachedFiles()) { if (file.getLanguage() == langToReset) { VirtualFile vf = OCInclusionContextUtil.getVirtualFile(file); if (vf != null) { fileManager.setViewProvider(vf, null); } } } })); }
public static String decompile(PsiManager manager, VirtualFile file) { ClsFileImpl psiFile = null; final FileViewProvider provider = ((PsiManagerEx)manager).getFileManager().findViewProvider(file); if (provider != null) { final PsiFile psi = provider.getPsi(provider.getBaseLanguage()); if (psi instanceof ClsFileImpl) { psiFile = (ClsFileImpl)psi; } } if (psiFile == null) { psiFile = new ClsFileImpl((PsiManagerImpl)manager, new ClassFileViewProvider(manager, file), true); } final StringBuilder buffer = new StringBuilder(); psiFile.appendMirrorText(0, buffer); return buffer.toString(); }
@Override @NotNull public JavaResolveResult[] multiResolve(final boolean incompleteCode) { FileElement fileElement = SharedImplUtil.findFileElement(this); if (fileElement == null) { LOG.error("fileElement == null!"); return JavaResolveResult.EMPTY_ARRAY; } final PsiManagerEx manager = fileElement.getManager(); if (manager == null) { LOG.error("getManager() == null!"); return JavaResolveResult.EMPTY_ARRAY; } PsiFile file = SharedImplUtil.getContainingFile(fileElement); boolean valid = file != null && file.isValid(); if (!valid) { LOG.error("invalid!"); return JavaResolveResult.EMPTY_ARRAY; } Project project = manager.getProject(); final ResolveCache resolveCache = ResolveCache.getInstance(project); final ResolveResult[] results = resolveCache.resolveWithCaching(this, OurGenericsResolver.INSTANCE, true, incompleteCode, file); return results.length == 0 ? JavaResolveResult.EMPTY_ARRAY : (JavaResolveResult[])results; }
@Override @NotNull public JavaResolveResult[] multiResolve(boolean incompleteCode) { FileElement fileElement = SharedImplUtil.findFileElement(this); if (fileElement == null) { LOG.error("fileElement == null!"); return JavaResolveResult.EMPTY_ARRAY; } final PsiManagerEx manager = fileElement.getManager(); if (manager == null) { LOG.error("getManager() == null!"); return JavaResolveResult.EMPTY_ARRAY; } PsiFile file = SharedImplUtil.getContainingFile(fileElement); boolean valid = file != null && file.isValid(); if (!valid) { LOG.error("invalid!"); return JavaResolveResult.EMPTY_ARRAY; } Project project = manager.getProject(); ResolveResult[] results = ResolveCache.getInstance(project).resolveWithCaching(this, OurGenericsResolver.INSTANCE, true, incompleteCode, file); return results.length == 0 ? JavaResolveResult.EMPTY_ARRAY : (JavaResolveResult[])results; }
public JavaFileManagerImpl(final PsiManagerEx manager, final ProjectRootManager projectRootManager, MessageBus bus, final StartupManager startupManager) { super(manager, projectRootManager, bus); myConnection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, new FileDocumentManagerAdapter() { @Override public void fileWithNoDocumentChanged(@NotNull final VirtualFile file) { clearNonRepositoryMaps(); } }); startupManager.registerStartupActivity( new Runnable() { @Override public void run() { initialize(); } } ); }
private static boolean shouldAbbreviateName(PsiPackage aPackage) { final Project project = aPackage.getProject(); ConcurrentMap<PsiPackage, Boolean> map = project.getUserData(SHOULD_ABBREV_PACK_KEY); if (map == null) { final ConcurrentWeakHashMap<PsiPackage, Boolean> newMap = new ConcurrentWeakHashMap<PsiPackage, Boolean>(); map = ((UserDataHolderEx)project).putUserDataIfAbsent(SHOULD_ABBREV_PACK_KEY, newMap); if (map == newMap) { ((PsiManagerEx)PsiManager.getInstance(project)).registerRunnableToRunOnChange(new Runnable() { @Override public void run() { newMap.clear(); } }); } } Boolean ret = map.get(aPackage); if (ret != null) return ret; ret = scanPackages(aPackage, 1); map.put(aPackage, ret); return ret; }
public static void cleanupApplicationCaches(Project project) { if (project != null && !project.isDisposed()) { UndoManagerImpl globalInstance = (UndoManagerImpl)UndoManager.getGlobalInstance(); if (globalInstance != null) { globalInstance.dropHistoryInTests(); } ((UndoManagerImpl)UndoManager.getInstance(project)).dropHistoryInTests(); ((PsiManagerEx)PsiManager.getInstance(project)).getFileManager().cleanupForNextTest(); } LocalFileSystemImpl localFileSystem = (LocalFileSystemImpl)LocalFileSystem.getInstance(); if (localFileSystem != null) { localFileSystem.cleanupForNextTest(); } LocalHistoryImpl.getInstanceImpl().cleanupForNextTest(); PatchedWeakReference.clearAll(); }
public PsiType[] getParameterTypes() { ArrayList<PsiType> types = new ArrayList<PsiType>(); PsiManagerEx manager = getManager(); GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); for (GrDocMethodParameter parameter : getParameters()) { GrDocReferenceElement typeElement = parameter.getTypeElement(); try { PsiType type = factory.createTypeFromText(typeElement.getText(), this); type = TypesUtil.boxPrimitiveType(type, manager, scope); types.add(type); } catch (IncorrectOperationException e) { LOG.info(e); types.add(null); } } return types.toArray(new PsiType[types.size()]); }
public static void cleanupApplicationCaches(Project project) { if (project != null && !project.isDisposed()) { UndoManagerImpl globalInstance = (UndoManagerImpl)UndoManager.getGlobalInstance(); if (globalInstance != null) { globalInstance.dropHistoryInTests(); } ((UndoManagerImpl)UndoManager.getInstance(project)).dropHistoryInTests(); ((PsiManagerEx)PsiManager.getInstance(project)).getFileManager().cleanupForNextTest(); } LocalFileSystemImpl localFileSystem = (LocalFileSystemImpl)LocalFileSystem.getInstance(); if (localFileSystem != null) { localFileSystem.cleanupForNextTest(); } LocalHistory.getInstance().cleanupForNextTest(); }
@Override public PsiManagerEx getManager() { Project project = ProjectCoreUtil.theOnlyOpenProject(); if (project != null) { return PsiManagerEx.getInstanceEx(project); } PsiElement parent = this; while (parent instanceof ASTDelegatePsiElement) { parent = parent.getParent(); } if (parent == null) { throw new PsiInvalidElementAccessException(this); } return (PsiManagerEx)parent.getManager(); }
public PsiManagerEx getManager() { Project project = ProjectCoreUtil.theOnlyOpenProject(); if (project != null) { return PsiManagerEx.getInstanceEx(project); } TreeElement element; for (element = this; element.getTreeParent() != null; element = element.getTreeParent()) { } if (element instanceof FileElement) { //TODO!! return element.getManager(); } else { if (getTreeParent() != null) { return getTreeParent().getManager(); } return null; } }
private static void reloadPsi(final VirtualFile file, final Project project) { final FileManagerImpl fileManager = (FileManagerImpl)((PsiManagerEx)PsiManager.getInstance(project)).getFileManager(); if (fileManager.findCachedViewProvider(file) != null) { Runnable runnable = new Runnable() { @Override public void run() { WriteAction.run(new ThrowableRunnable<RuntimeException>() { @Override public void run() throws RuntimeException { fileManager.forceReload(file); } }); } }; if (ApplicationManager.getApplication().isDispatchThread()) { runnable.run(); } else { TransactionGuard.submitTransaction(project, runnable); } } }
public SemServiceImpl(Project project, PsiManager psiManager) { myProject = project; final MessageBusConnection connection = project.getMessageBus().connect(); connection.subscribe(PsiModificationTracker.TOPIC, new PsiModificationTracker.Listener() { @Override public void modificationCountChanged() { if (!isInsideAtomicChange()) { clearCache(); } } }); ((PsiManagerEx)psiManager).registerRunnableToRunOnChange(() -> { if (!isInsideAtomicChange()) { clearCache(); } }); LowMemoryWatcher.register(() -> { if (myCreatingSem.get() == 0) { clearCache(); } //System.out.println("SemService cache flushed"); }, project); }
public LuaCodeFragment(Project project, IElementType contentElementType, boolean isPhysical, @NonNls String name, CharSequence text, @Nullable PsiElement context) { super(TokenType.CODE_FRAGMENT, contentElementType, PsiManagerEx.getInstanceEx(project).getFileManager().createFileViewProvider( new LightVirtualFile(name, FileTypeManager.getInstance().getFileTypeByFileName(name), text), isPhysical) ); setContext(context); ((SingleRootFileViewProvider)getViewProvider()).forceCachedPsi(this); }
public JavaFileManagerImpl(Project project) { myManager = (PsiManagerEx)PsiManager.getInstance(project); myPackageIndex = PackageIndex.getInstance(myManager.getProject()); project.getMessageBus().connect().subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootAdapter() { @Override public void rootsChanged(final ModuleRootEvent event) { myNontrivialPackagePrefixes = null; } }); }
public ControlFlowFactory(PsiManagerEx psiManager) { psiManager.registerRunnableToRunOnChange(new Runnable(){ @Override public void run() { clearCache(); } }); }
@Override public PsiType getType() { final IElementType type = getLiteralElementType(); if (type == JavaTokenType.INTEGER_LITERAL) { return PsiType.INT; } if (type == JavaTokenType.LONG_LITERAL) { return PsiType.LONG; } if (type == JavaTokenType.FLOAT_LITERAL) { return PsiType.FLOAT; } if (type == JavaTokenType.DOUBLE_LITERAL) { return PsiType.DOUBLE; } if (type == JavaTokenType.CHARACTER_LITERAL) { return PsiType.CHAR; } if (type == JavaTokenType.STRING_LITERAL) { PsiManagerEx manager = getManager(); GlobalSearchScope resolveScope = ResolveScopeManager.getElementResolveScope(this); return PsiType.getJavaLangString(manager, resolveScope); } if (type == JavaTokenType.TRUE_KEYWORD || type == JavaTokenType.FALSE_KEYWORD) { return PsiType.BOOLEAN; } if (type == JavaTokenType.NULL_KEYWORD) { return PsiType.NULL; } return null; }
public void migrationModified(boolean terminated) { if (terminated) { myCurrentMigration = null; } ((PsiManagerEx)PsiManager.getInstance(myProject)).beforeChange(true); }
public PsiCodeFragmentImpl(Project project, IElementType contentElementType, boolean isPhysical, @NonNls String name, CharSequence text, @Nullable PsiElement context) { super(TokenType.CODE_FRAGMENT, contentElementType, ((PsiManagerEx)PsiManager.getInstance(project)).getFileManager().createFileViewProvider( new LightVirtualFile(name, FileTypeManager.getInstance().getFileTypeByFileName(name), text), isPhysical) ); myContext = context; ((SingleRootFileViewProvider)getViewProvider()).forceCachedPsi(this); myPhysical = isPhysical; }
public void testClassShouldNotDisappearWithoutEvents() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); long count0 = tracker.getJavaStructureModificationCount(); final VirtualFile file = myFixture.addFileToProject("Foo.java", "class Foo {}").getVirtualFile(); final Document document = FileDocumentManager.getInstance().getDocument(file); assertNotNull(document); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); long count1 = tracker.getJavaStructureModificationCount(); assertFalse(count1 == count0); document.deleteString(0, document.getTextLength()); // gc softly-referenced file and AST PlatformTestUtil.tryGcSoftlyReachableObjects(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); assertNull(psiManager.getFileManager().getCachedPsiFile(file)); assertEquals(count1, tracker.getJavaStructureModificationCount()); // no PSI changes yet //so the class should still be there assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); assertSize(1, ((PsiJavaFile)psiManager.findFile(file)).getClasses()); assertEquals("class Foo {}", psiManager.findFile(file).getText()); PlatformTestUtil.tryGcSoftlyReachableObjects(); PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); assertFalse(count1 == tracker.getJavaStructureModificationCount()); assertNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); }
public void testClassShouldNotAppearWithoutEvents_NoPsiDirectory() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); long count0 = tracker.getJavaStructureModificationCount(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); VirtualFile parentDir = myFixture.getTempDirFixture().getFile(""); assertNull(((FileManagerImpl)psiManager.getFileManager()).getCachedDirectory(parentDir)); File file = new File(myFixture.getTempDirPath(), "Foo.java"); FileUtil.writeToFile(file, "class Foo {}"); assertNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file)); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("Foo", GlobalSearchScope.allScope(getProject()))); assertFalse(count0 == tracker.getJavaStructureModificationCount()); }
public void testClassShouldNotAppearWithoutEvents_NoPsiGrandParentDirectory() throws IOException { PsiModificationTracker tracker = PsiManager.getInstance(getProject()).getModificationTracker(); long count0 = tracker.getJavaStructureModificationCount(); final PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(getProject()); VirtualFile parentDir = myFixture.getTempDirFixture().getFile(""); assertNull(((FileManagerImpl)psiManager.getFileManager()).getCachedDirectory(parentDir)); File file = new File(myFixture.getTempDirPath() + "/foo", "Foo.java"); FileUtil.writeToFile(file, "package foo; class Foo {}"); assertNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file)); assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass("foo.Foo", GlobalSearchScope.allScope(getProject()))); assertFalse(count0 == tracker.getJavaStructureModificationCount()); }
/** * If fileName is already associated any known file type returns it. * Otherwise asks user to select file type and associates it with fileName extension if any selected. * @return Known file type or null. Never returns {@link com.intellij.openapi.fileTypes.FileTypes#UNKNOWN}. */ @Nullable public static FileType getKnownFileTypeOrAssociate(@NotNull VirtualFile file, @Nullable Project project) { if (project != null && !(file instanceof FakeVirtualFile)) { ((PsiManagerEx)PsiManager.getInstance(project)).getFileManager().findFile(file); // autodetect text file if needed } FileType type = file.getFileType(); if (type == FileTypes.UNKNOWN) { type = getKnownFileTypeOrAssociate(file.getName()); } return type; }
public void testAutoDetectTextFileFromContents() throws IOException { File dir = createTempDirectory(); VirtualFile vDir = getVirtualFile(dir); VirtualFile vFile = createChildData(vDir, "test.xxxxxxxx"); setFileText(vFile, "text"); PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); assertEquals(PlainTextFileType.INSTANCE, vFile.getFileType()); // type autodetected during indexing PsiFile psiFile = ((PsiManagerEx)PsiManager.getInstance(getProject())).getFileManager().findFile(vFile); // autodetect text file if needed assertNotNull(psiFile); assertEquals(PlainTextFileType.INSTANCE, psiFile.getFileType()); }
@Override public PsiManagerEx getManager() { PsiElement parent = this; while (parent instanceof ASTDelegatePsiElement) { parent = parent.getParent(); } if (parent == null) { throw new PsiInvalidElementAccessException(this); } return (PsiManagerEx)parent.getManager(); }