View | Details | Raw Unified | Return to bug 249567 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/dom/ASTModelBridgeTests.java (+104 lines)
Lines 1728-1733 Link Here
1728
			element
1728
			element
1729
		);
1729
		);
1730
	}
1730
	}
1731
1732
	/*
1733
	 * Ensures that the IJavaElement of an IBinding representing a method is correct.
1734
	 * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=249567 )
1735
	 */
1736
	public void testMethod12() throws Exception {
1737
		try {
1738
			createFolder("/P/src/p1");
1739
			createFile(
1740
				"/P/src/p1/X249567.java",
1741
				"package p1;\n" +
1742
				"public class X249567 {}"
1743
			);
1744
			createFolder("/P/src/p2");
1745
			createFile(
1746
				"/P/src/p2/X249567.java",
1747
				"package p2;\n" +
1748
				"public class X249567 {}"
1749
			);
1750
			ASTNode node = buildAST(
1751
				"public class X {\n" +
1752
				"  void foo(p1.X249567 x) {\n" +
1753
				"  }\n" +
1754
				"  /*start*/void foo(p2.X249567 x) {\n" +
1755
				"  }/*end*/\n" +
1756
				"}"
1757
			);
1758
			IBinding binding = ((MethodDeclaration) node).resolveBinding();
1759
			IJavaElement element = binding.getJavaElement();
1760
			assertElementEquals(
1761
				"Unexpected Java element",
1762
				"foo(p2.X249567) [in X [in [Working copy] X.java [in <default> [in src [in P]]]]]",
1763
				element
1764
			);
1765
		} finally {
1766
			deleteFolder("/P/src/p1");
1767
			deleteFolder("/P/src/p2");
1768
		}
1769
	}
1770
1771
	/*
1772
	 * Ensures that the IJavaElement of an IBinding representing a method is correct.
1773
	 * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=249567 )
1774
	 */
1775
	public void testMethod13() throws Exception {
1776
		try {
1777
			createFolder("/P/src/p1");
1778
			createFile(
1779
				"/P/src/p1/X249567.java",
1780
				"package p1;\n" +
1781
				"public class X249567 {\n" +
1782
				"  public class Member {}\n" +
1783
				"}"
1784
			);
1785
			ASTNode node = buildAST(
1786
				"public class X {\n" +
1787
				"  /*start*/void foo(p1.X249567.Member x) {\n" +
1788
				"  }/*end*/\n" +
1789
				"}"
1790
			);
1791
			IBinding binding = ((MethodDeclaration) node).resolveBinding();
1792
			IJavaElement element = binding.getJavaElement();
1793
			assertElementEquals(
1794
				"Unexpected Java element",
1795
				"foo(p1.X249567.Member) [in X [in [Working copy] X.java [in <default> [in src [in P]]]]]",
1796
				element
1797
			);
1798
		} finally {
1799
			deleteFolder("/P/src/p1");
1800
		}
1801
	}
1802
1803
	/*
1804
	 * Ensures that the IJavaElement of an IBinding representing a method is correct.
1805
	 * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=249567 )
1806
	 */
1807
	public void testMethod14() throws Exception {
1808
		try {
1809
			createFolder("/P/src/p1");
1810
			createFile(
1811
				"/P/src/p1/X249567.java",
1812
				"package p1;\n" +
1813
				"public class X249567 {\n" +
1814
				"  public class Member<T> {}\n" +
1815
				"}"
1816
			);
1817
			ASTNode node = buildAST(
1818
				"public class X {\n" +
1819
				"  /*start*/void foo(p1.X249567.Member<java.lang.String> x) {\n" +
1820
				"  }/*end*/\n" +
1821
				"}"
1822
			);
1823
			IBinding binding = ((MethodDeclaration) node).resolveBinding();
1824
			IJavaElement element = binding.getJavaElement();
1825
			assertElementEquals(
1826
				"Unexpected Java element",
1827
				"foo(p1.X249567.Member<java.lang.String>) [in X [in [Working copy] X.java [in <default> [in src [in P]]]]]",
1828
				element
1829
			);
1830
		} finally {
1831
			deleteFolder("/P/src/p1");
1832
		}
1833
	}
