| /* |
| * 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.mock.MockFileIndexFacade; |
| import com.intellij.openapi.Disposable; |
| import com.intellij.openapi.roots.LanguageLevelProjectExtension; |
| import com.intellij.openapi.roots.PackageIndex; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.psi.JavaPsiFacade; |
| import com.intellij.psi.PsiElementFactory; |
| import com.intellij.psi.PsiElementFinder; |
| import com.intellij.psi.PsiResolveHelper; |
| import com.intellij.psi.codeStyle.JavaCodeStyleManager; |
| 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; |
| |
| import java.io.File; |
| |
| public class JavaCoreProjectEnvironment extends CoreProjectEnvironment { |
| private final JavaFileManager myFileManager; |
| private final PackageIndex myPackageIndex; |
| |
| public JavaCoreProjectEnvironment(Disposable parentDisposable, CoreApplicationEnvironment applicationEnvironment) { |
| super(parentDisposable, applicationEnvironment); |
| |
| myProject.registerService(PsiElementFactory.class, new PsiElementFactoryImpl(myPsiManager)); |
| myProject.registerService(JavaPsiImplementationHelper.class, createJavaPsiImplementationHelper()); |
| myProject.registerService(PsiResolveHelper.class, new PsiResolveHelperImpl(myPsiManager)); |
| myProject.registerService(LanguageLevelProjectExtension.class, new CoreLanguageLevelProjectExtension()); |
| myProject.registerService(JavaResolveCache.class, new JavaResolveCache(myMessageBus)); |
| myProject.registerService(JavaCodeStyleSettingsFacade.class, new CoreJavaCodeStyleSettingsFacade()); |
| myProject.registerService(JavaCodeStyleManager.class, new CoreJavaCodeStyleManager()); |
| registerProjectExtensionPoint(PsiElementFinder.EP_NAME, PsiElementFinder.class); |
| |
| myPackageIndex = createCorePackageIndex(); |
| myProject.registerService(PackageIndex.class, myPackageIndex); |
| |
| myFileManager = createCoreFileManager(); |
| myProject.registerService(JavaFileManager.class, myFileManager); |
| |
| JavaPsiFacadeImpl javaPsiFacade = new JavaPsiFacadeImpl(myProject, myPsiManager, myFileManager, myMessageBus); |
| myProject.registerService(JavaPsiFacade.class, javaPsiFacade); |
| } |
| |
| protected CoreJavaPsiImplementationHelper createJavaPsiImplementationHelper() { |
| return new CoreJavaPsiImplementationHelper(myProject); |
| } |
| |
| protected JavaFileManager createCoreFileManager() { |
| return new CoreJavaFileManager(myPsiManager); |
| } |
| |
| protected PackageIndex createCorePackageIndex() { |
| return new CorePackageIndex(); |
| } |
| |
| @SuppressWarnings("UnusedDeclaration") |
| public void addJarToClassPath (File path) { |
| assert path.isFile(); |
| |
| final VirtualFile root = getEnvironment().getJarFileSystem().findFileByPath(path + "!/"); |
| if (root == null) { |
| throw new IllegalArgumentException("trying to add non-existing file to classpath: " + path); |
| } |
| |
| addSourcesToClasspath(root); |
| } |
| |
| public void addSourcesToClasspath(@NotNull VirtualFile root) { |
| assert root.isDirectory(); |
| ((CoreJavaFileManager)myFileManager).addToClasspath(root); |
| ((CorePackageIndex)myPackageIndex).addToClasspath(root); |
| ((MockFileIndexFacade)myFileIndexFacade).addLibraryRoot(root); |
| } |
| } |