Package org.springframework.ide.eclipse.quickfix.jdt.computers

Source Code of org.springframework.ide.eclipse.quickfix.jdt.computers.QualifierCompletionProposalComputer

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  All rights reserved. This program and the accompanying materials
*  are made available under the terms of the Eclipse Public License v1.0
*  which accompanies this distribution, and is available at
*  http://www.eclipse.org/legal/epl-v10.html
*
*  Contributors:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.quickfix.jdt.computers;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.BodyDeclaration;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.internal.ui.text.correction.AssistContext;
import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer;
import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.source.ISourceViewer;
import org.springframework.ide.eclipse.quickfix.Activator;
import org.springframework.ide.eclipse.quickfix.jdt.proposals.QualifierCompletionProposal;
import org.springsource.ide.eclipse.commons.core.SpringCoreUtils;
import org.springsource.ide.eclipse.commons.core.StatusHandler;

/**
* @author Terry Denney
* @author Martin Lippert
* @since 2.6
*/
public class QualifierCompletionProposalComputer extends JavaCompletionProposalComputer {

  @Override
  public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context,
      IProgressMonitor monitor) {

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

    if (context instanceof JavaContentAssistInvocationContext) {
      JavaContentAssistInvocationContext javaContext = (JavaContentAssistInvocationContext) context;

      // check if project is a spring project
      if (SpringCoreUtils.isSpringProject(javaContext.getProject().getProject())) {

        ITextViewer viewer = javaContext.getViewer();
        IDocument document = viewer.getDocument();

        try {
          int invocationOffset = context.getInvocationOffset();
          int start = invocationOffset;
          int end = invocationOffset;

          while (start != 0 && Character.isUnicodeIdentifierPart(document.getChar(start - 1))) {
            start--;
          }

          if (start > 0) {
            if (document.getChar(start - 1) == '@') {
              String annotation = document.get(start, end - start);
              if ("qualifier".startsWith(annotation.toLowerCase())) {
                if (viewer instanceof ISourceViewer) {
                  AssistContext assistContext = new AssistContext(javaContext.getCompilationUnit(),
                      (ISourceViewer) viewer, start - 1, end - start + 1);
                  ASTNode annotationNode = assistContext.getCoveredNode();
                  BodyDeclaration decl = getParentDeclaration(annotationNode);

                  if (decl instanceof FieldDeclaration) {
                    // FieldDeclaration fieldDecl =
                    // (FieldDeclaration) decl;
                    // ITypeBinding typeBinding =
                    // fieldDecl.getType().resolveBinding();
                    proposals
                        .add(new QualifierCompletionProposal(annotationNode, decl, javaContext));
                    // proposals.addAll(getMatchingBeansProposal(annotationNode,
                    // fieldDecl,
                    // typeBinding, javaContext, start,
                    // end
                    // - start));
                  }
                  else if (decl instanceof MethodDeclaration) {
                    // MethodDeclaration methodDecl =
                    // (MethodDeclaration) decl;
                    SingleVariableDeclaration variableDecl = getParentVariableDeclaration(annotationNode);
                    if (variableDecl != null) {
                      // ITypeBinding typeBinding =
                      // variableDecl.getType().resolveBinding();
                      proposals.add(new QualifierCompletionProposal(annotationNode, decl,
                          javaContext));
                      // proposals.addAll(getMatchingBeansProposal(annotationNode,
                      // methodDecl,
                      // typeBinding, javaContext,
                      // start,
                      // end - start));
                    }
                  }
                }
              }
            }
          }
        }
        catch (BadLocationException e) {
          StatusHandler.log(new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));
        }
      }
    }
    return proposals;
  }

  private BodyDeclaration getParentDeclaration(ASTNode node) {
    if (node == null || node instanceof BodyDeclaration) {
      return (BodyDeclaration) node;
    }
    return getParentDeclaration(node.getParent());
  }

  private SingleVariableDeclaration getParentVariableDeclaration(ASTNode node) {
    if (node == null || node instanceof SingleVariableDeclaration) {
      return (SingleVariableDeclaration) node;
    }
    return getParentVariableDeclaration(node.getParent());
  }

  // private List<ICompletionProposal> getMatchingBeansProposal(ASTNode
  // annotationNode, BodyDeclaration decl,
  // ITypeBinding typeBinding, JavaContentAssistInvocationContext javaContext,
  // int offset, int length) {
  // List<ICompletionProposal> proposals = new
  // ArrayList<ICompletionProposal>();
  //
  // if (typeBinding != null) {
  // Set<String> matchingBeans =
  // ProposalCalculatorUtil.getMatchingBeans(javaContext, typeBinding);
  // for (String matchingBean : matchingBeans) {
  // proposals.add(new QualifierCompletionProposal(matchingBean,
  // annotationNode, decl, javaContext));
  // }
  // }
  // return proposals;
  // }

}
TOP

Related Classes of org.springframework.ide.eclipse.quickfix.jdt.computers.QualifierCompletionProposalComputer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.