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 93119 Details for
Bug 223479
[assist] Member types of missing types are not proposed in class body
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix
bug223479_001.txt (text/plain), 8.49 KB, created by
David Audel
on 2008-03-21 07:35:49 EDT
(
hide
)
Description:
Proposed fix
Filename:
MIME Type:
Creator:
David Audel
Created:
2008-03-21 07:35:49 EDT
Size:
8.49 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/model/CompletionWithMissingTypesTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionWithMissingTypesTests.java,v >retrieving revision 1.7 >diff -u -r1.7 CompletionWithMissingTypesTests.java >--- src/org/eclipse/jdt/core/tests/model/CompletionWithMissingTypesTests.java 5 Dec 2007 10:03:21 -0000 1.7 >+++ src/org/eclipse/jdt/core/tests/model/CompletionWithMissingTypesTests.java 21 Mar 2008 11:35:00 -0000 >@@ -1632,4 +1632,38 @@ > " MissingType[TYPE_REF]{missing.MissingType, missing, Lmissing.MissingType;, null, null, ["+start2+", "+end2+"], " + (relevance1) + "}", > requestor.getResults()); > } >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=223479 >+public void test0040() throws JavaModelException { >+ this.workingCopies = new ICompilationUnit[3]; >+ this.workingCopies[0] = getWorkingCopy( >+ "/Completion/src/test/Test.java", >+ "package test;"+ >+ "public class Test {\n" + >+ " MissingType.Mem\n" + >+ "}\n"); >+ >+ this.workingCopies[1] = getWorkingCopy( >+ "/Completion/src/missing/MissingType.java", >+ "package missing;"+ >+ "public class MissingType {\n" + >+ " public class Member {}\n" + >+ "}\n"); >+ >+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true, false, true, false, true); >+ requestor.allowAllRequiredProposals(); >+ String str = this.workingCopies[0].getSource(); >+ String completeBehind = "MissingType.Mem"; >+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length(); >+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner); >+ >+ int relevance1 = R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_NON_RESTRICTED + R_NO_PROBLEMS; >+ int start1 = str.lastIndexOf("Mem") + "".length(); >+ int end1 = start1 + "Mem".length(); >+ int start2 = str.indexOf("MissingType"); >+ int end2 = start2 + "MissingType".length(); >+ assertResults( >+ "MissingType.Member[TYPE_REF]{Member, missing, Lmissing.MissingType$Member;, null, null, ["+start1+", "+end1+"], " + (relevance1) + "}\n" + >+ " MissingType[TYPE_REF]{missing.MissingType, missing, Lmissing.MissingType;, null, null, ["+start2+", "+end2+"], " + (relevance1) + "}", >+ requestor.getResults()); >+} > } >Index: src/org/eclipse/jdt/core/tests/model/CompletionContextTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionContextTests.java,v >retrieving revision 1.8 >diff -u -r1.8 CompletionContextTests.java >--- src/org/eclipse/jdt/core/tests/model/CompletionContextTests.java 6 Mar 2008 15:31:41 -0000 1.8 >+++ src/org/eclipse/jdt/core/tests/model/CompletionContextTests.java 21 Mar 2008 11:35:00 -0000 >@@ -3610,8 +3610,8 @@ > "}"); > > String str = this.workingCopies[0].getSource(); >- int tokenStart = -1; >- int tokenEnd = -1; >+ int tokenStart = str.lastIndexOf("ZZZZ"); >+ int tokenEnd = tokenStart + "ZZZZ".length() - 1; > int cursorLocation = str.lastIndexOf("ZZZZ") + "ZZZZ".length(); > > CompletionResult result = contextComplete(this.workingCopies[0], cursorLocation); >@@ -3619,8 +3619,8 @@ > assertResults( > "completion offset="+(cursorLocation)+"\n" + > "completion range=["+(tokenStart)+", "+(tokenEnd)+"]\n" + >- "completion token=null\n" + >- "completion token kind=TOKEN_KIND_UNKNOWN\n" + >+ "completion token=\"ZZZZ\"\n" + >+ "completion token kind=TOKEN_KIND_NAME\n" + > "expectedTypesSignatures=null\n" + > "expectedTypesKeys=null\n"+ > "completion token location=UNKNOWN", >#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.355 >diff -u -r1.355 CompletionEngine.java >--- codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java 13 Mar 2008 09:48:44 -0000 1.355 >+++ codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java 21 Mar 2008 11:35:03 -0000 >@@ -1269,7 +1269,8 @@ > > } else if (this.assistNodeInJavadoc == 0 && > (this.requestor.isAllowingRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_REF) || >- this.requestor.isAllowingRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_REF))) { >+ this.requestor.isAllowingRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_REF) || >+ this.requestor.isAllowingRequiredProposals(CompletionProposal.TYPE_REF, CompletionProposal.TYPE_REF))) { > boolean proposeField = !this.requestor.isIgnored(CompletionProposal.FIELD_REF); > boolean proposeMethod = !this.requestor.isIgnored(CompletionProposal.METHOD_REF); > if (proposeField || proposeMethod) { >@@ -1344,7 +1345,18 @@ > long completionPosition = ref.sourcePositions[ref.tokens.length]; > > // get the source positions of the completion identifier >- if (qualifiedBinding instanceof ReferenceBinding && !(qualifiedBinding instanceof TypeVariableBinding)) { >+ if (qualifiedBinding.problemId() == ProblemReasons.NotFound) { >+ setSourceAndTokenRange((int) (completionPosition >>> 32), (int) completionPosition); >+ if (this.assistNodeInJavadoc == 0 && >+ (this.requestor.isAllowingRequiredProposals(CompletionProposal.TYPE_REF, CompletionProposal.TYPE_REF))) { >+ if(ref.tokens.length == 1) { >+ findMemberTypesFromMissingType( >+ ref.tokens[0], >+ ref.sourcePositions[0], >+ scope); >+ } >+ } >+ } else if (qualifiedBinding instanceof ReferenceBinding && !(qualifiedBinding instanceof TypeVariableBinding)) { > if (!this.requestor.isIgnored(CompletionProposal.TYPE_REF)) { > setSourceAndTokenRange((int) (completionPosition >>> 32), (int) completionPosition); > >@@ -5255,7 +5267,7 @@ > } > } > >- private void findMemberTypes( >+ protected void findMemberTypes( > char[] typeName, > ReferenceBinding receiverType, > Scope scope, >@@ -5418,6 +5430,40 @@ > } > } > } >+ >+ private void findMemberTypesFromMissingType( >+ char[] typeName, >+ final long pos, >+ final Scope scope) { >+ MissingTypesGuesser missingTypesConverter = new MissingTypesGuesser(this); >+ MissingTypesGuesser.GuessedTypeRequestor substitutionRequestor = >+ new MissingTypesGuesser.GuessedTypeRequestor() { >+ public void accept( >+ TypeBinding guessedType, >+ Binding[] missingElements, >+ int[] missingElementsStarts, >+ int[] missingElementsEnds, >+ boolean hasProblems) { >+ if (guessedType instanceof ReferenceBinding) { >+ findMemberTypes( >+ CompletionEngine.this.completionToken, >+ (ReferenceBinding)guessedType, >+ scope, >+ scope.enclosingSourceType(), >+ false, >+ false, >+ new ObjectVector(), >+ missingElements, >+ missingElementsStarts, >+ missingElementsEnds, >+ hasProblems); >+ } >+ } >+ }; >+ SingleTypeReference typeRef = new SingleTypeReference(typeName, pos); >+ typeRef.resolvedType = new ProblemReferenceBinding(new char[][]{ typeName }, null, ProblemReasons.NotFound); >+ missingTypesConverter.guess(typeRef, scope, substitutionRequestor); >+ } > > /* > * Find javadoc parameter names. >Index: codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnQualifiedTypeReference.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnQualifiedTypeReference.java,v >retrieving revision 1.24 >diff -u -r1.24 CompletionOnQualifiedTypeReference.java >--- codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnQualifiedTypeReference.java 6 Mar 2007 02:38:48 -0000 1.24 >+++ codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnQualifiedTypeReference.java 21 Mar 2008 11:35:03 -0000 >@@ -57,6 +57,11 @@ > Binding binding = scope.parent.getTypeOrPackage(tokens); // step up from the ClassScope > if (!binding.isValidBinding()) { > scope.problemReporter().invalidType(this, (TypeBinding) binding); >+ >+ if (binding.problemId() == ProblemReasons.NotFound) { >+ throw new CompletionNodeFound(this, binding, scope); >+ } >+ > throw new CompletionNodeFound(); > } >
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 223479
:
93119
|
93121