blob: b7537c3df6f8cdc29a83055c6905840b6c264d1e [file] [log] [blame]
/*
* 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);
}
}