1834
1731
	/*
1835
	/*
1732
	 * Ensures that the IJavaElement of an IBinding representing a package is correct.
1836
	 * Ensures that the IJavaElement of an IBinding representing a package is correct.
1733
	 */
1837
	 */
(-)model/org/eclipse/jdt/internal/core/util/Util.java (-1 / +47 lines)
Lines 1365-1375 Link Here
1365
			if (isInnerBinaryTypeConstructor)
1365
			if (isInnerBinaryTypeConstructor)
1366
				parameterSignatures[0] = new String(enclosingType.genericTypeSignature()).replace('/', '.');
1366
				parameterSignatures[0] = new String(enclosingType.genericTypeSignature()).replace('/', '.');
1367
			for (int i = 0;  i < length; i++) {
1367
			for (int i = 0;  i < length; i++) {
1368
				parameterSignatures[declaringIndex + i] = new String(parameters[i].genericTypeSignature()).replace('/', '.');
1368
				char[] signature = parameters[i].genericTypeSignature();
1369
				if (isBinary) {
1370
					signature = CharOperation.replaceOnCopy(signature, '/', '.');
1371
				} else {
1372
					signature = toUnresolvedTypeSignature(signature);
1373
				}
1374
				parameterSignatures[declaringIndex + i] = new String(signature);
1369
			}
1375
			}
1370
			IMethod result = declaringType.getMethod(selector, parameterSignatures);
1376
			IMethod result = declaringType.getMethod(selector, parameterSignatures);
1371
			if (isBinary)
1377
			if (isBinary)
1372
				return (JavaElement) result;
1378
				return (JavaElement) result;
1379
			if (result.exists()) // if perfect match (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=249567 )
1380
				return (JavaElement) result;
1373
			IMethod[] methods = null;
1381
			IMethod[] methods = null;
1374
			try {
1382
			try {
1375
				methods = declaringType.getMethods();
1383
				methods = declaringType.getMethods();
Lines 2347-2352 Link Here
2347
		}
2355
		}
2348
		return result;
2356
		return result;
2349
	}
2357
	}
2358
	private static char[] toUnresolvedTypeSignature(char[] signature) {
2359
		int length = signature.length;
2360
		if (length <= 1)
2361
			return signature;
2362
		StringBuffer buffer = new StringBuffer(length);
2363
		toUnresolvedTypeSignature(signature, 0, length, buffer);
2364
		int bufferLength = buffer.length();
2365
		char[] result = new char[bufferLength];
2366
		buffer.getChars(0, bufferLength, result, 0);
2367
		return result;
2368
	}
2369
2370
	private static int toUnresolvedTypeSignature(char[] signature, int start, int length, StringBuffer buffer) {
2371
		if (signature[start] == Signature.C_RESOLVED)
2372
			buffer.append(Signature.C_UNRESOLVED);
2373
		else
2374
			buffer.append(signature[start]);
2375
		for (int i = start+1; i < length; i++) {
2376
			char c = signature[i];
2377
			switch (c) {
2378
			case '/':
2379
			case Signature.C_DOLLAR:
2380
				buffer.append(Signature.C_DOT);
2381
				break;
2382
			case Signature.C_GENERIC_START:
2383
				buffer.append(Signature.C_GENERIC_START);
2384
				i = toUnresolvedTypeSignature(signature, i+1, length, buffer);
2385
				break;
2386
			case Signature.C_GENERIC_END:
2387
				buffer.append(Signature.C_GENERIC_END);
2388
				return i;
2389
			default:
2390
				buffer.append(c);
2391
				break;
2392
			}
2393
		}
2394
		return length;
2395
	}
2350
	private static void appendArrayTypeSignature(char[] string, int start, StringBuffer buffer, boolean compact) {
2396
	private static void appendArrayTypeSignature(char[] string, int start, StringBuffer buffer, boolean compact) {
2351
		int length = string.length;
2397
		int length = string.length;
2352
		// need a minimum 2 char
2398
		// need a minimum 2 char

Return to bug 249567