Example usage for org.eclipse.jdt.core CompletionContext getTokenEnd

List of usage examples for org.eclipse.jdt.core CompletionContext getTokenEnd

Introduction

In this page you can find the example usage for org.eclipse.jdt.core CompletionContext getTokenEnd.

Prototype


public int getTokenEnd() 

Source Link

Document

Returns the character index of the end (exclusive) of the subrange in the source file buffer containing the relevant token.

Usage

From source file:org.eclipse.babel.tapiji.tools.java.ui.MessageCompletionProposalComputer.java

License:Open Source License

@Override
public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context,
        IProgressMonitor monitor) {//from   www .  j  a  v a 2s.co  m

    List<ICompletionProposal> completions = new ArrayList<ICompletionProposal>();

    if (!InternationalizationNature.hasNature(
            ((JavaContentAssistInvocationContext) context).getCompilationUnit().getResource().getProject())) {
        return completions;
    }

    try {
        JavaContentAssistInvocationContext javaContext = ((JavaContentAssistInvocationContext) context);
        CompletionContext coreContext = javaContext.getCoreContext();

        int tokenStart = coreContext.getTokenStart();
        int tokenEnd = coreContext.getTokenEnd();
        int tokenOffset = coreContext.getOffset();
        boolean isStringLiteral = coreContext.getTokenKind() == CompletionContext.TOKEN_KIND_STRING_LITERAL;

        if (cu == null) {
            manager = ResourceBundleManager
                    .getManager(javaContext.getCompilationUnit().getResource().getProject());

            resource = javaContext.getCompilationUnit().getResource();

            csav = new ResourceAuditVisitor(null, manager.getProject().getName());

            cu = ASTutilsUI.getAstRoot(ASTutilsUI.getCompilationUnit(resource));

            cu.accept(csav);
        }

        if (coreContext.getTokenKind() == CompletionContext.TOKEN_KIND_NAME
                && (tokenEnd + 1) - tokenStart > 0) {

            // Cal10n extension
            String[] metaData = ASTutils.getCal10nEnumLiteralDataAtPos(manager.getProject().getName(), cu,
                    tokenOffset - 1);

            if (metaData != null) {
                completions.add(new KeyRefactoringProposal(tokenOffset, metaData[1],
                        manager.getProject().getName(), metaData[0], metaData[2]));
            }

            return completions;
        }

        if (tokenStart < 0) {
            // is string literal in front of cursor?
            StringLiteral strLit = ASTutils.getStringLiteralAtPos(cu, tokenOffset - 1);
            if (strLit != null) {
                tokenStart = strLit.getStartPosition();
                tokenEnd = tokenStart + strLit.getLength() - 1;
                tokenOffset = tokenOffset - 1;
                isStringLiteral = true;
            } else {
                tokenStart = tokenOffset;
                tokenEnd = tokenOffset;
            }
        }

        if (isStringLiteral) {
            tokenStart++;
        }

        tokenEnd = Math.max(tokenEnd, tokenStart);

        String fullToken = "";

        if (tokenStart < tokenEnd) {
            fullToken = context.getDocument().get(tokenStart, tokenEnd - tokenStart);
        }

        // Check if the string literal is up to be written within the
        // context of a resource-bundle accessor method
        if (csav.getKeyAt(new Long(tokenOffset)) != null && isStringLiteral) {
            completions.addAll(getResourceBundleCompletionProposals(tokenStart, tokenEnd, tokenOffset,
                    isStringLiteral, fullToken, manager, csav, resource));
        } else if (csav.getRBReferenceAt(new Long(tokenOffset)) != null && isStringLiteral) {
            completions.addAll(getRBReferenceCompletionProposals(tokenStart, tokenEnd, fullToken,
                    isStringLiteral, manager, resource));
        } else {
            completions.addAll(getBasicJavaCompletionProposals(tokenStart, tokenEnd, tokenOffset, fullToken,
                    isStringLiteral, manager, csav, resource));
        }
        if (completions.size() == 1) {
            completions.add(new NoActionProposal());
        }

    } catch (Exception e) {
        Logger.logError(e);
    }
    return completions;
}

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();
    }//from w  w  w.  j  a v a2 s . c  om

    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();
    }/*w  w w .  j  ava 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.eclipse.jpt.jpa.ui.internal.jpql.JpaJpqlJavaCompletionProposalComputer.java

License:Open Source License

private List<ICompletionProposal> computeCompletionProposals(JavaContentAssistInvocationContext context,
        IProgressMonitor monitor) throws Exception {

    CompletionContext completionContext = context.getCoreContext();
    if (completionContext == null)
        return Collections.emptyList();

    // The token "start" is the offset of the token's first character within the document.
    // A token start of -1 can means:
    // - It is inside the string representation of a unicode character, \\u0|0E9 where | is the
    //   cursor, then -1 is returned;
    // - The string is not valid (it has some invalid characters)
    int tokenStart[] = { completionContext.getTokenStart() };
    int tokenEnd[] = { completionContext.getTokenEnd() };
    if (tokenStart[0] == -1)
        return Collections.emptyList();

    int[] position = { completionContext.getOffset() - tokenStart[0] - 1 };
    if (position[0] < 0)
        return Collections.emptyList();

    ICompilationUnit compilationUnit = context.getCompilationUnit();
    if (compilationUnit == null)
        return Collections.emptyList();
    CompilationUnit astRoot = ASTTools.buildASTRoot(compilationUnit);

    IFile file = getCorrespondingResource(compilationUnit);
    if (file == null)
        return Collections.emptyList();

    JpaFile jpaFile = (JpaFile) file.getAdapter(JpaFile.class);
    if (jpaFile == null)
        return Collections.emptyList();

    monitor.worked(80);/*from  w w  w .  ja  v a2  s.c om*/
    checkCanceled(monitor);

    // Retrieve the JPA's model object
    NamedQuery namedQuery = namedQuery(jpaFile, tokenStart[0]);
    if (namedQuery == null)
        return Collections.emptyList();

    // Retrieve the actual value of the element "query" since the content assist can be
    // invoked before the model received the new content
    String jpqlQuery = retrieveQuery(astRoot, tokenStart, tokenEnd, position);

    // Now create the proposals
    ResourceManager resourceManager = this.getResourceManager(context.getViewer().getTextWidget());
    return buildProposals(namedQuery, jpqlQuery, tokenStart[0], tokenEnd[0], position[0], resourceManager);
}

From source file:org.nuxeo.ide.connect.completion.StudioProposalComputer.java

License:Open Source License

@SuppressWarnings("rawtypes")
@Override//from w ww .ja va 2s . com
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();
}