From 3bdac9684c0717eb47a292ff50745d08be9df0e0 Mon Sep 17 00:00:00 2001 From: Evgeny Pasynkov Date: Wed, 30 May 2012 14:40:58 +0200 Subject: [PATCH] Move PsiExpressionEvaluator and register it in JavaCoreEnvironment --- .idea/inspectionProfiles/idea_default.xml | 3 + .../idea_default_no_spellchecker.xml | 3 + .../impl/file/impl/JavaFileManagerImpl.java | 4 +- .../intellij/core/CoreJavaFileManager.java | 23 +------ .../com/intellij/core/CorePackageIndex.java | 65 +++++++++++++++++++ .../core/JavaCoreProjectEnvironment.java | 24 ++++--- .../intellij/core/CoreProjectEnvironment.java | 2 +- 7 files changed, 92 insertions(+), 32 deletions(-) create mode 100644 java/java-psi-impl/src/com/intellij/core/CorePackageIndex.java diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml index 78549253c339..89047b57a1b8 100644 --- a/.idea/inspectionProfiles/idea_default.xml +++ b/.idea/inspectionProfiles/idea_default.xml @@ -594,6 +594,9 @@ diff --git a/.idea/inspectionProfiles/idea_default_no_spellchecker.xml b/.idea/inspectionProfiles/idea_default_no_spellchecker.xml index f22b5d38c38c..b86ca5504888 100644 --- a/.idea/inspectionProfiles/idea_default_no_spellchecker.xml +++ b/.idea/inspectionProfiles/idea_default_no_spellchecker.xml @@ -799,6 +799,9 @@ diff --git a/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java index 7a63930c04de..e75b0321d1fd 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java @@ -34,7 +34,7 @@ import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.file.PsiPackageImpl; import com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiUtilBase; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.Query; import com.intellij.util.containers.ConcurrentHashMap; import com.intellij.util.containers.ContainerUtil; @@ -186,7 +186,7 @@ public class JavaFileManagerImpl implements JavaFileManager, Disposable { private static boolean notClass(final PsiElement found) { if (found instanceof PsiClass) return false; - VirtualFile faultyContainer = PsiUtilBase.getVirtualFile(found); + VirtualFile faultyContainer = PsiUtilCore.getVirtualFile(found); LOG.error("Non class in class list: " + faultyContainer + ". found: " + found); if (faultyContainer != null && faultyContainer.isValid()) { FileBasedIndex.getInstance().requestReindex(faultyContainer); diff --git a/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java b/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java index ee05766fa04e..b6fcf28e23c9 100644 --- a/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java +++ b/java/java-psi-impl/src/com/intellij/core/CoreJavaFileManager.java @@ -16,18 +16,13 @@ package com.intellij.core; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.roots.PackageIndex; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem; -import com.intellij.openapi.vfs.local.CoreLocalFileSystem; import com.intellij.psi.*; import com.intellij.psi.impl.file.PsiPackageImpl; import com.intellij.psi.impl.file.impl.JavaFileManager; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.util.CollectionQuery; -import com.intellij.util.Query; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,19 +34,15 @@ import java.util.List; /** * @author yole */ -public class CoreJavaFileManager extends PackageIndex implements JavaFileManager { +public class CoreJavaFileManager implements JavaFileManager { private static final Logger LOG = Logger.getInstance("#com.intellij.core.CoreJavaFileManager"); - private final CoreLocalFileSystem myLocalFileSystem; - private final CoreJarFileSystem myJarFileSystem; private final List myClasspath = new ArrayList(); private final PsiManager myPsiManager; - public CoreJavaFileManager(PsiManager psiManager, CoreLocalFileSystem localFileSystem, CoreJarFileSystem jarFileSystem) { + public CoreJavaFileManager(PsiManager psiManager) { myPsiManager = psiManager; - myLocalFileSystem = localFileSystem; - myJarFileSystem = jarFileSystem; } private List roots() { @@ -91,16 +82,6 @@ public class CoreJavaFileManager extends PackageIndex implements JavaFileManager return null; } - @Override - public VirtualFile[] getDirectoriesByPackageName(@NotNull String packageName, boolean includeLibrarySources) { - return getDirsByPackageName(packageName, includeLibrarySources).toArray(VirtualFile.EMPTY_ARRAY); - } - - @Override - public Query getDirsByPackageName(@NotNull String packageName, boolean includeLibrarySources) { - return new CollectionQuery(findDirectoriesByPackageName(packageName)); - } - @Override public PsiClass findClass(@NotNull String qName, @NotNull GlobalSearchScope scope) { for (VirtualFile root : roots()) { diff --git a/java/java-psi-impl/src/com/intellij/core/CorePackageIndex.java b/java/java-psi-impl/src/com/intellij/core/CorePackageIndex.java new file mode 100644 index 000000000000..c20f234073e6 --- /dev/null +++ b/java/java-psi-impl/src/com/intellij/core/CorePackageIndex.java @@ -0,0 +1,65 @@ +/* + * 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.core; + +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.roots.PackageIndex; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.CollectionQuery; +import com.intellij.util.Query; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class CorePackageIndex extends PackageIndex { + private static final Logger LOG = Logger.getInstance("#com.intellij.core.CorePackageIndex"); + + private final List myClasspath = new ArrayList(); + + public CorePackageIndex() { + } + + private List roots() { + return myClasspath; + } + + private List findDirectoriesByPackageName(String packageName) { + List result = new ArrayList(); + String dirName = packageName.replace(".", "/"); + for (VirtualFile root : roots()) { + VirtualFile classDir = root.findFileByRelativePath(dirName); + if (classDir != null) { + result.add(classDir); + } + } + return result; + } + + @Override + public VirtualFile[] getDirectoriesByPackageName(@NotNull String packageName, boolean includeLibrarySources) { + return getDirsByPackageName(packageName, includeLibrarySources).toArray(VirtualFile.EMPTY_ARRAY); + } + + @Override + public Query getDirsByPackageName(@NotNull String packageName, boolean includeLibrarySources) { + return new CollectionQuery(findDirectoriesByPackageName(packageName)); + } + + public void addToClasspath(VirtualFile root) { + myClasspath.add(root); + } +} diff --git a/java/java-psi-impl/src/com/intellij/core/JavaCoreProjectEnvironment.java b/java/java-psi-impl/src/com/intellij/core/JavaCoreProjectEnvironment.java index 86d73bf6ecad..ac3cb98853e4 100644 --- a/java/java-psi-impl/src/com/intellij/core/JavaCoreProjectEnvironment.java +++ b/java/java-psi-impl/src/com/intellij/core/JavaCoreProjectEnvironment.java @@ -15,6 +15,7 @@ */ package com.intellij.core; +import com.intellij.mock.MockFileIndexFacade; import com.intellij.openapi.Disposable; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.PackageIndex; @@ -28,6 +29,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleSettingsFacade; import com.intellij.psi.impl.JavaPsiFacadeImpl; import com.intellij.psi.impl.JavaPsiImplementationHelper; import com.intellij.psi.impl.PsiElementFactoryImpl; +import com.intellij.psi.impl.file.impl.JavaFileManager; import com.intellij.psi.impl.source.resolve.JavaResolveCache; import com.intellij.psi.impl.source.resolve.PsiResolveHelperImpl; import org.jetbrains.annotations.NotNull; @@ -35,17 +37,19 @@ import org.jetbrains.annotations.NotNull; import java.io.File; public class JavaCoreProjectEnvironment extends CoreProjectEnvironment { - private final CoreJavaFileManager myFileManager; + private final JavaFileManager myFileManager; + private final PackageIndex myPackageIndex; public JavaCoreProjectEnvironment(Disposable parentDisposable, CoreApplicationEnvironment applicationEnvironment) { super(parentDisposable, applicationEnvironment); myFileManager = createCoreFileManager(); + myPackageIndex = createCorePackageIndex(); myProject.registerService(PsiElementFactory.class, new PsiElementFactoryImpl(myPsiManager)); myProject.registerService(JavaPsiImplementationHelper.class, new CoreJavaPsiImplementationHelper()); myProject.registerService(PsiResolveHelper.class, new PsiResolveHelperImpl(myPsiManager)); myProject.registerService(LanguageLevelProjectExtension.class, new CoreLanguageLevelProjectExtension()); - myProject.registerService(PackageIndex.class, myFileManager); + myProject.registerService(PackageIndex.class, myPackageIndex); myProject.registerService(JavaResolveCache.class, new JavaResolveCache(myMessageBus)); myProject.registerService(JavaCodeStyleSettingsFacade.class, new CoreJavaCodeStyleSettingsFacade()); myProject.registerService(JavaCodeStyleManager.class, new CoreJavaCodeStyleManager()); @@ -53,13 +57,17 @@ public class JavaCoreProjectEnvironment extends CoreProjectEnvironment { registerProjectExtensionPoint(PsiElementFinder.EP_NAME, PsiElementFinder.class); JavaPsiFacadeImpl javaPsiFacade = new JavaPsiFacadeImpl(myProject, myPsiManager, myFileManager, myMessageBus); - myProject.registerService(CoreJavaFileManager.class, myFileManager); + myProject.registerService(JavaFileManager.class, myFileManager); registerProjectComponent(JavaPsiFacade.class, javaPsiFacade); myProject.registerService(JavaPsiFacade.class, javaPsiFacade); } - protected CoreJavaFileManager createCoreFileManager() { - return new CoreJavaFileManager(myPsiManager, getEnvironment().getLocalFileSystem(), getEnvironment().getJarFileSystem()); + protected JavaFileManager createCoreFileManager() { + return new CoreJavaFileManager(myPsiManager); + } + + protected PackageIndex createCorePackageIndex() { + return new CorePackageIndex(); } public void addJarToClassPath (File path) { @@ -75,8 +83,8 @@ public class JavaCoreProjectEnvironment extends CoreProjectEnvironment { public void addSourcesToClasspath(@NotNull VirtualFile root) { assert root.isDirectory(); - myFileManager.addToClasspath(root); - myFileIndexFacade.addLibraryRoot(root); + ((CoreJavaFileManager)myFileManager).addToClasspath(root); + ((CorePackageIndex)myPackageIndex).addToClasspath(root); + ((MockFileIndexFacade)myFileIndexFacade).addLibraryRoot(root); } - } diff --git a/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java b/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java index 26b584b105fc..0175d223ceb4 100644 --- a/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java +++ b/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java @@ -41,7 +41,7 @@ public class CoreProjectEnvironment { private final Disposable myParentDisposable; private final CoreApplicationEnvironment myEnvironment; - protected final MockFileIndexFacade myFileIndexFacade; + protected final FileIndexFacade myFileIndexFacade; protected final PsiManagerImpl myPsiManager; protected final MockProject myProject; protected final MessageBusImpl myMessageBus;