Package tk.eclipse.plugin.xmleditor.editors

Source Code of tk.eclipse.plugin.xmleditor.editors.ClassNameAssistProcessor$JavaClassAssistInfo

package tk.eclipse.plugin.xmleditor.editors;

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

import org.eclipse.core.resources.IFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner;
import org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal;
import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal;
import org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal;
import org.eclipse.jdt.ui.text.java.CompletionProposalCollector;
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.swt.graphics.Image;

import tk.eclipse.plugin.htmleditor.HTMLUtil;
import tk.eclipse.plugin.htmleditor.assist.AssistInfo;

/**
* Provides code completion at the attribute value.
*
* @author Naoki Takezoe
* @since 2.0.3
*/
public class ClassNameAssistProcessor {
 
  /**
   * Provides classname completion.
   *
   * @param value the inputed value
   * @return the array of attribute value proposals
   */
  public AssistInfo[] getClassAttributeValues(IFile file, String value) {
    if(value.length()==0){
      return new AssistInfo[0];
    }
    try {
      IJavaProject project = JavaCore.create(file.getProject());
      CompletionProposalCollector collector = new CompletionProposalCollector(project);
      ICompilationUnit unit = HTMLUtil.getTemporaryCompilationUnit(project);
      String source = "public class _xxx { public static void hoge(){ " + value + "}}";
      HTMLUtil.setContentsToCU(unit, source);
      unit.codeComplete(source.length() - 2, collector, DefaultWorkingCopyOwner.PRIMARY);
      IJavaCompletionProposal[] proposals = collector.getJavaCompletionProposals();
      List<AssistInfo> result = new ArrayList<AssistInfo>();
     
      for(int j=0;j<proposals.length;j++){
        if(proposals[j].getImage()!=null){
          if(proposals[j] instanceof LazyJavaTypeCompletionProposal){
            LazyJavaTypeCompletionProposal p = (LazyJavaTypeCompletionProposal)proposals[j];
            if(p.getReplacementString().startsWith(value)){
              result.add(new JavaClassAssistInfo(p));
            }
          } else if(proposals[j] instanceof JavaCompletionProposal){
            JavaCompletionProposal p = (JavaCompletionProposal)proposals[j];
            if(p.getReplacementString().startsWith(value)){
              result.add(new JavaClassAssistInfo(p));
            }
          }
        }
      }
     
      return result.toArray(new AssistInfo[result.size()]);
     
    } catch(Exception ex){
      ex.printStackTrace();
    }
   
    return new AssistInfo[0];
  }
 
  /**
   * The wrapper of <code>AbstractJavaCompletionProposal</code>.
   * <p>
   * This class provides the <code>AssistInfo</code> interface and
   * <code>toCompletionProposal()</code> returns the wrapped
   * <code>AbstractJavaCompletionProposal</code> instance.
   */
  private class JavaClassAssistInfo extends AssistInfo {
   
    private AbstractJavaCompletionProposal proposal;
   
    public JavaClassAssistInfo(AbstractJavaCompletionProposal proposal){
      super("");
      this.proposal = proposal;
    }
   
    @Override
    public String getDisplayString() {
      return proposal.getDisplayString();
    }

    @Override
    public Image getImage() {
      return proposal.getImage();
    }

    @Override
    public String getReplaceString() {
      return proposal.getReplacementString();
    }

    @Override
    public ICompletionProposal toCompletionProposal(int offset, String matchString, Image defaultImage) {
      proposal.setReplacementOffset(offset - matchString.length());
      proposal.setReplacementLength(matchString.length());
      proposal.setCursorPosition(proposal.getReplacementString().length());
      return proposal;
    }
  }
 
}
TOP

Related Classes of tk.eclipse.plugin.xmleditor.editors.ClassNameAssistProcessor$JavaClassAssistInfo

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.