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

(-)model/org/eclipse/jdt/internal/core/util/HashtableOfArrayToObject.java (+15 lines)
Lines 82-87 Link Here
82
		return null;
82
		return null;
83
	}
83
	}
84
84
85
	public int getIndex(Object[] key) {
86
		int length = this.keyTable.length;
87
		int index = hashCode(key) % length;
88
		int keyLength = key.length;
89
		Object[] currentKey;
90
		while ((currentKey = this.keyTable[index]) != null) {
91
			if (currentKey.length == keyLength && Util.equalArraysOrNull(currentKey, key))
92
				return index;
93
			if (++index == length) {
94
				index = 0;
95
			}
96
		}
97
		return -1;
98
	}
99
	
85
	public Object[] getKey(Object[] key, int keyLength) {
100
	public Object[] getKey(Object[] key, int keyLength) {
86
		int length = this.keyTable.length;
101
		int length = this.keyTable.length;
87
		int index = hashCode(key, keyLength) % length;
102
		int index = hashCode(key, keyLength) % length;
(-)model/org/eclipse/jdt/internal/core/NameLookup.java (-17 / +28 lines)
Lines 350-357 Link Here
350
		if (index != -1) {
350
		if (index != -1) {
351
			cuName= cuName.substring(0, index);
351
			cuName= cuName.substring(0, index);
352
		}
352
		}
353
		Object value = this.packageFragments.get(pkgName);
353
		int pkgIndex = this.packageFragments.getIndex(pkgName);
354
		if (value != null) {
354
		if (pkgIndex != -1) {
355
			Object value = this.packageFragments.valueTable[pkgIndex];
356
			// reuse existing String[]
357
			pkgName = (String[]) this.packageFragments.keyTable[pkgIndex];
355
			if (value instanceof PackageFragmentRoot) {
358
			if (value instanceof PackageFragmentRoot) {
356
				return findCompilationUnit(pkgName, cuName, (PackageFragmentRoot) value);
359
				return findCompilationUnit(pkgName, cuName, (PackageFragmentRoot) value);
357
			} else {
360
			} else {
Lines 556-571 Link Here
556
			return result;
559
			return result;
557
		} else {
560
		} else {
558
			String[] splittedName = Util.splitOn('.', name, 0, name.length());
561
			String[] splittedName = Util.splitOn('.', name, 0, name.length());
559
			Object value = this.packageFragments.get(splittedName);
562
			int pkgIndex = this.packageFragments.getIndex(splittedName);
560
			if (value == null)
563
			if (pkgIndex == -1)
561
				return null;
564
				return null;
565
			Object value = this.packageFragments.valueTable[pkgIndex];
566
			// reuse existing String[]
567
			String[] pkgName = (String[]) this.packageFragments.keyTable[pkgIndex];
562
			if (value instanceof PackageFragmentRoot) {
568
			if (value instanceof PackageFragmentRoot) {
563
				return new IPackageFragment[] {((PackageFragmentRoot) value).getPackageFragment(splittedName)};
569
				return new IPackageFragment[] {((PackageFragmentRoot) value).getPackageFragment(pkgName)};
564
			} else {
570
			} else {
565
				IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value;
571
				IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value;
566
				IPackageFragment[] result = new IPackageFragment[roots.length];
572
				IPackageFragment[] result = new IPackageFragment[roots.length];
567
				for (int i= 0; i < roots.length; i++) {
573
				for (int i= 0; i < roots.length; i++) {
568
					result[i] = ((PackageFragmentRoot) roots[i]).getPackageFragment(splittedName);
574
					result[i] = ((PackageFragmentRoot) roots[i]).getPackageFragment(pkgName);
569
				}
575
				}
570
				return result;
576
				return result;
571
			}
577
			}
Lines 900-916 Link Here
900
			}
906
			}
901
		} else {
907
		} else {
902
			String[] splittedName = Util.splitOn('.', name, 0, name.length());
908
			String[] splittedName = Util.splitOn('.', name, 0, name.length());
903
			Object value = this.packageFragments.get(splittedName);
909
			int pkgIndex = this.packageFragments.getIndex(splittedName);
904
			if (value instanceof PackageFragmentRoot) {
910
			if (pkgIndex != -1) {
905
				requestor.acceptPackageFragment(((PackageFragmentRoot) value).getPackageFragment(splittedName));
911
				Object value = this.packageFragments.valueTable[pkgIndex];
906
			} else {
912
				// reuse existing String[]
907
				IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value;
913
				String[] pkgName = (String[]) this.packageFragments.keyTable[pkgIndex];
908
				if (roots != null) {
914
				if (value instanceof PackageFragmentRoot) {
909
					for (int i = 0, length = roots.length; i < length; i++) {
915
					requestor.acceptPackageFragment(((PackageFragmentRoot) value).getPackageFragment(pkgName));
910
						if (requestor.isCanceled())
916
				} else {
911
							return;
917
					IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value;
912
						PackageFragmentRoot root = (PackageFragmentRoot) roots[i];
918
					if (roots != null) {
913
						requestor.acceptPackageFragment(root.getPackageFragment(splittedName));
919
						for (int i = 0, length = roots.length; i < length; i++) {
920
							if (requestor.isCanceled())
921
								return;
922
							PackageFragmentRoot root = (PackageFragmentRoot) roots[i];
923
							requestor.acceptPackageFragment(root.getPackageFragment(pkgName));
924
						}
914
					}
925
					}
915
				}
926
				}
916
			}
927
			}

Return to bug 227986