use of org.eclipse.jdt.core.IClasspathEntry in project che by eclipse.
the class JavaProject method areClasspathsEqual.
/**
* Compare current classpath with given one to see if any different.
* Note that the argument classpath contains its binary output.
* @param newClasspath IClasspathEntry[]
* @param newOutputLocation IPath
* @param otherClasspathWithOutput IClasspathEntry[]
* @return boolean
*/
private static boolean areClasspathsEqual(IClasspathEntry[] newClasspath, IPath newOutputLocation, IClasspathEntry[] otherClasspathWithOutput) {
if (otherClasspathWithOutput == null || otherClasspathWithOutput.length == 0)
return false;
int length = otherClasspathWithOutput.length;
if (length != newClasspath.length + 1)
// output is amongst file entries (last one)
return false;
// compare classpath entries
for (int i = 0; i < length - 1; i++) {
if (!otherClasspathWithOutput[i].equals(newClasspath[i]))
return false;
}
// compare binary outputs
IClasspathEntry output = otherClasspathWithOutput[length - 1];
if (output.getContentKind() != ClasspathEntry.K_OUTPUT || !output.getPath().equals(newOutputLocation))
return false;
return true;
}
use of org.eclipse.jdt.core.IClasspathEntry in project che by eclipse.
the class SetContainerOperation method verbose_set_container.
private void verbose_set_container() {
Util.verbose(//$NON-NLS-1$
"CPContainer SET - setting container\n" + " container path: " + this.containerPath + //$NON-NLS-1$
'\n' + //$NON-NLS-1$
" projects: {" + org.eclipse.jdt.internal.compiler.util.Util.toString(this.affectedProjects, new org.eclipse.jdt.internal.compiler.util.Util.Displayable() {
public String displayString(Object o) {
return ((IJavaProject) o).getElementName();
}
}) + //$NON-NLS-1$
"}\n values: {\n" + org.eclipse.jdt.internal.compiler.util.Util.toString(this.respectiveContainers, new org.eclipse.jdt.internal.compiler.util.Util.Displayable() {
public String displayString(Object o) {
//$NON-NLS-1$
StringBuffer buffer = new StringBuffer(" ");
if (o == null) {
//$NON-NLS-1$
buffer.append("<null>");
return buffer.toString();
}
IClasspathContainer container = (IClasspathContainer) o;
buffer.append(container.getDescription());
//$NON-NLS-1$
buffer.append(" {\n");
IClasspathEntry[] entries = container.getClasspathEntries();
if (entries != null) {
for (int i = 0; i < entries.length; i++) {
//$NON-NLS-1$
buffer.append(" ");
buffer.append(entries[i]);
buffer.append('\n');
}
}
//$NON-NLS-1$
buffer.append(" }");
return buffer.toString();
}
}) + //$NON-NLS-1$
"\n }");
}
use of org.eclipse.jdt.core.IClasspathEntry in project che by eclipse.
the class ClasspathEntry method validateClasspathEntry.
// /**
// * Returns a Java model status describing the problem related to this classpath entry if any,
// * a status object with code <code>IStatus.OK</code> if the entry is fine (that is, if the
// * given classpath entry denotes a valid element to be referenced onto a classpath).
// *
// * @param project the given java project
// * @param entry the given classpath entry
// * @param checkSourceAttachment a flag to determine if source attachment should be checked
// * @param referredByContainer flag indicating whether the given entry is referred by a classpath container
// * @return a java model status describing the problem related to this classpath entry if any, a status object with code <code>IStatus
// .OK</code> if the entry is fine
// */
// public static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, boolean checkSourceAttachment,
// boolean referredByContainer){
// if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
// JavaModelManager.getJavaModelManager().removeFromInvalidArchiveCache(entry.getPath());
// }
// IJavaModelStatus status = validateClasspathEntry(project, entry, null, checkSourceAttachment, referredByContainer);
// // https://bugs.eclipse.org/bugs/show_bug.cgi?id=171136 and https://bugs.eclipse.org/bugs/show_bug.cgi?id=300136
// // Ignore class path errors from optional entries.
// int statusCode = status.getCode();
// if ( (statusCode == IJavaModelStatusConstants.INVALID_CLASSPATH ||
// statusCode == IJavaModelStatusConstants.CP_CONTAINER_PATH_UNBOUND ||
// statusCode == IJavaModelStatusConstants.CP_VARIABLE_PATH_UNBOUND ||
// statusCode == IJavaModelStatusConstants.INVALID_PATH) &&
// ((ClasspathEntry) entry).isOptional())
// return JavaModelStatus.VERIFIED_OK;
// return status;
// }
private static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, IClasspathContainer entryContainer, boolean checkSourceAttachment, boolean referredByContainer) {
IPath path = entry.getPath();
// Build some common strings for status message
String projectName = project.getElementName();
String entryPathMsg = projectName.equals(path.segment(0)) ? path.removeFirstSegments(1).makeRelative().toString() : path.toString();
switch(entry.getEntryKind()) {
// container entry check
case IClasspathEntry.CPE_CONTAINER:
if (path.segmentCount() >= 1) {
try {
IJavaModelStatus status = null;
// Validate extra attributes
IClasspathAttribute[] extraAttributes = entry.getExtraAttributes();
if (extraAttributes != null) {
int length = extraAttributes.length;
HashSet set = new HashSet(length);
for (int i = 0; i < length; i++) {
String attName = extraAttributes[i].getName();
if (!set.add(attName)) {
status = new JavaModelStatus(IJavaModelStatusConstants.NAME_COLLISION, Messages.bind(Messages.classpath_duplicateEntryExtraAttribute, new String[] { attName, entryPathMsg, projectName }));
break;
}
}
}
IClasspathContainer container = JavaModelManager.getJavaModelManager().getClasspathContainer(path, project);
// container retrieval is performing validation check on container entry kinds.
if (container == null) {
if (status != null)
return status;
return new JavaModelStatus(IJavaModelStatusConstants.CP_CONTAINER_PATH_UNBOUND, project, path);
} else if (container == JavaModelManager.CONTAINER_INITIALIZATION_IN_PROGRESS) {
// don't create a marker if initialization is in progress (case of cp initialization batching)
return JavaModelStatus.VERIFIED_OK;
}
IClasspathEntry[] containerEntries = container.getClasspathEntries();
if (containerEntries != null) {
for (int i = 0, length = containerEntries.length; i < length; i++) {
IClasspathEntry containerEntry = containerEntries[i];
int kind = containerEntry == null ? 0 : containerEntry.getEntryKind();
if (containerEntry == null || kind == IClasspathEntry.CPE_SOURCE || kind == IClasspathEntry.CPE_VARIABLE || kind == IClasspathEntry.CPE_CONTAINER) {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CP_CONTAINER_ENTRY, project, path);
}
IJavaModelStatus containerEntryStatus = validateClasspathEntry(project, containerEntry, container, checkSourceAttachment, true);
if (!containerEntryStatus.isOK()) {
return containerEntryStatus;
}
}
}
} catch (JavaModelException e) {
return new JavaModelStatus(e);
}
} else {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_illegalContainerPath, new String[] { entryPathMsg, projectName }));
}
break;
// variable entry check
case IClasspathEntry.CPE_VARIABLE:
if (path.segmentCount() >= 1) {
try {
entry = JavaCore.getResolvedClasspathEntry(entry);
} catch (AssertionFailedException e) {
// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=55992
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_PATH, e.getMessage());
}
if (entry == null) {
return new JavaModelStatus(IJavaModelStatusConstants.CP_VARIABLE_PATH_UNBOUND, project, path);
}
// get validation status
IJavaModelStatus status = validateClasspathEntry(project, entry, null, checkSourceAttachment, false);
if (!status.isOK())
return status;
// return deprecation status if any
String variableName = path.segment(0);
String deprecatedMessage = JavaCore.getClasspathVariableDeprecationMessage(variableName);
if (deprecatedMessage != null) {
return new JavaModelStatus(IStatus.WARNING, IJavaModelStatusConstants.DEPRECATED_VARIABLE, project, path, deprecatedMessage);
}
return status;
} else {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_illegalVariablePath, new String[] { entryPathMsg, projectName }));
}
// library entry check
case IClasspathEntry.CPE_LIBRARY:
path = ClasspathEntry.resolveDotDot(project.getProject().getLocation(), path);
// do not validate entries from Class-Path: in manifest
// (these entries are considered optional since the user cannot act on them)
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=252392
String containerInfo = null;
if (entryContainer != null) {
if (entryContainer instanceof UserLibraryClasspathContainer) {
containerInfo = Messages.bind(Messages.classpath_userLibraryInfo, new String[] { entryContainer.getDescription() });
} else {
containerInfo = Messages.bind(Messages.classpath_containerInfo, new String[] { entryContainer.getDescription() });
}
}
IJavaModelStatus status = validateLibraryEntry(path, project, containerInfo, checkSourceAttachment ? entry.getSourceAttachmentPath() : null, entryPathMsg);
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=171136, ignore class path errors from optional entries
if (status.getCode() == IJavaModelStatusConstants.INVALID_CLASSPATH && ((ClasspathEntry) entry).isOptional())
status = JavaModelStatus.VERIFIED_OK;
if (!status.isOK())
return status;
break;
// project entry check
case IClasspathEntry.CPE_PROJECT:
if (path.isAbsolute() && path.segmentCount() == 1) {
IProject prereqProjectRsc = workspaceRoot.getProject(path.segment(0));
IJavaProject prereqProject = JavaCore.create(prereqProjectRsc);
try {
if (!prereqProjectRsc.exists() || !prereqProjectRsc.hasNature(JavaCore.NATURE_ID)) {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundProject, new String[] { path.segment(0), projectName }));
}
if (!prereqProjectRsc.isOpen()) {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_closedProject, new String[] { path.segment(0) }));
}
if (!JavaCore.IGNORE.equals(project.getOption(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, true))) {
long projectTargetJDK = CompilerOptions.versionToJdkLevel(project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true));
long prereqProjectTargetJDK = CompilerOptions.versionToJdkLevel(prereqProject.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true));
if (prereqProjectTargetJDK > projectTargetJDK) {
return new JavaModelStatus(IJavaModelStatusConstants.INCOMPATIBLE_JDK_LEVEL, project, path, Messages.bind(Messages.classpath_incompatibleLibraryJDKLevel, new String[] { project.getElementName(), CompilerOptions.versionFromJdkLevel(projectTargetJDK), path.makeRelative().toString(), CompilerOptions.versionFromJdkLevel(prereqProjectTargetJDK) }));
}
}
} catch (CoreException e) {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundProject, new String[] { path.segment(0), projectName }));
}
} else {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_illegalProjectPath, new String[] { path.toString(), projectName }));
}
break;
// project source folder
case IClasspathEntry.CPE_SOURCE:
if (((entry.getInclusionPatterns() != null && entry.getInclusionPatterns().length > 0) || (entry.getExclusionPatterns() != null && entry.getExclusionPatterns().length > 0)) && JavaCore.DISABLED.equals(project.getOption(JavaCore.CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS, true))) {
return new JavaModelStatus(IJavaModelStatusConstants.DISABLED_CP_EXCLUSION_PATTERNS, project, path);
}
if (entry.getOutputLocation() != null && JavaCore.DISABLED.equals(project.getOption(JavaCore.CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS, true))) {
return new JavaModelStatus(IJavaModelStatusConstants.DISABLED_CP_MULTIPLE_OUTPUT_LOCATIONS, project, path);
}
if (path.isAbsolute() && !path.isEmpty()) {
IPath projectPath = project.getProject().getFullPath();
if (!projectPath.isPrefixOf(path) || JavaModel.getTarget(path, true) == null) {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundSourceFolder, new String[] { entryPathMsg, projectName }));
}
} else {
return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_illegalSourceFolderPath, new String[] { entryPathMsg, projectName }));
}
break;
}
// Validate extra attributes
IClasspathAttribute[] extraAttributes = entry.getExtraAttributes();
if (extraAttributes != null) {
int length = extraAttributes.length;
HashSet set = new HashSet(length);
for (int i = 0; i < length; i++) {
String attName = extraAttributes[i].getName();
if (!set.add(attName)) {
return new JavaModelStatus(IJavaModelStatusConstants.NAME_COLLISION, Messages.bind(Messages.classpath_duplicateEntryExtraAttribute, new String[] { attName, entryPathMsg, projectName }));
}
}
}
return JavaModelStatus.VERIFIED_OK;
}
use of org.eclipse.jdt.core.IClasspathEntry in project che by eclipse.
the class JavadocContentAccess2 method getSourceAttachmentEncoding.
private static String getSourceAttachmentEncoding(IPackageFragmentRoot root) throws JavaModelException {
String encoding = ResourcesPlugin.getEncoding();
IClasspathEntry entry = root.getRawClasspathEntry();
if (entry != null) {
int kind = entry.getEntryKind();
if (kind == IClasspathEntry.CPE_LIBRARY || kind == IClasspathEntry.CPE_VARIABLE) {
IClasspathAttribute[] extraAttributes = entry.getExtraAttributes();
for (int i = 0; i < extraAttributes.length; i++) {
IClasspathAttribute attrib = extraAttributes[i];
if (IClasspathAttribute.SOURCE_ATTACHMENT_ENCODING.equals(attrib.getName())) {
return attrib.getValue();
}
}
}
}
return encoding;
}
use of org.eclipse.jdt.core.IClasspathEntry in project che by eclipse.
the class JavaDocLocations method getJavadocBaseLocation.
public static URL getJavadocBaseLocation(IJavaElement element) throws JavaModelException {
if (element.getElementType() == IJavaElement.JAVA_PROJECT) {
return getProjectJavadocLocation((IJavaProject) element);
}
IPackageFragmentRoot root = JavaModelUtil.getPackageFragmentRoot(element);
if (root == null) {
return null;
}
if (root.getKind() == IPackageFragmentRoot.K_BINARY) {
IClasspathEntry entry = root.getResolvedClasspathEntry();
URL javadocLocation = getLibraryJavadocLocation(entry);
if (javadocLocation != null) {
return getLibraryJavadocLocation(entry);
}
entry = root.getRawClasspathEntry();
switch(entry.getEntryKind()) {
case IClasspathEntry.CPE_LIBRARY:
case IClasspathEntry.CPE_VARIABLE:
return getLibraryJavadocLocation(entry);
default:
return null;
}
} else {
return getProjectJavadocLocation(root.getJavaProject());
}
}
Aggregations