/* * Copyright 2000-2012 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.dependencies; import com.intellij.JavaTestUtil; import com.intellij.analysis.AnalysisScope; import com.intellij.analysis.JavaAnalysisScope; import com.intellij.packageDependencies.BackwardDependenciesBuilder; import com.intellij.packageDependencies.DependenciesBuilder; import com.intellij.packageDependencies.FindDependencyUtil; import com.intellij.packageDependencies.ForwardDependenciesBuilder; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.PsiTestCase; import com.intellij.testFramework.PsiTestUtil; import com.intellij.usageView.UsageInfo; import com.intellij.usages.TextChunk; import com.intellij.usages.Usage; import com.intellij.usages.UsageInfo2UsageAdapter; import java.util.HashSet; import java.util.Set; /** * User: anna * Date: Jan 18, 2005 */ public class UsagesInAnalyzingDependenciesTest extends PsiTestCase{ @Override protected void setUp() throws Exception { super.setUp(); String root = JavaTestUtil.getJavaTestDataPath() + "/dependencies/search/" + getTestName(true); PsiTestUtil.removeAllRoots(myModule, IdeaTestUtil.getMockJdk17()); PsiTestUtil.createTestProjectStructure(myProject, myModule, root, myFilesToDelete); } public void testForwardPackageScope(){ final PsiPackage bPackage = JavaPsiFacade.getInstance(myPsiManager.getProject()).findPackage("com.b"); final DependenciesBuilder builder = new ForwardDependenciesBuilder(myProject, new JavaAnalysisScope(bPackage, null)); builder.analyze(); final Set searchFor = new HashSet(); searchFor.add(myJavaFacade.findClass("com.a.A", GlobalSearchScope.allScope(myProject)).getContainingFile()); final Set searchIn = new HashSet(); final PsiClass bClass = myJavaFacade.findClass("com.b.B", GlobalSearchScope.allScope(myProject)); searchIn.add(bClass.getContainingFile()); final PsiClass cClass = myJavaFacade.findClass("com.b.C", GlobalSearchScope.allScope(myProject)); searchIn.add(cClass.getContainingFile()); final UsageInfo[] usagesInfos = FindDependencyUtil.findDependencies(builder, searchIn, searchFor); final UsageInfo2UsageAdapter[] usages = UsageInfo2UsageAdapter.convert(usagesInfos); final String [] psiUsages = new String [usagesInfos.length]; for (int i = 0; i < usagesInfos.length; i++) { psiUsages[i] = toString(usages[i]); } checkResult(new String []{ "(2: 14) import com.a.A;", "(4: 3) A myA = new A();", "(4: 15) A myA = new A();", "(6: 9) myA.aa();", "(2: 14) import com.a.A;", "(4: 3) A myA = new A();", "(4: 15) A myA = new A();", "(6: 9) myA.aa();"}, psiUsages); } private static String toString(Usage usage) { TextChunk[] textChunks = usage.getPresentation().getText(); StringBuffer result = new StringBuffer(); for (TextChunk textChunk : textChunks) { result.append(textChunk); } return result.toString(); } public void testBackwardPackageScope(){ final PsiPackage bPackage = JavaPsiFacade.getInstance(myPsiManager.getProject()).findPackage("com.a"); final DependenciesBuilder builder = new BackwardDependenciesBuilder(myProject, new JavaAnalysisScope(bPackage, null)); builder.analyze(); final Set searchFor = new HashSet(); searchFor.add(myJavaFacade.findClass("com.a.A", GlobalSearchScope.allScope(myProject)).getContainingFile()); final Set searchIn = new HashSet(); final PsiClass bClass = myJavaFacade.findClass("com.b.B", GlobalSearchScope.allScope(myProject)); searchIn.add(bClass.getContainingFile()); final PsiClass cClass = myJavaFacade.findClass("com.a.C", GlobalSearchScope.allScope(myProject)); searchFor.add(cClass.getContainingFile()); final UsageInfo[] usagesInfos = FindDependencyUtil.findBackwardDependencies(builder, searchIn, searchFor); final UsageInfo2UsageAdapter[] usages = UsageInfo2UsageAdapter.convert(usagesInfos); final String [] psiUsages = new String [usagesInfos.length]; for (int i = 0; i < usagesInfos.length; i++) { psiUsages[i] = toString(usages[i]); } checkResult(new String []{"(4: 3) A myA = new A();", "(4: 15) A myA = new A();", "(5: 3) C myC = new C();", "(5: 15) C myC = new C();", "(7: 9) myA.aa();", "(8: 9) myC.cc();"}, psiUsages); } public void testForwardSimple(){ final DependenciesBuilder builder = new ForwardDependenciesBuilder(myProject, new AnalysisScope(myProject)); builder.analyze(); final Set searchIn = new HashSet(); final PsiClass aClass = myJavaFacade.findClass("A", GlobalSearchScope.allScope(myProject)); searchIn.add(aClass.getContainingFile()); final Set searchFor = new HashSet(); final PsiClass bClass = myJavaFacade.findClass("B", GlobalSearchScope.allScope(myProject)); searchFor.add(bClass.getContainingFile()); final UsageInfo[] usagesInfos = FindDependencyUtil.findDependencies(builder, searchIn, searchFor); final UsageInfo2UsageAdapter[] usages = UsageInfo2UsageAdapter.convert(usagesInfos); final String [] psiUsages = new String [usagesInfos.length]; for (int i = 0; i < usagesInfos.length; i++) { psiUsages[i] = toString(usages[i]); } checkResult(new String []{"(2: 3) B myB = new B();", "(2: 15) B myB = new B();", "(4: 9) myB.bb();"}, psiUsages); } private static void checkResult(final String[] usages, final String [] psiUsages) { assertEquals(usages.length , psiUsages.length); for (int i = 0; i < psiUsages.length; i++) { assertEquals(usages[i], psiUsages[i]); } } }