Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkkomissarchik2006-06-08 19:44:33 +0000
committerkkomissarchik2006-06-08 19:44:33 +0000
commit3690e18ce0c55846371d9ee737c817560f540ca4 (patch)
treeafb4ab7f2907a3782740f380aab9cfb66ed93a53 /plugins
parent8533ee4b986948a46900c68ed83b213675aa65de (diff)
downloadwebtools.javaee-3690e18ce0c55846371d9ee737c817560f540ca4.tar.gz
webtools.javaee-3690e18ce0c55846371d9ee737c817560f540ca4.tar.xz
webtools.javaee-3690e18ce0c55846371d9ee737c817560f540ca4.zip
[146068] Regression in the FlexibleProjectContainer
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java63
1 files changed, 51 insertions, 12 deletions
diff --git a/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java b/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java
index c53fbfa14..99ea5ae73 100644
--- a/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java
+++ b/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/classpath/FlexibleProjectContainer.java
@@ -13,8 +13,10 @@ package org.eclipse.jst.common.jdt.internal.classpath;
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -165,15 +167,6 @@ public abstract class FlexibleProjectContainer
private List computeClasspathEntries()
{
- IJavaProject javaProject = JavaCore.create(this.project);
- IClasspathEntry[] existingEntries = null;
- try {
- existingEntries = javaProject.getResolvedClasspath(true);
- } catch (JavaModelException e) {
- existingEntries = new IClasspathEntry[0];
- Logger.getLogger().logError(e);
- }
-
final List entries = new ArrayList();
final IVirtualComponent vc
@@ -184,6 +177,8 @@ public abstract class FlexibleProjectContainer
return entries;
}
+ final Set existingEntries = computeExistingClasspathEntries();
+
IVirtualReference[] refs = vc.getReferences();
IVirtualComponent comp = null;
Set jarsHandled = new HashSet();
@@ -275,6 +270,48 @@ public abstract class FlexibleProjectContainer
return entries;
}
+ private Set computeExistingClasspathEntries()
+ {
+ final IJavaProject jproj = JavaCore.create( this.project );
+ final Set existing = new HashSet();
+
+ try
+ {
+ // Get all resolved entries first.
+
+ final IClasspathEntry[] entries = jproj.getResolvedClasspath( true );
+ existing.addAll( Arrays.asList( entries ) );
+
+ // Then remove any entries provided by this container's prior self.
+
+ final IClasspathEntry[] cp = jproj.getRawClasspath();
+
+ for( int i = 0; i < cp.length; i++ )
+ {
+ final IPath path = cp[ i ].getPath();
+
+ if( path.equals( this.path ) )
+ {
+ final IClasspathContainer container
+ = JavaCore.getClasspathContainer( path, jproj );
+
+ final IClasspathEntry[] containerEntries
+ = container.getClasspathEntries();
+
+ existing.removeAll( Arrays.asList( containerEntries ) );
+
+ break;
+ }
+ }
+ }
+ catch( JavaModelException e )
+ {
+ Logger.getLogger().logError( e );
+ }
+
+ return existing;
+ }
+
private IClasspathEntry newLibraryEntry( final IPath p )
{
IPath srcpath = null;
@@ -383,9 +420,11 @@ public abstract class FlexibleProjectContainer
* @param newPath
* @return
*/
- public static boolean isAlreadyOnClasspath(IClasspathEntry[] classpath, IPath newPath) {
- for (int i = 0; i < classpath.length; i++) {
- IClasspathEntry entry = classpath[i];
+ private static boolean isAlreadyOnClasspath(Set classpath, IPath newPath)
+ {
+ for( Iterator itr = classpath.iterator(); itr.hasNext(); )
+ {
+ IClasspathEntry entry = (IClasspathEntry) itr.next();
IPath entryPath = entry.getPath();
if (entryPath.equals(newPath)) { // package fragment roots must match exactly entry
// pathes (no exclusion there)

Back to the top