/* * Copyright 2000-2014 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 import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.vfs.VfsUtil import com.intellij.psi.impl.source.PsiFileImpl import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.searches.OverridingMethodsSearch import com.intellij.psi.util.PsiTreeUtil import com.intellij.reference.SoftReference import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import java.util.concurrent.CountDownLatch /** * @author peter */ class StubAstSwitchTest extends LightCodeInsightFixtureTestCase { public void "test modifying file with stubs via VFS"() { PsiFileImpl file = (PsiFileImpl)myFixture.addFileToProject('Foo.java', 'class Foo {}') assert file.stub def cls = ((PsiJavaFile)file).classes[0] assert file.stub def oldCount = psiManager.modificationTracker.javaStructureModificationCount ApplicationManager.application.runWriteAction { file.virtualFile.setBinaryContent(file.virtualFile.contentsToByteArray()) } assert psiManager.modificationTracker.javaStructureModificationCount != oldCount assert !cls.valid assert file.stub assert cls != PsiTreeUtil.findElementOfClassAtOffset(file, 1, PsiClass, false) assert !file.stub } public void "test reachable psi classes remain valid when nothing changes"() { int count = 1000 List> classList = (0.. classList = (0..