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

Collapse All | Expand All

(-)codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java (-7 / +21 lines)
Lines 6045-6054 Link Here
6045
			if (this.options.checkVisibility
6045
			if (this.options.checkVisibility
6046
				&& !field.canBeSeenBy(receiverType, invocationSite, scope))	continue next;
6046
				&& !field.canBeSeenBy(receiverType, invocationSite, scope))	continue next;
6047
			
6047
			
6048
			// don't propose array types in case expression
6048
			// don't propose non constant fields or strings (1.6 or below) in case expression
6049
			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
6049
			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
6050
			if (this.assistNodeIsInsideCase && field.type instanceof ArrayBinding)
6050
			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
6051
				continue next;
6051
			if (this.assistNodeIsInsideCase) {
6052
				if (field.isFinal() && field.isStatic()) {
6053
					if (!(field.type instanceof BaseTypeBinding))
6054
						continue next; 
6055
				} else {
6056
					continue next; // non-constants not allowed in case.	
6057
				}
6058
			}
6052
6059
6053
			boolean prefixRequired = false;
6060
			boolean prefixRequired = false;
6054
6061
Lines 11426-11435 Link Here
11426
								continue next;
11433
								continue next;
11427
							}
11434
							}
11428
												
11435
												
11429
							// don't propose array types in case expression
11436
							// don't propose non constant variables or strings (1.6 or below) in case expression
11430
							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
11437
							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
11431
							if (this.assistNodeIsInsideCase && local.type instanceof ArrayBinding)
11438
							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
11432
								continue next;
11439
							if (this.assistNodeIsInsideCase) {
11440
								if (local.isFinal()) {
11441
									if (!(local.type instanceof BaseTypeBinding))
11442
										continue next; 
11443
								} else {
11444
									continue next; // non-constants not allowed in case.	
11445
								}
11446
							}
11433
							
11447
							
11434
							int ptr = this.uninterestingBindingsPtr;
11448
							int ptr = this.uninterestingBindingsPtr;
11435
							// Cases where the binding is uninteresting eg. for completion occurring inside a local var
11449
							// Cases where the binding is uninteresting eg. for completion occurring inside a local var
Lines 11541-11547 Link Here
11541
									-1,
11555
									-1,
11542
									-1);
11556
									-1);
11543
							}
11557
							}
