use of org.eclipse.jdt.core.JavaModelException in project che by eclipse.
the class JavaElementLabelComposer method appendTypeLabel.
/**
* Appends the label for a type. Considers the T_* flags.
*
* @param type the element to render
* @param flags the rendering flags. Flags with names starting with 'T_' are considered.
*/
public void appendTypeLabel(IType type, long flags) {
if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED)) {
IPackageFragment pack = type.getPackageFragment();
if (!pack.isDefaultPackage()) {
appendPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS));
fBuffer.append('.');
}
}
IJavaElement parent = type.getParent();
if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) {
IType declaringType = type.getDeclaringType();
if (declaringType != null) {
appendTypeLabel(declaringType, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS));
fBuffer.append('.');
}
int parentType = parent.getElementType();
if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) {
// anonymous or local
appendElementLabel(parent, 0);
fBuffer.append('.');
}
}
String typeName;
boolean isAnonymous = false;
if (type.isLambda()) {
//$NON-NLS-1$
typeName = "() -> {...}";
try {
String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
if (superInterfaceSignatures.length > 0) {
typeName = typeName + ' ' + getSimpleTypeName(type, superInterfaceSignatures[0]);
}
} catch (JavaModelException e) {
//ignore
}
} else {
typeName = getElementName(type);
try {
isAnonymous = type.isAnonymous();
} catch (JavaModelException e1) {
// should not happen, but let's play safe:
isAnonymous = typeName.length() == 0;
}
if (isAnonymous) {
try {
if (parent instanceof IField && type.isEnum()) {
typeName = '{' + JavaElementLabels.ELLIPSIS_STRING + '}';
} else {
String supertypeName;
String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures();
if (superInterfaceSignatures.length > 0) {
supertypeName = getSimpleTypeName(type, superInterfaceSignatures[0]);
} else {
supertypeName = getSimpleTypeName(type, type.getSuperclassTypeSignature());
}
typeName = Messages.format(JavaUIMessages.JavaElementLabels_anonym_type, supertypeName);
}
} catch (JavaModelException e) {
//ignore
typeName = JavaUIMessages.JavaElementLabels_anonym;
}
}
}
fBuffer.append(typeName);
if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS)) {
if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && type.isResolved()) {
BindingKey key = new BindingKey(type.getKey());
if (key.isParameterizedType()) {
String[] typeArguments = key.getTypeArguments();
appendTypeArgumentSignaturesLabel(type, typeArguments, flags);
} else {
String[] typeParameters = Signature.getTypeParameters(key.toSignature());
appendTypeParameterSignaturesLabel(typeParameters, flags);
}
} else if (type.exists()) {
try {
appendTypeParametersLabels(type.getTypeParameters(), flags);
} catch (JavaModelException e) {
// ignore
}
}
}
// category
if (getFlag(flags, JavaElementLabels.T_CATEGORY) && type.exists()) {
try {
appendCategoryLabel(type, flags);
} catch (JavaModelException e) {
// ignore
}
}
// post qualification
if (getFlag(flags, JavaElementLabels.T_POST_QUALIFIED)) {
int offset = fBuffer.length();
fBuffer.append(JavaElementLabels.CONCAT_STRING);
IType declaringType = type.getDeclaringType();
if (declaringType == null && type.isBinary() && isAnonymous) {
// workaround for Bug 87165: [model] IType#getDeclaringType() does not work for anonymous binary type
String tqn = type.getTypeQualifiedName();
int lastDollar = tqn.lastIndexOf('$');
if (lastDollar != 1) {
//$NON-NLS-1$
String declaringTypeCF = tqn.substring(0, lastDollar) + ".class";
declaringType = type.getPackageFragment().getClassFile(declaringTypeCF).getType();
try {
ISourceRange typeSourceRange = type.getSourceRange();
if (declaringType.exists() && SourceRange.isAvailable(typeSourceRange)) {
IJavaElement realParent = declaringType.getTypeRoot().getElementAt(typeSourceRange.getOffset() - 1);
if (realParent != null) {
parent = realParent;
}
}
} catch (JavaModelException e) {
// ignore
}
}
}
if (declaringType != null) {
appendTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
int parentType = parent.getElementType();
if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) {
// anonymous or local
fBuffer.append('.');
appendElementLabel(parent, 0);
}
} else {
appendPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS);
}
if (getFlag(flags, JavaElementLabels.COLORIZE)) {
fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
}
}
}
use of org.eclipse.jdt.core.JavaModelException in project che by eclipse.
the class JavaElementLabelComposer method appendVariableLabel.
private boolean appendVariableLabel(IPackageFragmentRoot root, long flags) {
try {
IClasspathEntry rawEntry = root.getRawClasspathEntry();
if (rawEntry.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
IClasspathEntry entry = JavaModelUtil.getClasspathEntry(root);
if (entry.getReferencingEntry() != null) {
// not the variable entry itself, but a referenced entry
return false;
}
IPath path = rawEntry.getPath().makeRelative();
if (getFlag(flags, JavaElementLabels.REFERENCED_ROOT_POST_QUALIFIED)) {
int segements = path.segmentCount();
if (segements > 0) {
fBuffer.append(path.segment(segements - 1));
if (segements > 1) {
int offset = fBuffer.length();
fBuffer.append(JavaElementLabels.CONCAT_STRING);
fBuffer.append(path.removeLastSegments(1).toOSString());
if (getFlag(flags, JavaElementLabels.COLORIZE)) {
fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
}
}
} else {
fBuffer.append(path.toString());
}
} else {
fBuffer.append(path.toString());
}
int offset = fBuffer.length();
fBuffer.append(JavaElementLabels.CONCAT_STRING);
if (root.isExternal())
fBuffer.append(root.getPath().toOSString());
else
fBuffer.append(root.getPath().makeRelative().toString());
if (getFlag(flags, JavaElementLabels.COLORIZE)) {
fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE);
}
return true;
}
} catch (JavaModelException e) {
// problems with class path, ignore (bug 202792)
return false;
}
return false;
}
use of org.eclipse.jdt.core.JavaModelException in project che by eclipse.
the class ClasspathBuilder method generateClasspath.
/**
* Generates classpath with default entries.
*
* @param project
* java project which need to contain classpath
* @param sourceFolders
* list of the project's source folders
* @param library
* list of the project's library folders
* @throws ServerException
* happens when some problems with setting classpath
*/
public void generateClasspath(IJavaProject project, List<String> sourceFolders, List<String> library) throws ServerException {
List<IClasspathEntry> classpathEntries = new ArrayList<>();
//create classpath container for default JRE
IClasspathEntry jreContainer = JavaCore.newContainerEntry(new Path(JREContainerInitializer.JRE_CONTAINER));
classpathEntries.add(jreContainer);
addSourceFolders(project, sourceFolders, classpathEntries);
addJars(project, library, classpathEntries);
try {
project.setRawClasspath(classpathEntries.toArray(new IClasspathEntry[classpathEntries.size()]), null);
} catch (JavaModelException e) {
LOG.warn("Can't set classpath for: " + project.getProject().getFullPath().toOSString(), e);
throw new ServerException(e);
}
}
use of org.eclipse.jdt.core.JavaModelException in project che by eclipse.
the class IndexSelector method canSeeFocus.
private static int canSeeFocus(IJavaElement focus, JavaProject javaProject, char[][][] focusQualifiedNames) {
try {
if (focus == null)
return PROJECT_CAN_NOT_SEE_FOCUS;
if (focus.equals(javaProject))
return PROJECT_CAN_SEE_FOCUS;
if (focus instanceof JarPackageFragmentRoot) {
// focus is part of a jar
IPath focusPath = focus.getPath();
IClasspathEntry[] entries = javaProject.getExpandedClasspath();
for (int i = 0, length = entries.length; i < length; i++) {
IClasspathEntry entry = entries[i];
if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY && entry.getPath().equals(focusPath))
return PROJECT_CAN_SEE_FOCUS;
}
return PROJECT_CAN_NOT_SEE_FOCUS;
}
// look for dependent projects
IPath focusPath = ((JavaProject) focus).getProject().getFullPath();
IClasspathEntry[] entries = javaProject.getExpandedClasspath();
for (int i = 0, length = entries.length; i < length; i++) {
IClasspathEntry entry = entries[i];
if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT && entry.getPath().equals(focusPath)) {
if (focusQualifiedNames != null) {
// builder state is usable, hence use it to try to reduce project which can see the focus...
State projectState = (State) JavaModelManager.getJavaModelManager().getLastBuiltState(javaProject.getProject(), null);
if (projectState != null) {
Object[] values = projectState.getReferences().valueTable;
int vLength = values.length;
for (int j = 0; j < vLength; j++) {
if (values[j] == null)
continue;
ReferenceCollection references = (ReferenceCollection) values[j];
if (references.includes(focusQualifiedNames, null, null)) {
return PROJECT_CAN_SEE_FOCUS;
}
}
return PROJECT_SOURCE_CAN_NOT_SEE_FOCUS;
}
}
return PROJECT_CAN_SEE_FOCUS;
}
}
return PROJECT_CAN_NOT_SEE_FOCUS;
} catch (JavaModelException e) {
return PROJECT_CAN_NOT_SEE_FOCUS;
}
}
use of org.eclipse.jdt.core.JavaModelException in project che by eclipse.
the class IndexSelector method canSeeFocus.
/**
* Returns whether elements of the given project or jar can see the given focus (an IJavaProject or
* a JarPackageFragmentRot) either because the focus is part of the project or the jar, or because it is
* accessible throught the project's classpath
*/
public static int canSeeFocus(SearchPattern pattern, IPath projectOrJarPath) {
try {
IJavaModel model = JavaModelManager.getJavaModelManager().getJavaModel();
IJavaProject project = getJavaProject(projectOrJarPath, model);
IJavaElement[] focuses = getFocusedElementsAndTypes(pattern, project, null);
if (focuses.length == 0)
return PROJECT_CAN_NOT_SEE_FOCUS;
if (project != null) {
return canSeeFocus(focuses, (JavaProject) project, null);
}
// projectOrJarPath is a jar
// it can see the focus only if it is on the classpath of a project that can see the focus
int result = PROJECT_CAN_NOT_SEE_FOCUS;
IJavaProject[] allProjects = model.getJavaProjects();
for (int i = 0, length = allProjects.length; i < length; i++) {
JavaProject otherProject = (JavaProject) allProjects[i];
IClasspathEntry entry = otherProject.getClasspathEntryFor(projectOrJarPath);
if (entry != null && entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
int canSeeFocus = canSeeFocus(focuses, otherProject, null);
if (canSeeFocus == PROJECT_CAN_SEE_FOCUS)
return PROJECT_CAN_SEE_FOCUS;
if (canSeeFocus == PROJECT_SOURCE_CAN_NOT_SEE_FOCUS)
result = PROJECT_SOURCE_CAN_NOT_SEE_FOCUS;
}
}
return result;
} catch (JavaModelException e) {
return PROJECT_CAN_NOT_SEE_FOCUS;
}
}
Aggregations