List of usage examples for org.eclipse.jdt.core CompletionContext getToken
public char[] getToken()
From source file:org.eclipse.jpt.jaxb.ui.internal.JaxbJavaCompletionProposalComputer.java
License:Open Source License
private List<ICompletionProposal> computeCompletionProposals_(JavaContentAssistInvocationContext context) { ICompilationUnit cu = context.getCompilationUnit(); IFile file = (cu != null) ? getCorrespondingResource(cu) : null; IContentType contentType = (file != null) ? ContentTypeTools.contentType(file) : null; if (contentType == null || !contentType.isKindOf(JavaResourceCompilationUnit.CONTENT_TYPE)) { return Collections.emptyList(); }//w w w. ja v a2 s. c o m JaxbProject jaxbProject = this.getJaxbProject(file.getProject()); if (jaxbProject == null) { return Collections.emptyList(); } Iterable<? extends JaxbContextNode> javaNodes = jaxbProject.getPrimaryJavaNodes(cu); if (IterableTools.isEmpty(javaNodes)) { return Collections.emptyList(); } CompletionContext cc = context.getCoreContext(); // the context's "token" is really a sort of "prefix" - it does NOT // correspond to the "start" and "end" we get below... char[] prefix = cc.getToken(); Predicate<String> filter = this.buildPrefixFilter(prefix); // the token "kind" tells us if we are in a String literal already - CompletionContext.TOKEN_KIND_STRING_LITERAL int tokenKind = cc.getTokenKind(); // the token "start" is the offset of the token's first character int tokenStart = cc.getTokenStart(); // the token "end" is the offset of the token's last character (yuk) int tokenEnd = cc.getTokenEnd(); if (tokenStart == -1) { // not sure why this happens - see bug 242286 return Collections.emptyList(); } // System.out.println("token start: " + tokenStart); // System.out.println("token end: " + tokenEnd); // System.out.println("token kind: " + tokenKind); // String source = cu.getSource(); // String token = source.substring(Math.max(0, tokenStart), Math.min(source.length(), tokenEnd + 1)); // System.out.println("token: =>" + token + "<="); // String snippet = source.substring(Math.max(0, tokenStart - 20), Math.min(source.length(), tokenEnd + 21)); // System.out.println("surrounding snippet: =>" + snippet + "<="); List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); for (JaxbContextNode javaNode : javaNodes) { for (String proposal : this.buildCompletionProposals(javaNode, context.getInvocationOffset(), filter)) { if (tokenKind == CompletionContext.TOKEN_KIND_STRING_LITERAL) {//already quoted proposals.add(new CompletionProposal(proposal, tokenStart, tokenEnd - tokenStart - 1, proposal.length())); } else {//add the quotes proposals.add(new CompletionProposal("\"" + proposal + "\"", tokenStart, //$NON-NLS-1$//$NON-NLS-2$ tokenEnd - tokenStart + 1, proposal.length() + 2)); } } } return proposals; }
From source file:org.eclipse.jpt.jpa.ui.internal.JpaJavaCompletionProposalComputer.java
License:Open Source License
private List<ICompletionProposal> computeCompletionProposals_(JavaContentAssistInvocationContext context) { ICompilationUnit cu = context.getCompilationUnit(); if (cu == null) { return Collections.emptyList(); }/*from w ww . j a va 2 s.c o m*/ IFile file = this.getCorrespondingResource(cu); if (file == null) { return Collections.emptyList(); } JpaFile jpaFile = this.getJpaFile(file); if (jpaFile == null) { return Collections.emptyList(); } Collection<JpaStructureNode> rootStructureNodes = CollectionTools .collection(jpaFile.getRootStructureNodes()); if (rootStructureNodes.isEmpty()) { return Collections.emptyList(); } CompletionContext cc = context.getCoreContext(); // the context's "token" is really a sort of "prefix" - it does NOT // correspond to the "start" and "end" we get below... char[] prefix = cc.getToken(); Predicate<String> filter = this.buildPrefixFilter(prefix); // the token "kind" tells us if we are in a String literal already - CompletionContext.TOKEN_KIND_STRING_LITERAL int tokenKind = cc.getTokenKind(); // the token "start" is the offset of the token's first character int tokenStart = cc.getTokenStart(); // the token "end" is the offset of the token's last character (yuk) int tokenEnd = cc.getTokenEnd(); if (tokenStart == -1) { // not sure why this happens - see bug 242286 return Collections.emptyList(); } // System.out.println("token start: " + tokenStart); // System.out.println("token end: " + tokenEnd); // System.out.println("token kind: " + tokenKind); // String source = cu.getSource(); // String token = source.substring(Math.max(0, tokenStart), Math.min(source.length(), tokenEnd + 1)); // System.out.println("token: =>" + token + "<="); // String snippet = source.substring(Math.max(0, tokenStart - 20), Math.min(source.length(), tokenEnd + 21)); // System.out.println("surrounding snippet: =>" + snippet + "<="); List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); for (JpaStructureNode structureNode : rootStructureNodes) { for (String s : this.buildCompletionProposals((JavaPersistentType) structureNode, context.getInvocationOffset(), filter)) { if (tokenKind == CompletionContext.TOKEN_KIND_STRING_LITERAL) {//already quoted proposals.add(new CompletionProposal(s, tokenStart + 1, tokenEnd - tokenStart - 1, s.length())); } else {//add the quotes proposals.add(new CompletionProposal("\"" + s + "\"", tokenStart, tokenEnd - tokenStart + 1, //$NON-NLS-1$//$NON-NLS-2$ s.length() + 2)); } } } return proposals; }
From source file:org.eclipselabs.stlipse.javaeditor.JavaCompletionProposalComputer.java
License:Open Source License
public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {/*from www .j av a 2 s . c o m*/ List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); if (context instanceof JavaContentAssistInvocationContext) { JavaContentAssistInvocationContext javaContext = (JavaContentAssistInvocationContext) context; CompletionContext coreContext = javaContext.getCoreContext(); ICompilationUnit unit = javaContext.getCompilationUnit(); try { if (unit != null && unit.isStructureKnown()) { int offset = javaContext.getInvocationOffset(); IJavaElement element = unit.getElementAt(offset); if (element != null && element instanceof IAnnotatable) { ValueInfo valueInfo = scanAnnotation(offset, (IAnnotatable) element); if (valueInfo != null) { int replacementLength = valueInfo.getValueLength(); IJavaProject project = javaContext.getProject(); String beanFqn = unit.getType(element.getParent().getElementName()) .getFullyQualifiedName(); if (valueInfo.isField()) { if (valueInfo.isPropertyOmmitted()) { StringBuilder matchStr = resolveBeanPropertyName(element); if (matchStr.length() > 0) { char[] token = coreContext.getToken(); matchStr.append('.').append(token); Map<String, String> fields = BeanPropertyCache.searchFields(project, beanFqn, matchStr.toString(), false, -1, false); proposals.addAll(BeanPropertyCache.buildFieldNameProposal(fields, String.valueOf(token), coreContext.getTokenStart() + 1, replacementLength)); } } else { String input = String.valueOf(coreContext.getToken()); Map<String, String> fields = BeanPropertyCache.searchFields(project, beanFqn, input, false, -1, false); proposals.addAll(BeanPropertyCache.buildFieldNameProposal(fields, input, coreContext.getTokenStart() + 1, replacementLength)); } } else if (valueInfo.isEventHandler()) { String input = String.valueOf(coreContext.getToken()); boolean isNot = false; if (input.length() > 0 && input.startsWith("!")) { isNot = true; input = input.length() > 1 ? input.substring(1) : ""; } List<String> events = BeanPropertyCache.searchEventHandler(project, beanFqn, input, false, false); int relevance = events.size(); for (String event : events) { String replaceStr = isNot ? "!" + event : event; ICompletionProposal proposal = new JavaCompletionProposal(replaceStr, coreContext.getTokenStart() + 1, replacementLength, replaceStr.length(), Activator.getIcon(), event, null, null, relevance--); proposals.add(proposal); } } } } } } catch (JavaModelException e) { Activator.log(Status.ERROR, "Something went wrong.", e); } } return proposals; }
From source file:org.nuxeo.ide.connect.completion.StudioProposalComputer.java
License:Open Source License
@SuppressWarnings("rawtypes") @Override//w ww. j av a 2s .c o m public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) { if (context instanceof JavaContentAssistInvocationContext) { JavaContentAssistInvocationContext jctx = (JavaContentAssistInvocationContext) context; IJavaProject jproject = jctx.getProject(); if (jproject == null) { return Collections.emptyList(); } StudioProjectBinding binding = ConnectPlugin.getStudioProvider().getBinding(jproject.getProject()); if (binding == null) { return Collections.emptyList(); } // look if we are in a string literal and initialize locations CompletionContext cc = jctx.getCoreContext(); int offset = context.getInvocationOffset(); int replacementLength = -1; String prefix = null; if (cc.getTokenKind() == CompletionContext.TOKEN_KIND_STRING_LITERAL) { offset = cc.getTokenStart(); int end = cc.getTokenEnd(); replacementLength = end - offset + 1; prefix = new String(cc.getToken()); } else { Point p = jctx.getViewer().getSelectedRange(); replacementLength = p.y; } // assignment case IType type = jctx.getExpectedType(); if (type != null && "java.lang.String".equals(type.getFullyQualifiedName())) { StudioAssignmentProposalCollector collector = new StudioAssignmentProposalCollector(jctx, binding); collector.initialize(offset, replacementLength, prefix); return collector.getProposals(); } // method arg case ICompilationUnit unit = jctx.getCompilationUnit(); StudioArgumentProposalCollector collector = new StudioArgumentProposalCollector(jctx, binding); collector.initialize(offset, replacementLength, prefix); try { unit.codeComplete(offset, collector, new NullProgressMonitor()); return collector.getProposals(); } catch (Exception e) { UI.showError("Error while compiling studio proposal", e); } } return Collections.emptyList(); }