11544
							if(proposeMethod && !insideAnnotationAttribute) {
11558
							if(proposeMethod && !insideAnnotationAttribute && !this.assistNodeIsInsideCase) {
11545
								findMethods(
11559
								findMethods(
11546
									token,
11560
									token,
11547
									null,
11561
									null,
(-)src/org/eclipse/jdt/core/tests/model/CompletionTests.java (-5 / +109 lines)
Lines 984-989 Link Here
984
	suite.addTest(new CompletionTests("test325481b"));
984
	suite.addTest(new CompletionTests("test325481b"));
985
	suite.addTest(new CompletionTests("testBug332268a"));
985
	suite.addTest(new CompletionTests("testBug332268a"));
986
	suite.addTest(new CompletionTests("testBug332268b"));
986
	suite.addTest(new CompletionTests("testBug332268b"));
987
	suite.addTest(new CompletionTests("testBug343342"));
988
	suite.addTest(new CompletionTests("testBug343342a"));
989
	suite.addTest(new CompletionTests("testBug343342b"));
987
	return suite;
990
	return suite;
988
}
991
}
989
public CompletionTests(String name) {
992
public CompletionTests(String name) {
Lines 2898-2904 Link Here
2898
	assertResults(
2901
	assertResults(
2899
			"ZZZ2[FIELD_REF]{ZZZ2, Ltest.CompletionAfterCase2;, J, ZZZ2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2902
			"ZZZ2[FIELD_REF]{ZZZ2, Ltest.CompletionAfterCase2;, J, ZZZ2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2900
			"ZZZ3[FIELD_REF]{ZZZ3, Ltest.CompletionAfterCase2;, D, ZZZ3, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2903
			"ZZZ3[FIELD_REF]{ZZZ3, Ltest.CompletionAfterCase2;, D, ZZZ3, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2901
			"ZZZ4[FIELD_REF]{ZZZ4, Ltest.CompletionAfterCase2;, Ljava.lang.Object;, ZZZ4, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2902
			"ZZZ7[FIELD_REF]{ZZZ7, Ltest.CompletionAfterCase2;, S, ZZZ7, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXPECTED_TYPE + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2904
			"ZZZ7[FIELD_REF]{ZZZ7, Ltest.CompletionAfterCase2;, S, ZZZ7, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXPECTED_TYPE + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2903
			"ZZZ1[FIELD_REF]{ZZZ1, Ltest.CompletionAfterCase2;, I, ZZZ1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}",
2905
			"ZZZ1[FIELD_REF]{ZZZ1, Ltest.CompletionAfterCase2;, I, ZZZ1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}",
2904
			requestor.getResults());
2906
			requestor.getResults());
Lines 2939-2945 Link Here
2939
	assertResults(
2941
	assertResults(
2940
			"ZZZ2[FIELD_REF]{ZZZ2, Ltest.TestConstants;, J, ZZZ2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2942
			"ZZZ2[FIELD_REF]{ZZZ2, Ltest.TestConstants;, J, ZZZ2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2941
			"ZZZ3[FIELD_REF]{ZZZ3, Ltest.TestConstants;, D, ZZZ3, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2943
			"ZZZ3[FIELD_REF]{ZZZ3, Ltest.TestConstants;, D, ZZZ3, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2942
			"ZZZ4[FIELD_REF]{ZZZ4, Ltest.TestConstants;, Ljava.lang.Object;, ZZZ4, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2943
			"ZZZ7[FIELD_REF]{ZZZ7, Ltest.TestConstants;, S, ZZZ7, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXPECTED_TYPE + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2944
			"ZZZ7[FIELD_REF]{ZZZ7, Ltest.TestConstants;, S, ZZZ7, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXPECTED_TYPE + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}\n" +
2944
			"ZZZ1[FIELD_REF]{ZZZ1, Ltest.TestConstants;, I, ZZZ1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}",
2945
			"ZZZ1[FIELD_REF]{ZZZ1, Ltest.TestConstants;, I, ZZZ1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_QUALIFIED + R_NON_RESTRICTED + R_FINAL) + "}",
2945
			requestor.getResults());
2946
			requestor.getResults());
Lines 22465-22472 Link Here
22465
	this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
22466
	this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
22466
22467
22467
	assertResults(
22468
	assertResults(
22468
			"AN_INT_VALUE[FIELD_REF]{AN_INT_VALUE, Ltest.CompletionAfterCase2;, I, AN_INT_VALUE, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE) + "}\n" +
22469
			"AN_INT_VAR2[LOCAL_VARIABLE_REF]{AN_INT_VAR2, null, I, AN_INT_VAR2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE) + "}\n" +
22470
			"AN_INT_VALUE2[FIELD_REF]{AN_INT_VALUE2, Ltest.CompletionAfterCase2;, I, AN_INT_VALUE2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_FINAL) + "}\n" +
22469
			"AN_INT_VALUE2[FIELD_REF]{AN_INT_VALUE2, Ltest.CompletionAfterCase2;, I, AN_INT_VALUE2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_FINAL) + "}\n" +
22471
			"AN_INT_VAR[LOCAL_VARIABLE_REF]{AN_INT_VAR, null, I, AN_INT_VAR, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_FINAL) + "}",
22470
			"AN_INT_VAR[LOCAL_VARIABLE_REF]{AN_INT_VAR, null, I, AN_INT_VAR, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_FINAL) + "}",
22472
			requestor.getResults());
22471
			requestor.getResults());
