/* * 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.psi; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NotNullLazyKey; import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author max */ public abstract class JavaPsiFacade { private static final NotNullLazyKey<JavaPsiFacade, Project> INSTANCE_KEY = ServiceManager.createLazyKey(JavaPsiFacade.class); public static JavaPsiFacade getInstance(Project project) { return INSTANCE_KEY.getValue(project); } public static PsiElementFactory getElementFactory(@NotNull Project project) { return getInstance(project).getElementFactory(); } /** * Searches the specified scope within the project for a class with the specified full-qualified * name and returns one if it is found. * * @param qualifiedName the full-qualified name of the class to find. * @param scope the scope to search. * @return the PSI class, or null if no class with such name is found. */ @Nullable public abstract PsiClass findClass(@NonNls @NotNull String qualifiedName, @NotNull GlobalSearchScope scope); /** * Searches the specified scope within the project for classes with the specified full-qualified * name and returns all found classes. * * @param qualifiedName the full-qualified name of the class to find. * @param scope the scope to search. * @return the array of found classes, or an empty array if no classes are found. */ @NotNull public abstract PsiClass[] findClasses(@NonNls @NotNull String qualifiedName, @NotNull GlobalSearchScope scope); /** * Searches the project for the package with the specified full-qualified name and returns one * if it is found. * * @param qualifiedName the full-qualified name of the package to find. * @return the PSI package, or null if no package with such name is found. */ @Nullable public abstract PsiPackage findPackage(@NonNls @NotNull String qualifiedName); /** * Returns the element factory for the project, which can be used to * create instances of Java and XML PSI elements. * * @return the element factory instance. */ @NotNull public abstract PsiElementFactory getElementFactory(); /** * Returns the factory for the project, which can be used to create instances of certain java constructs from their textual * representation. Elements created shall not be used to later intermix (like insert into) a PSI parsed from the user codebase * since no formatting to the user code style will be performed in this case. Please use {@link #getElementFactory()} instead, which * provides exactly same methods but ensures created instances will get properly formatted. * @return the parser facade. */ @NotNull public abstract PsiJavaParserFacade getParserFacade(); /** * Returns the resolve helper for the project, which can be used to resolve references * and check accessibility of elements. * * @return the resolve helper instance. */ @NotNull public abstract PsiResolveHelper getResolveHelper(); /** * Returns the name helper for the project, which can be used to validate * and parse Java identifiers. * * @return the name helper instance. */ @NotNull public abstract PsiNameHelper getNameHelper(); /** * Returns the constant expression evaluator for the project. * * @return the evaluator instance. */ @NotNull public abstract PsiConstantEvaluationHelper getConstantEvaluationHelper(); /** * Checks if the specified package name is part of the package prefix for * any of the modules in this project. * * @param packageName the package name to check. * @return true if it is part of the package prefix, false otherwise. */ public abstract boolean isPartOfPackagePrefix(@NotNull String packageName); /** * Checks if the specified PSI element belongs to the specified package. * * @param element the element to check the package for. * @param aPackage the package to check. * @return true if the element belongs to the package, false otherwise. */ public abstract boolean isInPackage(@NotNull PsiElement element, @NotNull PsiPackage aPackage); /** * Checks if the specified PSI elements belong to the same package. * * @param element1 the first element to check. * @param element2 the second element to check. * @return true if the elements are in the same package, false otherwise. */ public abstract boolean arePackagesTheSame(@NotNull PsiElement element1, @NotNull PsiElement element2); @NotNull public abstract Project getProject(); }