diff options
author | kkomissarchik | 2006-06-08 19:44:33 +0000 |
---|---|---|
committer | kkomissarchik | 2006-06-08 19:44:33 +0000 |
commit | 3690e18ce0c55846371d9ee737c817560f540ca4 (patch) | |
tree | afb4ab7f2907a3782740f380aab9cfb66ed93a53 /plugins | |
parent | 8533ee4b986948a46900c68ed83b213675aa65de (diff) | |
download | webtools.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.java | 63 |
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) |