Lines 22508-22514 Link Here
22508
22507
22509
	assertResults(
22508
	assertResults(
22510
			"CompletionAfterCase2.AN_INNER_CLASS[TYPE_REF]{AN_INNER_CLASS, test, Ltest.CompletionAfterCase2$AN_INNER_CLASS;, null, null, " + (R_DEFAULT + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED) + "}\n" +
22509
			"CompletionAfterCase2.AN_INNER_CLASS[TYPE_REF]{AN_INNER_CLASS, test, Ltest.CompletionAfterCase2$AN_INNER_CLASS;, null, null, " + (R_DEFAULT + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED) + "}\n" +
22511
			"AN_INT_VALUE[FIELD_REF]{AN_INT_VALUE, Ltest.CompletionAfterCase2;, I, AN_INT_VALUE, null, " + (R_DEFAULT + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE) + "}\n" +
22512
			"AN_INT_VALUE2[FIELD_REF]{AN_INT_VALUE2, Ltest.CompletionAfterCase2;, I, AN_INT_VALUE2, null, " + (R_DEFAULT + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_FINAL) + "}",
22510
			"AN_INT_VALUE2[FIELD_REF]{AN_INT_VALUE2, Ltest.CompletionAfterCase2;, I, AN_INT_VALUE2, null, " + (R_DEFAULT + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_FINAL) + "}",
22513
			requestor.getResults());
22511
			requestor.getResults());
22514
}
22512
}
Lines 22947-22950 Link Here
22947
			"myVar1[FIELD_REF]{myVar1, Ltest.Test;, I, myVar1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE) + "}",
22945
			"myVar1[FIELD_REF]{myVar1, Ltest.Test;, I, myVar1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE) + "}",
22948
			requestor.getResults());
22946
			requestor.getResults());
22949
}
22947
}
22948
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
22949
public void testBug343342() throws JavaModelException {
22950
	this.workingCopies = new ICompilationUnit[1];
22951
	this.workingCopies[0] = getWorkingCopy(
22952
			"/Completion/src/test/Try.java",
22953
			"package test;\n" +
22954
			"public class Try {\n" +
22955
			"	void f(int a){\n" +
22956
			"		String xyz = null;\n" +
22957
			"		final String xyzz = null;\n" +
22958
			"		switch (a){\n" +
22959
			"			case xy : break;\n" +
22960
			"		}\n" +
22961
			"	}\n" +
22962
			"}\n");
22963
22964
	CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
22965
	requestor.allowAllRequiredProposals();
22966
	String str = this.workingCopies[0].getSource();
22967
	String completeBehind = "case xy*/";
22968
	int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
22969
	this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
22970
	assertResults(
22971
			"",
22972
			requestor.getResults());
22973
}
22974
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
22975
public void testBug343342a() throws JavaModelException {
22976
	this.workingCopies = new ICompilationUnit[2];
22977
	this.workingCopies[0] = getWorkingCopy(
22978
		"/Completion/src/test/CompletionAfterCase2.java",
22979
		"package test;\n" +
22980
		"public class CompletionAfterCase2 {\n" +
22981
		"	public static final int ZZZ1 = 5;\n" +
22982
		"	public static final long ZZZ2 = 5;\n" +
22983
		"	public static final double ZZZ3 = 0;\n" +
22984
		"	public static final Object ZZZ4 = null;\n" +
22985
		"	public static final int[] ZZZ5 = null;\n" +
22986
		"	public static final Object[] ZZZ6 = null;\n" +
22987
		"	public static final short ZZZ7 = 0;\n" +
22988
		"	int ZZZ8(){return 1;}\n" +
22989
		"	void foo(int i){\n" +
22990
		"		final int ZZZ01 = 1;\n" +
22991
		"		int ZZZ02 = 1;\n" +
22992
		"		final char ZZZ03;\n" +
22993
		"		final String ZZZ04;\n" +
22994
		"		switch(i) {\n" +
22995
		"			case ZZ\n" +
22996
		"		}\n" +
22997
		"	}\n" +
22998
		"}\n");
22999
23000
	CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
23001
	String str = this.workingCopies[0].getSource();
23002
	String completeBehind = "ZZ";
23003
	int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
23004
	this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
23005
23006
	assertResults(
23007
			"ZZZ2[FIELD_REF]{ZZZ2, Ltest.CompletionAfterCase2;, J, ZZZ2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_NON_RESTRICTED + R_FINAL + R_UNQUALIFIED) + "}\n" +
23008
			"ZZZ3[FIELD_REF]{ZZZ3, Ltest.CompletionAfterCase2;, D, ZZZ3, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_NON_RESTRICTED + R_FINAL + R_UNQUALIFIED) + "}\n" +
