protected void updateContainerAttributes( IProject project, IClasspathAttribute attributeToAdd, String attributeToDelete, IProgressMonitor monitor) throws JavaModelException { IJavaProject javaProject = JavaCore.create(project); if (javaProject == null) return; IClasspathEntry[] cp = javaProject.getRawClasspath(); for (int i = 0; i < cp.length; i++) { if (IClasspathEntry.CPE_CONTAINER == cp[i].getEntryKind() && BuildPathManager.isMaven2ClasspathContainer(cp[i].getPath())) { LinkedHashMap<String, IClasspathAttribute> attrs = new LinkedHashMap<String, IClasspathAttribute>(); for (IClasspathAttribute attr : cp[i].getExtraAttributes()) { if (!attr.getName().equals(attributeToDelete)) { attrs.put(attr.getName(), attr); } } attrs.put(attributeToAdd.getName(), attributeToAdd); IClasspathAttribute[] newAttrs = attrs.values().toArray(new IClasspathAttribute[attrs.size()]); cp[i] = JavaCore.newContainerEntry( cp[i].getPath(), cp[i].getAccessRules(), newAttrs, cp[i].isExported()); break; } } javaProject.setRawClasspath(cp, monitor); }
private static boolean hasExtraAttribute(IClasspathEntry entry, String expectedAttribute) { for (IClasspathAttribute cpa : entry.getExtraAttributes()) { if (expectedAttribute.equals(cpa.getName())) { return true; } } return false; }
public static URL getLibraryJavadocLocation(IClasspathEntry entry) { if (entry == null) { throw new IllegalArgumentException("Entry must not be null"); // $NON-NLS-1$ } int kind = entry.getEntryKind(); if (kind != IClasspathEntry.CPE_LIBRARY && kind != IClasspathEntry.CPE_VARIABLE) { throw new IllegalArgumentException( "Entry must be of kind CPE_LIBRARY or CPE_VARIABLE"); //$NON-NLS-1$ } IClasspathAttribute[] extraAttributes = entry.getExtraAttributes(); for (int i = 0; i < extraAttributes.length; i++) { IClasspathAttribute attrib = extraAttributes[i]; if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(attrib.getName())) { return parseURL(attrib.getValue()); } } return null; }
protected IClasspathEntry createClasspathEntry( IPath entryPath, IPath sourcePath, String javadocURL) { IPath sourceRootPath = null; IAccessRule[] rules = new IAccessRule[] {}; IClasspathAttribute[] attrs = new IClasspathAttribute[] {}; final ClasspathDecorations dec = cpDecorations.getDecorations( getDecorationManagerKey(javaProject.getProject(), getPath().toString()), entryPath.toString()); if (dec != null) { sourcePath = dec.getSourceAttachmentPath(); sourceRootPath = dec.getSourceAttachmentRootPath(); attrs = dec.getExtraAttributes(); } if (javadocURL != null) { if (CoreUtil.empty(attrs)) { attrs = new IClasspathAttribute[] {newJavadocAttr(javadocURL)}; } else { List<IClasspathAttribute> newAttrs = new ArrayList<IClasspathAttribute>(); for (IClasspathAttribute attr : attrs) { if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(attr.getName())) { newAttrs.add(newJavadocAttr(javadocURL)); } else { newAttrs.add(attr); } } attrs = newAttrs.toArray(new IClasspathAttribute[0]); } } return JavaCore.newLibraryEntry(entryPath, sourcePath, sourceRootPath, rules, attrs, false); }
/** * Initializes the ProjectProperties object. * * @param project * @throws JavaModelException * @throws CoreException */ public void refresh() throws JavaModelException, CoreException { classPath = new StringBuffer(); inPath = new StringBuffer(); sourceFiles = new ArrayList(); javaProject = JavaCore.create(project); String projectLocalPrefix = File.separator + project.getName(); /* * get paths */ this.projectLocation = project.getLocation().removeLastSegments(1).toOSString(); this.outputPath = javaProject.getOutputLocation().toOSString(); this.sourcePaths = new ArrayList<String>(); /* * get source files */ IClasspathEntry[] classPathEntries = javaProject.getResolvedClasspath(false); for (int i = 0; i < classPathEntries.length; i++) { if (classPathEntries[i].getEntryKind() == IClasspathEntry.CPE_SOURCE) { // 1st segment of the path has to be removed because it is added // again by findMember ending in duplicated first segment in the path getAllSourceFiles( project.findMember(classPathEntries[i].getPath().removeFirstSegments(1)), this.sourceFiles); if (!this.sourcePaths.contains(classPathEntries[i].getPath().toOSString())) { this.sourcePaths.add(classPathEntries[i].getPath().toOSString()); } } else if (classPathEntries[i].getEntryKind() == IClasspathEntry.CPE_LIBRARY) { if (this.classPath.length() > 0) { this.classPath.append(File.pathSeparator); } String cp = classPathEntries[i].getPath().toOSString(); if (cp.startsWith(projectLocalPrefix)) { cp = this.projectLocation + classPathEntries[i].getPath().toOSString(); } // add the lib to inPath if specified in the .classpath file // as an inpath resource for (IClasspathAttribute attr : classPathEntries[i].getExtraAttributes()) { if (attr.getName().equals("inpath") && attr.getValue().equals("true")) { if (this.inPath.length() > 0) { this.inPath.append(File.pathSeparator); } this.inPath.append(cp); break; } } this.classPath.append(cp); } } // IFile inpathFile = project.getFile("inpath.properties"); // if(inpathFile != null) { // Properties inpathProp = new Properties(); // try { // inpathProp.load(inpathFile.getContents()); // for(Object prop : inpathProp.keySet()) { // if(inPath.length() > 0) { // inPath.append(File.pathSeparator); // } // // inPath.append(this.projectLocation).append(projectLocalPrefix).append(File.separator).append(inpathProp.get(prop)); // } // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } }