| /* |
| * 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; |
| |
| /** |
| * Represents a fragment of Java code which exists outside of a project structure (for example, |
| * in a foreign language code or in a user interface element other than the main source code editor). |
| */ |
| public interface JavaCodeFragment extends PsiImportHolder, PsiCodeFragment { |
| /** |
| * Returns the type corresponding to the <code>this</code> keyword in the code fragment. |
| * |
| * @return the type of <code>this</code> in the fragment. |
| */ |
| PsiType getThisType(); |
| |
| /** |
| * Sets the type corresponding to the <code>this</code> keyword in the code fragment. |
| * |
| * @param psiType the type of <code>this</code> in the fragment. |
| */ |
| void setThisType(PsiType psiType); |
| |
| /** |
| * Returns the type corresponding to the <code>super</code> keyword in the code fragment. |
| * |
| * @return the type of <code>super</code> in the fragment. |
| */ |
| PsiType getSuperType(); |
| |
| /** |
| * Sets the type corresponding to the <code>super</code> keyword in the code fragment. |
| * |
| * @param superType the type of <code>super</code> in the fragment. |
| */ |
| void setSuperType(PsiType superType); |
| |
| /** |
| * Returns the list of classes considered to be imported by the code fragment. |
| * |
| * @return the comma-separated list of full-qualified names of classes considered |
| * to be imported. |
| */ |
| String importsToString(); |
| |
| /** |
| * Adds the specified classes to the list of classes considered to be imported by the |
| * code fragment. |
| * |
| * @param imports the comma-separated list of full-qualified names of classes to import. |
| */ |
| void addImportsFromString(String imports); |
| |
| /** |
| * Sets the visibility checker which is used to determine the visibility of declarations |
| * from the code fragment. |
| * |
| * @param checker the checker instance. |
| */ |
| void setVisibilityChecker(VisibilityChecker checker); |
| |
| /** |
| * Gets the visibility checker which is used to determine the visibility of declarations |
| * from the code fragment. |
| * |
| * @return the checker instance. |
| */ |
| VisibilityChecker getVisibilityChecker(); |
| |
| /** |
| * Sets the exception handler which is used to determine which exceptions are considered handled |
| * in the context where the fragment is used. |
| * |
| * @param checker the exception handler instance. |
| */ |
| void setExceptionHandler(ExceptionHandler checker); |
| |
| /** |
| * Gets the exception handler which is used to determine which exceptions are considered handled |
| * in the context where the fragment is used. |
| * |
| * @return the exception handler instance. |
| */ |
| ExceptionHandler getExceptionHandler(); |
| |
| /** |
| * Interface used to determine the visibility of declarations from the code fragment. |
| */ |
| interface VisibilityChecker { |
| /** |
| * Returns the visibility of the specified declaration from the specified location. |
| * |
| * @param declaration the referenced declaration. |
| * @param place the location of the reference to the declaration. |
| * @return the visibility of the declaration. |
| */ |
| Visibility isDeclarationVisible(PsiElement declaration, PsiElement place); |
| |
| enum Visibility { |
| /** |
| * The declaration is visible from the location. |
| */ |
| VISIBLE, |
| |
| /** |
| * The declaration is not visible from the location. |
| */ |
| NOT_VISIBLE, |
| |
| /** |
| * The visibility of the declaration from the location is defined by Java scoping rules. |
| */ |
| DEFAULT_VISIBILITY |
| } |
| |
| /** |
| * The visibility checker which reports all declarations as visible. |
| * |
| * @since 5.0.2 |
| */ |
| VisibilityChecker EVERYTHING_VISIBLE = new VisibilityChecker() { |
| @Override |
| public Visibility isDeclarationVisible(PsiElement declaration, PsiElement place) { |
| return Visibility.VISIBLE; |
| } |
| }; |
| |
| VisibilityChecker PROJECT_SCOPE_VISIBLE = new VisibilityChecker() { |
| @Override |
| public Visibility isDeclarationVisible(PsiElement declaration, PsiElement place) { |
| return declaration.getManager().isInProject(declaration) ? Visibility.VISIBLE : Visibility.NOT_VISIBLE; |
| } |
| }; |
| } |
| |
| /** |
| * Interface used to determine which exceptions are considered handled |
| * in the context where the fragment is used. |
| */ |
| interface ExceptionHandler { |
| /** |
| * Checks if the specified exception is considered handled |
| * in the context where the fragment is used. |
| * |
| * @param exceptionType the type of the exception to check. |
| * @return true if the exception is handled, false otherwise. |
| */ |
| boolean isHandledException(PsiClassType exceptionType); |
| } |
| } |