diff options
Diffstat (limited to 'org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java')
-rw-r--r-- | org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java | 56 |
1 files changed, 53 insertions, 3 deletions
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 099d883256..ba6cc119a2 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 @@ -26,6 +26,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Map; + import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; @@ -50,6 +51,7 @@ import org.eclipse.jdt.core.WorkingCopyOwner; import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.core.compiler.IProblem; +import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jdt.core.search.IJavaSearchScope; import org.eclipse.jdt.core.search.SearchEngine; @@ -57,9 +59,10 @@ import org.eclipse.jdt.core.search.SearchMatch; import org.eclipse.jdt.core.search.SearchParticipant; import org.eclipse.jdt.core.search.SearchPattern; import org.eclipse.jdt.core.search.SearchRequestor; +import org.eclipse.jdt.internal.codeassist.complete.AssistNodeParentAnnotationArrayInitializer; +import org.eclipse.jdt.internal.codeassist.complete.CompletionJavadoc; import org.eclipse.jdt.internal.codeassist.complete.CompletionNodeDetector; import org.eclipse.jdt.internal.codeassist.complete.CompletionNodeFound; -import org.eclipse.jdt.internal.codeassist.complete.AssistNodeParentAnnotationArrayInitializer; import org.eclipse.jdt.internal.codeassist.complete.CompletionOnAnnotationOfType; import org.eclipse.jdt.internal.codeassist.complete.CompletionOnArgumentName; import org.eclipse.jdt.internal.codeassist.complete.CompletionOnBranchStatementLabel; @@ -2234,7 +2237,8 @@ public final class CompletionEngine } } } - + // javadoc tag completion in module-info file + contextAccepted = completeJavadocTagInModuleInfo(parsedUnit); if (parsedUnit.types != null) { try { this.lookupEnvironment.buildTypeBindings(parsedUnit, null /*no access restriction*/); @@ -2337,6 +2341,43 @@ public final class CompletionEngine } } + private boolean completeJavadocTagInModuleInfo(CompilationUnitDeclaration parsedUnit) { + boolean contextAccepted = false; + if (this.parser.assistNodeParent instanceof CompletionJavadoc && parsedUnit.isModuleInfo() ) { + try { + this.lookupEnvironment.buildTypeBindings(parsedUnit, null /*no access restriction*/); + if(this.parser.assistNode instanceof CompletionOnJavadocTag) { + ((CompletionOnJavadocTag)this.parser.assistNode).filterPossibleTags(parsedUnit.scope); + } + throw new CompletionNodeFound(this.parser.assistNode, null, parsedUnit.scope); + } + catch (CompletionNodeFound e) { + if (e.astNode != null) { + // if null then we found a problem in the completion node + if(DEBUG) { + System.out.print("COMPLETION - Completion node : "); //$NON-NLS-1$ + System.out.println(e.astNode.toString()); + if(this.parser.assistNodeParent != null) { + System.out.print("COMPLETION - Parent Node : "); //$NON-NLS-1$ + System.out.println(this.parser.assistNodeParent); + } + } + this.lookupEnvironment.unitBeingCompleted = parsedUnit; // better resilient to further error reporting + contextAccepted = + complete( + e.astNode, + this.parser.assistNodeParent, + this.parser.enclosingNode, + parsedUnit, + e.qualifiedBinding, + e.scope, + e.insideTypeAnnotation); + } + } + } + return contextAccepted; + } + private boolean checkForCNF(TypeReference ref, CompilationUnitDeclaration parsedUnit, boolean showAll) { this.lookupEnvironment.buildTypeBindings(parsedUnit, null); this.lookupEnvironment.completeTypeBindings(parsedUnit, true); @@ -5313,7 +5354,16 @@ public final class CompletionEngine proposal.setDeclarationSignature(getSignature(method.declaringClass)); proposal.setSignature(getSignature(method.returnType)); proposal.setName(method.selector); - proposal.setCompletion(method.selector); + // add "=" to completion since it will always be needed + char[] completion= method.selector; + if (JavaCore.INSERT.equals(this.javaProject.getOption(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR, true))) { + completion= CharOperation.concat(completion, new char[] {' '}); + } + completion= CharOperation.concat(completion, new char[] {'='}); + if (JavaCore.INSERT.equals(this.javaProject.getOption(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR, true))) { + completion= CharOperation.concat(completion, new char[] {' '}); + } + proposal.setCompletion(completion); proposal.setFlags(method.modifiers); proposal.setReplaceRange(this.startPosition - this.offset, this.endPosition - this.offset); proposal.setTokenRange(this.tokenStart - this.offset, this.tokenEnd - this.offset); |