Package tool.editors.contentassist

Source Code of tool.editors.contentassist.ProposalCache

package tool.editors.contentassist;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.jface.text.contentassist.CompletionProposal;
import org.eclipse.jface.text.contentassist.ContextInformation;
import org.eclipse.jface.text.contentassist.ICompletionProposal;

import tool.editors.text.IToolWords;

public class ProposalCache {
  private static Map<String, ContextInformation> languageContextInformation;
  private static Map<String, String> replacements;

  static {
    languageContextInformation = new HashMap<String, ContextInformation>();
    for (String reservedWord : IToolWords.ToolReservedWords) {
      ContextInformation ci = new ContextInformation(reservedWord,
          MessageFormat.format("{0} valid 5 characters around insertion point",
              new Object[] { reservedWord }));
      languageContextInformation.put(reservedWord, ci);
    }
   
    /*
     * Special case replacements.
     *
     */
    replacements = new HashMap<String, String>();
    replacements.put("when", "when  do");
    replacements.put("case", "case  is\nend case;\n");
    replacements.put("if", "if  end\nend if;\n");
   
   
  }
  private ProposalCache(){
    super();
  }
  public static ICompletionProposal[] languageProposals(String lastWord, int offset, String indent){
      int replacementOffset = offset - lastWord.length();
      int replacementLength = lastWord.length();
     
      List<ICompletionProposal> reservedWords = new ArrayList<ICompletionProposal>();
      // Reserved words
      for (String reservedWord : IToolWords.ToolReservedWords) {
        if (!lastWord.isEmpty() && !reservedWord.startsWith(lastWord)){
          continue;
        }

        if (reservedWord.equalsIgnoreCase("for")){
          reservedWords.add(forProposal(lastWord, offset, indent));
        } else {
          String replacement = replacements.get(reservedWord);
          if (replacement == null)
            replacement = reservedWord;
          reservedWords.add(
              new CompletionProposal(replacement, // replacement string
                  replacementOffset, //replacement offset
                  replacementLength, // replacement length
                  replacement.length(), // cursor position
                  null, // image
                  reservedWord, // display string
                  languageContextInformation.get(reservedWord), // context information
                  MessageFormat.format("Tool reserved: {0}", //additional proposal information
                      new Object[] { reservedWord})));
        }
      }
      // Constants
      for (String constant : IToolWords.ToolConstants) {
        if (!lastWord.isEmpty() && !constant.startsWith(lastWord)){
          continue;
        }
        reservedWords.add(
          new CompletionProposal(constant,
              replacementOffset,
              replacementLength,
              constant.length()));
      }
      // Scalars
      for (String scalar : IToolWords.ToolScalarTypes) {
        if (!lastWord.isEmpty() && !scalar.startsWith(lastWord)){
          continue;
        }
        reservedWords.add(
          new CompletionProposal(scalar, // replacement string
              replacementOffset, //replacement offset
              replacementLength, // replacement length
              scalar.length()));//, // cursor position
      }
      //Sort the result
      Collections.sort(reservedWords, new Comparator<ICompletionProposal>() {

        @Override
        public int compare(ICompletionProposal o1, ICompletionProposal o2) {
          if (o1 == null || o2 == null)
            return 0;
          return o1.getDisplayString().compareToIgnoreCase(o2.getDisplayString());
        }
      });
     
      ICompletionProposal[] reservedArray = new ICompletionProposal[reservedWords.size()];
      int index = 0;
      for (ICompletionProposal prop : reservedWords){
        reservedArray[index] = prop;
        index++;
      }
      return reservedArray;  }
 
  public static ICompletionProposal[] classProposals(String identifyer, int offset) {
    // TODO Auto-generated method stub
    return null;
  }

  private static ICompletionProposal forProposal(String lastWord, int offset, String indent){
      int replacementOffset = offset - lastWord.length();
      int replacementLength = lastWord.length();
    String replacement = "for x in y do\n" + indent + "end for;\n";
    CompletionProposal cp = new CompletionProposal(replacement, // replacement string
        replacementOffset, //replacement offset
        replacementLength, // replacement length
        4, // cursor position
        null, // image
        "for", // display string
        languageContextInformation.get("for"), // context information
        replacement); //additional proposal information
    return cp;
  }
}
TOP

Related Classes of tool.editors.contentassist.ProposalCache

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.