View | Details | Raw Unified | Return to bug 338649
Collapse All | Expand All

(-)model/org/eclipse/jdt/internal/core/JavaProject.java (-9 / +30 lines)
Lines 2579-2584 Link Here
2579
		JavaModelManager manager = JavaModelManager.getJavaModelManager();
2579
		JavaModelManager manager = JavaModelManager.getJavaModelManager();
2580
		ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager();
2580
		ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager();
2581
		ResolvedClasspath result = new ResolvedClasspath();
2581
		ResolvedClasspath result = new ResolvedClasspath();
2582
		Map knownDrives = new HashMap();
2582
2583
2583
		Map referencedEntriesMap = new HashMap();
2584
		Map referencedEntriesMap = new HashMap();
2584
		List rawLibrariesPath = new ArrayList();
2585
		List rawLibrariesPath = new ArrayList();
Lines 2639-2649 Link Here
2639
								if (!rawLibrariesPath.contains(extraEntries[j].getPath())) {
2640
								if (!rawLibrariesPath.contains(extraEntries[j].getPath())) {
2640
									// https://bugs.eclipse.org/bugs/show_bug.cgi?id=305037
2641
									// https://bugs.eclipse.org/bugs/show_bug.cgi?id=305037
2641
									// referenced entries for variable entries could also be persisted with extra attributes, so addAsChainedEntry = true
2642
									// referenced entries for variable entries could also be persisted with extra attributes, so addAsChainedEntry = true
2642
									addToResult(rawEntry, extraEntries[j], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true);
2643
									addToResult(rawEntry, extraEntries[j], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true, knownDrives);
2643
								}
2644
								}
2644
							}
2645
							}
2645
						}
2646
						}
2646
						addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
2647
						addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
2647
					}
2648
					}
2648
					break;
2649
					break;
2649
2650
Lines 2686-2697 Link Here
2686
								ClasspathEntry[] extraEntries = cEntry.resolvedChainedLibraries();
2687
								ClasspathEntry[] extraEntries = cEntry.resolvedChainedLibraries();
2687
								for (int k = 0, length2 = extraEntries.length; k < length2; k++) {
2688
								for (int k = 0, length2 = extraEntries.length; k < length2; k++) {
2688
									if (!rawLibrariesPath.contains(extraEntries[k].getPath())) {
2689
									if (!rawLibrariesPath.contains(extraEntries[k].getPath())) {
2689
										addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
2690
										addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
2690
									}
2691
									}
2691
								}
2692
								}
2692
							}
2693
							}
2693
						}
2694
						}
2694
						addToResult(rawEntry, cEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
2695
						addToResult(rawEntry, cEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
2695
					}
2696
					}
2696
					break;
2697
					break;
2697
2698
Lines 2704-2718 Link Here
2704
						ClasspathEntry[] extraEntries = ((ClasspathEntry) resolvedEntry).resolvedChainedLibraries();
2705
						ClasspathEntry[] extraEntries = ((ClasspathEntry) resolvedEntry).resolvedChainedLibraries();
2705
						for (int k = 0, length2 = extraEntries.length; k < length2; k++) {
2706
						for (int k = 0, length2 = extraEntries.length; k < length2; k++) {
2706
							if (!rawLibrariesPath.contains(extraEntries[k].getPath())) {
2707
							if (!rawLibrariesPath.contains(extraEntries[k].getPath())) {
2707
								addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true);
2708
								addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true, knownDrives);
2708
							}
2709
							}
2709
						}
2710
						}
2710
					}
2711
					}
2711
2712
2712
					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
2713
					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
2713
					break;
2714
					break;
2714
				default :
2715
				default :
2715
					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
2716
					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
2716
					break;
2717
					break;
2717
			}
2718
			}
2718
		}
2719
		}
Lines 2723-2729 Link Here
2723
2724
2724
	private void addToResult(IClasspathEntry rawEntry, IClasspathEntry resolvedEntry, ResolvedClasspath result,
2725
	private void addToResult(IClasspathEntry rawEntry, IClasspathEntry resolvedEntry, ResolvedClasspath result,
2725
			LinkedHashSet resolvedEntries, ExternalFoldersManager externalFoldersManager,
2726
			LinkedHashSet resolvedEntries, ExternalFoldersManager externalFoldersManager,
2726
			Map oldChainedEntriesMap, boolean addAsChainedEntry) {
2727
			Map oldChainedEntriesMap, boolean addAsChainedEntry, Map knownDrives) {
2727
2728
2728
		IPath resolvedPath;
2729
		IPath resolvedPath;
2729
		// If it's already been resolved, do not add to resolvedEntries
2730
		// If it's already been resolved, do not add to resolvedEntries
Lines 2747-2753 Link Here
2747
		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=336046
2748
		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=336046
2748
		// The source attachment path could be external too and in which case, must be added.
2749
		// The source attachment path could be external too and in which case, must be added.
2749
		IPath sourcePath = resolvedEntry.getSourceAttachmentPath();
2750
		IPath sourcePath = resolvedEntry.getSourceAttachmentPath();
2750
		if (sourcePath != null && ExternalFoldersManager.isExternalFolderPath(sourcePath)) {
2751
		if (sourcePath != null && driveExists(sourcePath, knownDrives) && ExternalFoldersManager.isExternalFolderPath(sourcePath)) {
2751
			externalFoldersManager.addFolder(sourcePath, true);
2752
			externalFoldersManager.addFolder(sourcePath, true);
2752
		}
2753
		}
2753
	}
2754
	}
Lines 2768-2773 Link Here
2768
	}
2769
	}
2769
	
2770
	
2770
	/*
2771
	/*
2772
	 * File#exists() takes lot of time for an unmapped drive. Hence, cache the info.
2773
	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=338649
2774
	 */
2775
	private boolean driveExists(IPath sourcePath, Map knownDrives) {	
2776
		String drive = sourcePath.getDevice();
2777
		if (drive == null) return true;
2778
		Boolean good = (Boolean)knownDrives.get(drive);
2779
		if (good == null) {
2780
			if (new File(drive).exists()) {
2781
				knownDrives.put(drive, Boolean.TRUE);
2782
				return true;
2783
			} else {
2784
				knownDrives.put(drive, Boolean.FALSE);
2785
				return false;
2786
			}
2787
		}
2788
		return good.booleanValue();
2789
	}
2790
	
2791
	/*
2771
	 * Resolve the given perProjectInfo's raw classpath and store the resolved classpath in the perProjectInfo.
2792
	 * Resolve the given perProjectInfo's raw classpath and store the resolved classpath in the perProjectInfo.
2772
	 */
2793
	 */
2773
	public void resolveClasspath(PerProjectInfo perProjectInfo, boolean usePreviousSession, boolean addClasspathChange) throws JavaModelException {
2794
	public void resolveClasspath(PerProjectInfo perProjectInfo, boolean usePreviousSession, boolean addClasspathChange) throws JavaModelException {

Return to bug 338649