used words filtering in code completion
authorMartin Fousek <marfous@netbeans.org>
Wed, 23 Jun 2010 13:21:51 +0200
changeset 16341b000111468ea
parent 16340 2cce557ebbaa
child 16342 603b27dbf129
child 16344 a76b482b2bf0
used words filtering in code completion
php.smarty/manifest.mf
php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/CodeCompletionUtils.java
php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionProvider.java
php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionQuery.java
php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/entries/CodeCompletionEntryMetadata.java
php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/entries/SmartyCodeCompletionOffer.java
     1.1 --- a/php.smarty/manifest.mf	Mon Jun 21 15:27:52 2010 +0200
     1.2 +++ b/php.smarty/manifest.mf	Wed Jun 23 13:21:51 2010 +0200
     1.3 @@ -2,5 +2,5 @@
     1.4  OpenIDE-Module: org.netbeans.modules.php.smarty
     1.5  OpenIDE-Module-Layer: org/netbeans/modules/php/smarty/resources/layer.xml
     1.6  OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/php/smarty/resources/Bundle.properties
     1.7 -OpenIDE-Module-Specification-Version: 1.31
     1.8 +OpenIDE-Module-Specification-Version: 1.33
     1.9  
     2.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/CodeCompletionUtils.java	Mon Jun 21 15:27:52 2010 +0200
     2.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/CodeCompletionUtils.java	Wed Jun 23 13:21:51 2010 +0200
     2.3 @@ -38,6 +38,8 @@
     2.4   */
     2.5  package org.netbeans.modules.php.smarty.editor.completion;
     2.6  
     2.7 +import java.util.ArrayList;
     2.8 +import java.util.Collections;
     2.9  import java.util.Locale;
    2.10  import javax.swing.text.BadLocationException;
    2.11  import javax.swing.text.Document;
    2.12 @@ -96,7 +98,7 @@
    2.13          tokenSequence.move(offset);
    2.14          if (tokenSequence.moveNext() || tokenSequence.movePrevious()) {
    2.15              Object tokenID = tokenSequence.token().id();
    2.16 -            if (tokenID == TplTopTokenId.T_HTML || tokenID == TplTopTokenId.T_SMARTY_CLOSE_DELIMITER) {
    2.17 +            if (tokenID == TplTopTokenId.T_HTML || tokenID == TplTopTokenId.T_PHP || tokenID == TplTopTokenId.T_COMMENT) {
    2.18                  return false;
    2.19              }
    2.20          }
    2.21 @@ -121,26 +123,38 @@
    2.22          return false;
    2.23      }
    2.24  
    2.25 -    static String afterSmartyCommand(Document doc, int offset) {
    2.26 +    static ArrayList<String> afterSmartyCommand(Document doc, int offset) {
    2.27          int readLength = (SCANNING_MAX_FILTER_LENGHT > offset) ? offset : SCANNING_MAX_FILTER_LENGHT;
    2.28          try {
    2.29 -            return getLastKeyword(doc.getText(offset - readLength, readLength), SmartyFramework.getOpenDelimiter(NbEditorUtilities.getFileObject(doc)));
    2.30 +            return getLastKeywords(doc.getText(offset - readLength, readLength), SmartyFramework.getOpenDelimiter(NbEditorUtilities.getFileObject(doc)));
    2.31          } catch (BadLocationException ex) {
    2.32              Exceptions.printStackTrace(ex);
    2.33          }
    2.34 -        return "";
    2.35 +        return new ArrayList();
    2.36      }
    2.37  
    2.38 -    public static String getLastKeyword(String area, String openDelimiter) {
    2.39 +    public static ArrayList<String> getLastKeywords(String area, String openDelimiter) {
    2.40          int delimiterPosition = area.lastIndexOf(openDelimiter);
    2.41          String searchingContent = (delimiterPosition > -1) ? area.substring(delimiterPosition + openDelimiter.length()) : area;
    2.42 -        String[] keywords = searchingContent.split(" ");
    2.43 -        String lastKeyword = "";
    2.44 +        String[] keywords = searchingContent.split("[ =]");
    2.45 +        ArrayList<String> availableItems = new ArrayList<String>();
    2.46          for (String string : keywords) {
    2.47              if (SmartyCodeCompletionOffer.getFunctionParameters().get(string) != null) {
    2.48 -                lastKeyword = string;
    2.49 +                if (availableItems.isEmpty()) {
    2.50 +                    availableItems.add(string);
    2.51 +                }
    2.52 +                else {
    2.53 +                    availableItems.set(0, string);
    2.54 +                }
    2.55 +            }
    2.56 +            if (!availableItems.isEmpty()) {
    2.57 +                for (TplCompletionItem completionItem : SmartyCodeCompletionOffer.getFunctionParameters().get(availableItems.get(0))) {
    2.58 +                    if (completionItem.getItemText().equals(string)) {
    2.59 +                        availableItems.add(string);
    2.60 +                    }
    2.61 +                }
    2.62              }
    2.63          }
    2.64 -        return lastKeyword;
    2.65 +        return availableItems;
    2.66      }
    2.67  }
     3.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionProvider.java	Mon Jun 21 15:27:52 2010 +0200
     3.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionProvider.java	Wed Jun 23 13:21:51 2010 +0200
     3.3 @@ -41,10 +41,10 @@
     3.4  package org.netbeans.modules.php.smarty.editor.completion;
     3.5  
     3.6  import java.lang.String;
     3.7 -import java.util.Collection;
     3.8 -import java.util.Collections;
     3.9  import java.net.URL;
    3.10  import java.util.ArrayList;
    3.11 +import java.util.HashSet;
    3.12 +import java.util.Set;
    3.13  import javax.swing.Action;
    3.14  import javax.swing.text.BadLocationException;
    3.15  import javax.swing.text.Document;
    3.16 @@ -89,7 +89,7 @@
    3.17  
    3.18      private static class Query extends AbstractQuery {
    3.19  
    3.20 -        private volatile Collection<? extends CompletionItem> items = Collections.emptyList();
    3.21 +        private volatile Set<TplCompletionItem> items = new HashSet<TplCompletionItem>();
    3.22          private JTextComponent component;
    3.23  
    3.24          @Override
    3.25 @@ -101,21 +101,19 @@
    3.26          protected void doQuery(CompletionResultSet resultSet, Document doc, int caretOffset) {
    3.27              try {
    3.28                  TplCompletionQuery.CompletionResult result = new TplCompletionQuery(doc, caretOffset).query();
    3.29 -                String command = ""; boolean inSmarty = false;
    3.30 +                ArrayList<String> commands; boolean inSmarty = false;
    3.31                  if (CodeCompletionUtils.insideSmartyCode(doc, caretOffset)) {
    3.32                      if (CodeCompletionUtils.inVariableModifiers(doc, caretOffset)) {
    3.33 -                        items = result.getVariableModifiers();
    3.34 +                        items.addAll(result.getVariableModifiers());
    3.35                          inSmarty = true;
    3.36                      }
    3.37 -                    if (!(command = CodeCompletionUtils.afterSmartyCommand(doc, caretOffset)).equals("")) {
    3.38 -                        items = new ArrayList<CompletionItem>(result.getParamsForCommand(command));
    3.39 +                    if (!(commands = CodeCompletionUtils.afterSmartyCommand(doc, caretOffset)).isEmpty()) {
    3.40 +                        items.addAll(result.getParamsForCommand(commands));
    3.41                          inSmarty = true;
    3.42                      }
    3.43                      if (!inSmarty) {
    3.44 -                        if (result == null){
    3.45 -                            items = Collections.emptyList();
    3.46 -                        } else {
    3.47 -                            items = result.getFunctions();
    3.48 +                        if (result != null){
    3.49 +                            items.addAll(result.getFunctions());
    3.50                          }
    3.51                      }
    3.52                  }
    3.53 @@ -132,6 +130,7 @@
    3.54                  if (component.getText(component.getCaretPosition() - 1, 1).toString().equals("|")) {
    3.55                      return false;
    3.56                  }
    3.57 +                
    3.58              } catch (BadLocationException ex) {
    3.59                  return false;
    3.60              }
     4.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionQuery.java	Mon Jun 21 15:27:52 2010 +0200
     4.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionQuery.java	Wed Jun 23 13:21:51 2010 +0200
     4.3 @@ -41,6 +41,7 @@
     4.4  package org.netbeans.modules.php.smarty.editor.completion;
     4.5  
     4.6  import java.util.*;
     4.7 +import java.util.ArrayList;
     4.8  import javax.swing.text.Document;
     4.9  import org.netbeans.modules.parsing.api.ParserManager;
    4.10  import org.netbeans.modules.parsing.api.ResultIterator;
    4.11 @@ -49,7 +50,6 @@
    4.12  import org.netbeans.modules.parsing.api.UserTask;
    4.13  import org.netbeans.modules.parsing.spi.ParseException;
    4.14  import org.netbeans.modules.php.smarty.editor.completion.entries.SmartyCodeCompletionOffer;
    4.15 -import org.netbeans.spi.editor.completion.CompletionItem;
    4.16  
    4.17  /**
    4.18   *
    4.19 @@ -93,27 +93,40 @@
    4.20  
    4.21      public static class CompletionResult {
    4.22  
    4.23 -        private Collection<? extends CompletionItem> functions;
    4.24 -        private Collection<? extends CompletionItem> variableModifiers;
    4.25 -        private HashMap<String, Collection<? extends CompletionItem>> functionParams;
    4.26 +        private ArrayList<TplCompletionItem> functions;
    4.27 +        private ArrayList<TplCompletionItem> variableModifiers;
    4.28 +        private HashMap<String, ArrayList<TplCompletionItem>> functionParams;
    4.29  
    4.30 -        CompletionResult(Collection<? extends CompletionItem> functions, Collection<? extends CompletionItem>
    4.31 -                variableModifiers, HashMap<String, Collection<? extends CompletionItem>> functionParams) {
    4.32 +        CompletionResult(ArrayList<TplCompletionItem> functions, ArrayList<TplCompletionItem>
    4.33 +                variableModifiers, HashMap<String, ArrayList<TplCompletionItem>> functionParams) {
    4.34              this.functions = functions;
    4.35              this.variableModifiers = variableModifiers;
    4.36              this.functionParams = functionParams;
    4.37          }
    4.38  
    4.39 -        public Collection<? extends CompletionItem> getFunctions() {
    4.40 +        public ArrayList<TplCompletionItem> getFunctions() {
    4.41              return functions;
    4.42          }
    4.43  
    4.44 -        public Collection<? extends CompletionItem> getVariableModifiers() {
    4.45 +        public ArrayList<TplCompletionItem> getVariableModifiers() {
    4.46              return variableModifiers;
    4.47          }
    4.48  
    4.49 -        public Collection<? extends CompletionItem> getParamsForCommand(String command) {
    4.50 -            return functionParams.get(command);
    4.51 +        public ArrayList<TplCompletionItem> getParamsForCommand(ArrayList<String> commands) {
    4.52 +            // first command contain main keyword
    4.53 +            ArrayList<TplCompletionItem> availableItems = new ArrayList<TplCompletionItem>(functionParams.get(commands.get(0)));
    4.54 +            // rest of them is just removed from codecompletion
    4.55 +            Iterator it = availableItems.iterator();
    4.56 +            while (it.hasNext()) {
    4.57 +                TplCompletionItem tplCompletionItem = (TplCompletionItem)it.next();
    4.58 +                for (String command : commands) {
    4.59 +                    if (tplCompletionItem.getItemText().equals(command)) {
    4.60 +                        it.remove();
    4.61 +                        break;
    4.62 +                    }
    4.63 +                }
    4.64 +            }
    4.65 +            return  availableItems;
    4.66          }
    4.67  
    4.68  
     5.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/entries/CodeCompletionEntryMetadata.java	Mon Jun 21 15:27:52 2010 +0200
     5.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/entries/CodeCompletionEntryMetadata.java	Wed Jun 23 13:21:51 2010 +0200
     5.3 @@ -40,9 +40,8 @@
     5.4  
     5.5  import java.util.ArrayList;
     5.6  import java.util.Collection;
     5.7 -import java.util.Collections;
     5.8 +import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem;
     5.9  import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem.FunctionParametersCompletionItem;
    5.10 -import org.netbeans.spi.editor.completion.CompletionItem;
    5.11  
    5.12  /**
    5.13   *
    5.14 @@ -53,7 +52,7 @@
    5.15      private String keyword;
    5.16      private String help;
    5.17      private String helpUrl;
    5.18 -    private Collection<CompletionItem> params = new ArrayList<CompletionItem>();
    5.19 +    private ArrayList<TplCompletionItem> params = new ArrayList<TplCompletionItem>();
    5.20  
    5.21      public CodeCompletionEntryMetadata(String keyword, String help, String helpUrl,
    5.22              Collection<CodeCompletionParamMetadata> params) {
    5.23 @@ -81,7 +80,7 @@
    5.24          return helpUrl;
    5.25      }
    5.26  
    5.27 -    public Collection<? extends CompletionItem> getParameters() {
    5.28 +    public ArrayList<TplCompletionItem> getParameters() {
    5.29          return params;
    5.30      }
    5.31  }
     6.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/entries/SmartyCodeCompletionOffer.java	Mon Jun 21 15:27:52 2010 +0200
     6.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/entries/SmartyCodeCompletionOffer.java	Wed Jun 23 13:21:51 2010 +0200
     6.3 @@ -45,9 +45,7 @@
     6.4  import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem;
     6.5  import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem.BuiltInFunctionsCompletionItem;
     6.6  import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem.CustomFunctionsCompletionItem;
     6.7 -import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem.FunctionParametersCompletionItem;
     6.8  import org.netbeans.modules.php.smarty.editor.completion.TplCompletionItem.VariableModifiersCompletionItem;
     6.9 -import org.netbeans.spi.editor.completion.CompletionItem;
    6.10  import org.openide.util.Exceptions;
    6.11  
    6.12  /**
    6.13 @@ -56,24 +54,24 @@
    6.14   */
    6.15  public class SmartyCodeCompletionOffer {
    6.16  
    6.17 -    private final static Collection<TplCompletionItem> completionItemsFunctions = new ArrayList<TplCompletionItem>();
    6.18 -    private final static Collection<TplCompletionItem> completionItemsModifiers = new ArrayList<TplCompletionItem>();
    6.19 -    private final static HashMap<String, Collection<? extends CompletionItem>> completionItemsFunctionParams = new HashMap<String, Collection<? extends CompletionItem>>();
    6.20 +    private final static ArrayList<TplCompletionItem> completionItemsFunctions = new ArrayList<TplCompletionItem>();
    6.21 +    private final static ArrayList<TplCompletionItem> completionItemsModifiers = new ArrayList<TplCompletionItem>();
    6.22 +    private final static HashMap<String, ArrayList<TplCompletionItem>> completionItemsFunctionParams = new HashMap<String, ArrayList<TplCompletionItem>>();
    6.23  
    6.24      static {
    6.25          loadFunctions(new String[]{"built-in-functions", "custom-functions"});
    6.26          loadModifiers("variable-modifiers");
    6.27      }
    6.28  
    6.29 -    public static Collection<TplCompletionItem> getFunctions() {
    6.30 +    public static ArrayList<TplCompletionItem> getFunctions() {
    6.31          return completionItemsFunctions;
    6.32      }
    6.33  
    6.34 -    public static Collection<TplCompletionItem> getVariableModifiers() {
    6.35 +    public static ArrayList<TplCompletionItem> getVariableModifiers() {
    6.36          return completionItemsModifiers;
    6.37      }
    6.38  
    6.39 -    public static HashMap<String, Collection<? extends CompletionItem>> getFunctionParameters() {
    6.40 +    public static HashMap<String, ArrayList<TplCompletionItem>> getFunctionParameters() {
    6.41          return completionItemsFunctionParams;
    6.42      }
    6.43  
    6.44 @@ -109,10 +107,7 @@
    6.45  
    6.46          try {
    6.47              Collection<CodeCompletionEntryMetadata> ccData = CodeCompletionEntries.readAllCodeCompletionEntriesFromXML(inputStream, filePath);
    6.48 -            for (CodeCompletionEntryMetadata codeCompletionEntryMetadata : ccData) {
    6.49 -                ccList.add(codeCompletionEntryMetadata);
    6.50 -            }
    6.51 -//            ccList.addAll(ccData);
    6.52 +            ccList.addAll(ccData);
    6.53          } catch (Exception ex) {
    6.54              Exceptions.printStackTrace(ex);
    6.55          }