Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 193702 Details for
Bug 343342
[assist] Non constant variables, strings and methods are proposed inside case statements
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
proposed fix v1.0 + regression tests
patch343342.txt (text/plain), 12.74 KB, created by
Ayushman Jain
on 2011-04-20 10:23:28 EDT
(
hide
)
Description:
proposed fix v1.0 + regression tests
Filename:
MIME Type:
Creator:
Ayushman Jain
Created:
2011-04-20 10:23:28 EDT
Size:
12.74 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java,v >retrieving revision 1.427 >diff -u -r1.427 CompletionEngine.java >--- codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java 28 Feb 2011 18:27:48 -0000 1.427 >+++ codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java 20 Apr 2011 14:21:42 -0000 >@@ -6045,10 +6045,17 @@ > if (this.options.checkVisibility > && !field.canBeSeenBy(receiverType, invocationSite, scope)) continue next; > >- // don't propose array types in case expression >+ // don't propose non constant fields or strings (1.6 or below) in case expression > // https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346 >- if (this.assistNodeIsInsideCase && field.type instanceof ArrayBinding) >- continue next; >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342 >+ if (this.assistNodeIsInsideCase) { >+ if (field.isFinal() && field.isStatic()) { >+ if (!(field.type instanceof BaseTypeBinding)) >+ continue next; >+ } else { >+ continue next; // non-constants not allowed in case. >+ } >+ } > > boolean prefixRequired = false; > >@@ -11426,10 +11433,17 @@ > continue next; > } > >- // don't propose array types in case expression >+ // don't propose non constant variables or strings (1.6 or below) in case expression > // https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346 >- if (this.assistNodeIsInsideCase && local.type instanceof ArrayBinding) >- continue next; >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342 >+ if (this.assistNodeIsInsideCase) { >+ if (local.isFinal()) { >+ if (!(local.type instanceof BaseTypeBinding)) >+ continue next; >+ } else { >+ continue next; // non-constants not allowed in case. >+ } >+ } > > int ptr = this.uninterestingBindingsPtr; > // Cases where the binding is uninteresting eg. for completion occurring inside a local var >@@ -11541,7 +11555,7 @@ > -1, > -1); > } >- if(proposeMethod && !insideAnnotationAttribute) { >+ if(proposeMethod && !insideAnnotationAttribute && !this.assistNodeIsInsideCase) { > findMethods( > token, > null, >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/model/CompletionTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests.java,v >retrieving revision 1.238 >diff -u -r1.238 CompletionTests.java >--- src/org/eclipse/jdt/core/tests/model/CompletionTests.java 24 Feb 2011 02:48:03 -0000 1.238 >+++ src/org/eclipse/jdt/core/tests/model/CompletionTests.java 20 Apr 2011 14:21:46 -0000 >@@ -984,6 +984,9 @@ > suite.addTest(new CompletionTests("test325481b")); > suite.addTest(new CompletionTests("testBug332268a")); > suite.addTest(new CompletionTests("testBug332268b")); >+ suite.addTest(new CompletionTests("testBug343342")); >+ suite.addTest(new CompletionTests("testBug343342a")); >+ suite.addTest(new CompletionTests("testBug343342b")); > return suite; > } > public CompletionTests(String name) { >@@ -2898,7 +2901,6 @@ > assertResults( > "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" + > "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" + >- "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" + > "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" + > "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) + "}", > requestor.getResults()); >@@ -2939,7 +2941,6 @@ > assertResults( > "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" + > "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" + >- "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" + > "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" + > "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) + "}", > requestor.getResults()); >@@ -22465,8 +22466,6 @@ > this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner); > > assertResults( >- "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" + >- "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" + > "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" + > "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) + "}", > requestor.getResults()); >@@ -22508,7 +22507,6 @@ > > assertResults( > "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" + >- "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" + > "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) + "}", > requestor.getResults()); > } >@@ -22947,4 +22945,110 @@ > "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) + "}", > requestor.getResults()); > } >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342 >+public void testBug343342() throws JavaModelException { >+ this.workingCopies = new ICompilationUnit[1]; >+ this.workingCopies[0] = getWorkingCopy( >+ "/Completion/src/test/Try.java", >+ "package test;\n" + >+ "public class Try {\n" + >+ " void f(int a){\n" + >+ " String xyz = null;\n" + >+ " final String xyzz = null;\n" + >+ " switch (a){\n" + >+ " case xy : break;\n" + >+ " }\n" + >+ " }\n" + >+ "}\n"); >+ >+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true); >+ requestor.allowAllRequiredProposals(); >+ String str = this.workingCopies[0].getSource(); >+ String completeBehind = "case xy*/"; >+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length(); >+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner); >+ assertResults( >+ "", >+ requestor.getResults()); >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342 >+public void testBug343342a() throws JavaModelException { >+ this.workingCopies = new ICompilationUnit[2]; >+ this.workingCopies[0] = getWorkingCopy( >+ "/Completion/src/test/CompletionAfterCase2.java", >+ "package test;\n" + >+ "public class CompletionAfterCase2 {\n" + >+ " public static final int ZZZ1 = 5;\n" + >+ " public static final long ZZZ2 = 5;\n" + >+ " public static final double ZZZ3 = 0;\n" + >+ " public static final Object ZZZ4 = null;\n" + >+ " public static final int[] ZZZ5 = null;\n" + >+ " public static final Object[] ZZZ6 = null;\n" + >+ " public static final short ZZZ7 = 0;\n" + >+ " int ZZZ8(){return 1;}\n" + >+ " void foo(int i){\n" + >+ " final int ZZZ01 = 1;\n" + >+ " int ZZZ02 = 1;\n" + >+ " final char ZZZ03;\n" + >+ " final String ZZZ04;\n" + >+ " switch(i) {\n" + >+ " case ZZ\n" + >+ " }\n" + >+ " }\n" + >+ "}\n"); >+ >+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true); >+ String str = this.workingCopies[0].getSource(); >+ String completeBehind = "ZZ"; >+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length(); >+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner); >+ >+ assertResults( >+ "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" + >+ "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" + >+ "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" + >+ "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" + >+ "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" + >+ "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) + "}", >+ requestor.getResults()); >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342 >+public void testBug343342b() throws JavaModelException { >+ this.workingCopies = new ICompilationUnit[2]; >+ this.workingCopies[0] = getWorkingCopy( >+ "/Completion/src/test/CompletionAfterCase2.java", >+ "package test;\n" + >+ "public class CompletionAfterCase2 {\n" + >+ " public static final int ZZZ1 = 5;\n" + >+ " public static final long ZZZ2 = 5;\n" + >+ " public static final double ZZZ3 = 0;\n" + >+ " public static final Object ZZZ4 = null;\n" + >+ " public static final int[] ZZZ5 = null;\n" + >+ " public static final Object[] ZZZ6 = null;\n" + >+ " public static final short ZZZ7 = 0;\n" + >+ " int ZZZ8(){return 1;}\n" + >+ " void foo(int i){\n" + >+ " final int ZZZ01 = 1;\n" + >+ " int ZZZ02 = 1;\n" + >+ " final char ZZZ03;\n" + >+ " final String ZZZ04;\n" + >+ " switch(i) {\n" + >+ " case CompletionAfterCase2.ZZ\n" + >+ " }\n" + >+ " }\n" + >+ "}\n"); >+ >+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true); >+ String str = this.workingCopies[0].getSource(); >+ String completeBehind = "CompletionAfterCase2.ZZ"; >+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length(); >+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner); >+ >+ assertResults( >+ "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" + >+ "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" + >+ "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" + >+ "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) + "}", >+ requestor.getResults()); >+} > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 343342
: 193702 |
193792