241976 [CommonNavigator] [Viewers] Duplicate javascript container nodes in project explorer
diff --git a/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF
index 43952fc..3fb115d 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF
@@ -99,7 +99,7 @@
  org.eclipse.wst.jsdt.ui.text.java,
  org.eclipse.wst.jsdt.ui.text.java.hover,
  org.eclipse.wst.jsdt.ui.wizards
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.2.qualifier
 Bundle-Activator: org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.ui.console;bundle-version="[3.3.0,4.0.0)",
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java
index 9664d0c..be1dbf8 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java
@@ -16,7 +16,6 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.Vector;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -24,6 +23,7 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -37,10 +37,7 @@
 import org.eclipse.wst.jsdt.core.IJavaScriptElement;
 import org.eclipse.wst.jsdt.core.IJavaScriptModel;
 import org.eclipse.wst.jsdt.core.IJavaScriptProject;
-import org.eclipse.wst.jsdt.core.IPackageFragment;
-import org.eclipse.wst.jsdt.core.IPackageFragmentRoot;
 import org.eclipse.wst.jsdt.core.JavaScriptCore;
-import org.eclipse.wst.jsdt.core.JavaScriptModelException;
 import org.eclipse.wst.jsdt.internal.ui.navigator.IExtensionStateConstants.Values;
 import org.eclipse.wst.jsdt.internal.ui.packageview.PackageExplorerContentProvider;
 import org.eclipse.wst.jsdt.ui.PreferenceConstants;
@@ -170,7 +167,7 @@
 		return getParent(object);
 	}
 
-		public PipelinedShapeModification interceptAdd(PipelinedShapeModification addModification) {
+	public PipelinedShapeModification interceptAdd(PipelinedShapeModification addModification) {
 		
 		Object parent= addModification.getParent();
 		
@@ -180,7 +177,8 @@
 		
 		if (parent instanceof IWorkspaceRoot) {		
 			deconvertJavaProjects(addModification);
-		}		
+		}
+		
 		convertToJavaElements(addModification);
 		return addModification;
 	}
@@ -269,88 +267,35 @@
 	 * @param proposedChildren
 	 */
 	private void customize(Object[] javaElements, Set proposedChildren) {
-	//	List elementList= Arrays.asList(javaElements);
-//		IResource[] javaElementResources;
-//		for(int i = 0;i<javaElements.length;i++) {
-//			if(javaElements[i] instanceof IJavaScriptElement) {
-//				
-//			}
-//		}
-		
-		
-//		for (Iterator iter= proposedChildren.iterator(); iter.hasNext();) {
-//			Object element= iter.next();
-//			IResource resource= null;
-//			if (element instanceof IResource) {
-//				resource= (IResource)element;
-//			} else if (element instanceof IAdaptable) {
-//				resource= (IResource)((IAdaptable)element).getAdapter(IResource.class);
-//			}
-//			if (resource != null) {
-//				int i= elementList.indexOf(resource);
-//				if (i >= 0) {
-//					javaElements[i]= null;
-//				}
-//			}
-//		}
-		
-		
-			
-		proposedChildren.removeAll(Arrays.asList(javaElements));
-		proposedChildren.addAll(Arrays.asList(javaElements));
-			
-			
-		
-		Vector allJavaElements = new Vector(Arrays.asList(javaElements));
-		boolean addedPfRoot = false;
-		while(allJavaElements.size()>0) {
-			Object element=null;
-			try {
-				element = allJavaElements.remove(0);
+		List elementList= Arrays.asList(javaElements);
+		for (Iterator iter= proposedChildren.iterator(); iter.hasNext();) {
+			Object element= iter.next();
+			IResource resource= null;
+			if (element instanceof IResource) {
+				resource= (IResource)element;
+			} else if (element instanceof IAdaptable) {
+				resource= (IResource)((IAdaptable)element).getAdapter(IResource.class);
 			}
-			catch (Exception e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			}
-			
-			if (element instanceof IJavaScriptElement) {
-				IJavaScriptElement cElement= (IJavaScriptElement)element;
-				IResource resource= cElement.getResource();
-				proposedChildren.remove(resource);
-				if(cElement instanceof IPackageFragmentRoot) {
-					IPackageFragmentRoot root = (IPackageFragmentRoot)cElement;
-					try {
-						Object[] nonJava = root.getNonJavaScriptResources();
-						allJavaElements.addAll(Arrays.asList(root.getChildren()));
-						proposedChildren.removeAll(Arrays.asList(nonJava));
-					}
-					catch (JavaScriptModelException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-				}else if(cElement instanceof IPackageFragment) {
-						IPackageFragment root = (IPackageFragment)cElement;
-						
-						if(root.isDefaultPackage()) {
-							IPackageFragmentRoot pfRoot = (IPackageFragmentRoot)root.getParent();
-							if(!addedPfRoot) allJavaElements.add(pfRoot);
-							addedPfRoot = true;
-						}
-						
-						try {
-							Object[] nonJava = root.getNonJavaScriptResources();
-							Object[] children = root.getChildren();
-							allJavaElements.addAll(Arrays.asList(children));
-							proposedChildren.removeAll(Arrays.asList(nonJava));
-						}
-						catch (Exception e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
+			if (resource != null) {
+				int i= elementList.indexOf(resource);
+				if (i >= 0) {
+					javaElements[i]= null;
 				}
 			}
 		}
-		
+		for (int i= 0; i < javaElements.length; i++) {
+			Object element= javaElements[i];
+			if (element instanceof IJavaScriptElement) {
+				IJavaScriptElement cElement= (IJavaScriptElement)element;
+				IResource resource= cElement.getResource();
+				if (resource != null) {
+					proposedChildren.remove(resource);
+				}
+				proposedChildren.add(element);
+			} else if (element != null) {
+				proposedChildren.add(element);
+			}
+		}
 	}
 
 
@@ -364,7 +309,6 @@
 		return convertToJavaElements(updateSynchronization.getRefreshTargets());
 	}
 
-
 	protected void postAdd(final Object parent, final Object element, Collection runnables) {
 		if (parent instanceof IJavaScriptModel)
 			super.postAdd(((IJavaScriptModel) parent).getWorkspace(), element, runnables);
@@ -387,5 +331,4 @@
 		} 
 		super.postRefresh(toRefresh, updateLabels, runnables);		
 	}
-
 }