R3_2_maintenance - bug 154993
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests_1_5.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests_1_5.java
index a3402e2..af9b336 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests_1_5.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests_1_5.java
@@ -8816,4 +8816,33 @@
"Test2[TYPE_REF]{Test2, test, Ltest.Test2;, null, null, " + (R_DEFAULT + R_INTERESTING + R_CASE + R_EXACT_NAME + R_EXPECTED_TYPE + R_UNQUALIFIED + R_NON_RESTRICTED) + "}",
requestor.getResults());
}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=154993
+public void test0297() throws JavaModelException {
+ this.workingCopies = new ICompilationUnit[2];
+ this.workingCopies[0] = getWorkingCopy(
+ "/Completion/src3/test/Test.java",
+ "package test;\n" +
+ "public class Test {\n" +
+ " String description = \"Some description\";\n" +
+ " @Description(this.description)\n" +
+ " public void method() {\n" +
+ " }");
+
+ this.workingCopies[1] = getWorkingCopy(
+ "/Completion/src3/test/Description.java",
+ "package test;\n" +
+ "public @interface Description {\n" +
+ " String value();\n" +
+ "}");
+
+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+ String str = this.workingCopies[0].getSource();
+ String completeBehind = "this.";
+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+
+ assertResults(
+ "",
+ requestor.getResults());
+}
}
diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html
index 70b93b8..2294a0c 100644
--- a/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -47,7 +47,9 @@
<h2>What's new in this drop</h2>
<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161557">161557</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154993">154993</a>
+org.eclipse.jdt.ui.JavaNoTypeCompletionProposalComputer throws a runtime exception when using content assist on 'this.' in annontations
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161557">161557</a>
[assist] JavaTypeCompletionProposalComputer throws a runtime exception when using content assist on generics type argument with instance member arrays
<a name="v_680_R32x"></a>
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
index c8188e2..98e0ca0 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
@@ -999,18 +999,20 @@
this.completionToken = access.token;
- if (!this.requestor.isIgnored(CompletionProposal.KEYWORD)) {
- findKeywords(this.completionToken, new char[][]{Keywords.NEW}, false);
+ if (!access.isInsideAnnotation) {
+ if (!this.requestor.isIgnored(CompletionProposal.KEYWORD)) {
+ findKeywords(this.completionToken, new char[][]{Keywords.NEW}, false);
+ }
+
+ findFieldsAndMethods(
+ this.completionToken,
+ ((TypeBinding) qualifiedBinding).capture(scope, access.receiver.sourceEnd),
+ scope,
+ access,
+ scope,
+ false,
+ access.receiver instanceof SuperReference);
}
-
- findFieldsAndMethods(
- this.completionToken,
- ((TypeBinding) qualifiedBinding).capture(scope, access.receiver.sourceEnd),
- scope,
- access,
- scope,
- false,
- access.receiver instanceof SuperReference);
} else if (astNode instanceof CompletionOnMessageSend) {
setSourceRange(astNode.sourceStart, astNode.sourceEnd, false);
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnMemberAccess.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnMemberAccess.java
index 37e0da8..d597d24 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnMemberAccess.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnMemberAccess.java
@@ -37,9 +37,12 @@
public class CompletionOnMemberAccess extends FieldReference {
- public CompletionOnMemberAccess(char[] source, long pos) {
+ public boolean isInsideAnnotation;
+
+ public CompletionOnMemberAccess(char[] source, long pos, boolean isInsideAnnotation) {
super(source, pos);
+ this.isInsideAnnotation = isInsideAnnotation;
}
public StringBuffer printExpression(int indent, StringBuffer output) {
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
index 9f4dce2..91192d7 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
@@ -3611,7 +3611,7 @@
private void pushCompletionOnMemberAccessOnExpressionStack(boolean isSuperAccess) {
char[] source = identifierStack[identifierPtr];
long pos = identifierPositionStack[identifierPtr--];
- CompletionOnMemberAccess fr = new CompletionOnMemberAccess(source, pos);
+ CompletionOnMemberAccess fr = new CompletionOnMemberAccess(source, pos, isInsideAnnotation());
this.assistNode = fr;
this.lastCheckPoint = fr.sourceEnd + 1;
identifierLengthPtr--;