23009
			"ZZZ03[LOCAL_VARIABLE_REF]{ZZZ03, null, C, ZZZ03, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_NON_RESTRICTED + R_FINAL + R_UNQUALIFIED) + "}\n" +
23010
			"ZZZ7[FIELD_REF]{ZZZ7, Ltest.CompletionAfterCase2;, S, ZZZ7, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_NON_RESTRICTED + R_FINAL + R_UNQUALIFIED) + "}\n" +
23011
			"ZZZ01[LOCAL_VARIABLE_REF]{ZZZ01, null, I, ZZZ01, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_NON_RESTRICTED + R_FINAL + R_UNQUALIFIED) + "}\n" +
23012
			"ZZZ1[FIELD_REF]{ZZZ1, Ltest.CompletionAfterCase2;, I, ZZZ1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_NON_RESTRICTED + R_FINAL + R_UNQUALIFIED) + "}",
23013
			requestor.getResults());
23014
}
23015
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
23016
public void testBug343342b() throws JavaModelException {
23017
	this.workingCopies = new ICompilationUnit[2];
23018
	this.workingCopies[0] = getWorkingCopy(
23019
		"/Completion/src/test/CompletionAfterCase2.java",
23020
		"package test;\n" +
23021
		"public class CompletionAfterCase2 {\n" +
23022
		"	public static final int ZZZ1 = 5;\n" +
23023
		"	public static final long ZZZ2 = 5;\n" +
23024
		"	public static final double ZZZ3 = 0;\n" +
23025
		"	public static final Object ZZZ4 = null;\n" +
23026
		"	public static final int[] ZZZ5 = null;\n" +
23027
		"	public static final Object[] ZZZ6 = null;\n" +
23028
		"	public static final short ZZZ7 = 0;\n" +
23029
		"	int ZZZ8(){return 1;}\n" +
23030
		"	void foo(int i){\n" +
23031
		"		final int ZZZ01 = 1;\n" +
23032
		"		int ZZZ02 = 1;\n" +
23033
		"		final char ZZZ03;\n" +
23034
		"		final String ZZZ04;\n" +
23035
		"		switch(i) {\n" +
23036
		"			case CompletionAfterCase2.ZZ\n" +
23037
		"		}\n" +
23038
		"	}\n" +
23039
		"}\n");
23040
23041
	CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
23042
	String str = this.workingCopies[0].getSource();
23043
	String completeBehind = "CompletionAfterCase2.ZZ";
23044
	int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
23045
	this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
23046
23047
	assertResults(
23048
			"ZZZ2[FIELD_REF]{ZZZ2, Ltest.CompletionAfterCase2;, J, ZZZ2, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_NON_RESTRICTED + R_FINAL + R_QUALIFIED) + "}\n" +
23049
			"ZZZ3[FIELD_REF]{ZZZ3, Ltest.CompletionAfterCase2;, D, ZZZ3, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_NON_RESTRICTED + R_FINAL + R_QUALIFIED) + "}\n" +
23050
			"ZZZ7[FIELD_REF]{ZZZ7, Ltest.CompletionAfterCase2;, S, ZZZ7, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_NON_RESTRICTED + R_FINAL + R_QUALIFIED) + "}\n" +
23051
			"ZZZ1[FIELD_REF]{ZZZ1, Ltest.CompletionAfterCase2;, I, ZZZ1, null, " + (R_DEFAULT + R_RESOLVED + R_INTERESTING + R_EXACT_EXPECTED_TYPE + R_CASE + R_NON_RESTRICTED + R_FINAL + R_QUALIFIED) + "}",
23052
			requestor.getResults());
23053
}
22950
}
23054
}

Return to bug 343342