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 { |