/* * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.psi.impl.cache.impl; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.PsiTestCase; import com.intellij.testFramework.PsiTestUtil; import java.io.File; import java.io.IOException; /** * @author max */ public class FindClassTest extends PsiTestCase { private VirtualFile myPrjDir1; private VirtualFile mySrcDir1; private VirtualFile myPackDir; @Override protected void setUp() throws Exception { super.setUp(); final File root = createTempDirectory(); WriteCommandAction.runWriteCommandAction(null, new Runnable() { @Override public void run() { try { VirtualFile rootVFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(root.getAbsolutePath().replace(File.separatorChar, '/')); myPrjDir1 = rootVFile.createChildDirectory(null, "prj1"); mySrcDir1 = myPrjDir1.createChildDirectory(null, "src1"); myPackDir = mySrcDir1.createChildDirectory(null, "p"); VirtualFile file1 = myPackDir.createChildData(null, "A.java"); VfsUtil.saveText(file1, "package p; public class A{ public void foo(); }"); PsiTestUtil.addContentRoot(myModule, myPrjDir1); PsiTestUtil.addSourceRoot(myModule, mySrcDir1); } catch (IOException e) { LOG.error(e); } } }); } public void testSimple() throws Exception { PsiClass psiClass = myJavaFacade.findClass("p.A"); assertEquals("p.A", psiClass.getQualifiedName()); } public void testClassUnderExcludedFolder() { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { PsiTestUtil.addExcludedRoot(myModule, myPackDir); PsiClass psiClass = myJavaFacade.findClass("p.A", GlobalSearchScope.allScope(myProject)); assertNull(psiClass); ModifiableRootModel rootModel = ModuleRootManager.getInstance(myModule).getModifiableModel(); final ContentEntry content = rootModel.getContentEntries()[0]; content.removeExcludeFolder(content.getExcludeFolders()[0]); rootModel.commit(); psiClass = myJavaFacade.findClass("p.A", GlobalSearchScope.allScope(myProject)); assertEquals("p.A", psiClass.getQualifiedName()); } }); } public void testClassUnderIgnoredFolder() { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { PsiClass psiClass = myJavaFacade.findClass("p.A", GlobalSearchScope.allScope(myProject)); assertEquals("p.A", psiClass.getQualifiedName()); assertTrue(psiClass.isValid()); FileTypeManager fileTypeManager = FileTypeManager.getInstance(); String ignoredFilesList = fileTypeManager.getIgnoredFilesList(); fileTypeManager.setIgnoredFilesList(ignoredFilesList + ";p"); try { assertFalse(psiClass.isValid()); } finally { fileTypeManager.setIgnoredFilesList(ignoredFilesList); } psiClass = myJavaFacade.findClass("p.A"); assertTrue(psiClass.isValid()); } }); } public void testSynchronizationAfterChange() { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { FileDocumentManager.getInstance().saveAllDocuments(); PsiClass psiClass = myJavaFacade.findClass("p.A"); final VirtualFile vFile = psiClass.getContainingFile().getVirtualFile(); File ioFile = VfsUtil.virtualToIoFile(vFile); ioFile.setLastModified(5); LocalFileSystem.getInstance().refresh(false); ModuleRootModificationUtil.setModuleSdk(myModule, null); psiClass = myJavaFacade.findClass("p.A"); assertNotNull(psiClass); } }); } }