PY-11855 Run manage.py task improvements
authorIlya.Kazakevich <Ilya.Kazakevich@jetbrains.com>
Wed, 4 Feb 2015 20:13:20 +0000 (23:13 +0300)
committerIlya.Kazakevich <Ilya.Kazakevich@jetbrains.com>
Wed, 4 Feb 2015 20:13:20 +0000 (23:13 +0300)
Tests enabled, completion bug fixed

python/src/com/jetbrains/python/commandInterface/CommandInterfaceView.java
python/src/com/jetbrains/python/commandInterface/commandsWithArgs/CommandAdapter.java
python/src/com/jetbrains/python/commandInterface/commandsWithArgs/CommandInterfacePresenterCommandBased.java
python/src/com/jetbrains/python/commandInterface/swingView/CommandInterfaceViewSwingImpl.java
python/src/com/jetbrains/python/commandInterface/swingView/SmartTextField.java
python/src/com/jetbrains/python/suggestionList/SuggestionList.java

index 6990709a8bcd02b26b416105c9e519e6bf9f2582..3377431712c3c72d9179e28b970a1f0459eb50c5 100644 (file)
@@ -101,6 +101,11 @@ public interface CommandInterfaceView {
    */
   void setBalloons(@NotNull final Collection<WordWithPosition> balloons);
 
+  /**
+   * @return true if current caret position is on the word (no on whitespace)
+   */
+  boolean isCaretOnWord();
+
 
   /**
    * Special place that may be underlined
index 5acdd93e49d6631764086ad8532e49e1ecab55d0..51d0a42942f0949c5b51586e9e2c8fd0e2a2f5e6 100644 (file)
@@ -18,38 +18,28 @@ package com.jetbrains.python.commandInterface.commandsWithArgs;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import java.util.*;
-
 /**
  * Simple command implementation
+ *
  * @author Ilya.Kazakevich
  */
 public class CommandAdapter implements Command {
   @NotNull
   private final String myName;
-  @NotNull
-  private final List<Argument> myArguments = new ArrayList<Argument>();
   @Nullable
   private final String myHelp;
+  @NotNull
+  private final ArgumentsInfo myArgumentsInfo;
 
   /**
-   * @param help      help text
-   * @param name      command name
-   * @param arguments command arguments
-   */
-  public CommandAdapter(@NotNull final String name, @Nullable final String help, @NotNull final Argument... arguments) {
-    this(name, help, Arrays.asList(arguments));
-  }
-
-  /**
-   * @param help      help text
-   * @param name      command name
-   * @param arguments command arguments
+   * @param help          help text
+   * @param name          command name
+   * @param argumentsInfo arguments info
    */
-  public CommandAdapter(@NotNull final String name, @Nullable final String help, @NotNull final Collection<Argument> arguments) {
+  public CommandAdapter(@NotNull final String name, @Nullable final String help, @NotNull ArgumentsInfo argumentsInfo) {
     myName = name;
-    myArguments.addAll(arguments);
     myHelp = help;
+    myArgumentsInfo = argumentsInfo;
   }
 
   /**
@@ -72,6 +62,6 @@ public class CommandAdapter implements Command {
   @NotNull
   @Override
   public final ArgumentsInfo getArgumentsInfo() {
-    return NoArgumentsInfo.INSTANCE;
+    return myArgumentsInfo;
   }
 }
index 03981b5585b050a7f78be8ef337c6d8534b95ece..0090a9e13d6572c422b64d3458b609cd2dcdfdcb 100644 (file)
@@ -45,10 +45,6 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
    * currenly used strategy (see interface for more info)
    */
   private Strategy myStrategy;
-  /**
-   * When user asks for completion, last word should be removed if it is tied to suggestion
-   */
-  private boolean myLastSuggestionTiedToWord;
 
 
   /**
@@ -81,7 +77,6 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
 
   @Override
   public void textChanged(final boolean inForcedTextMode) {
-    myLastSuggestionTiedToWord = false;
     configureStrategy();
     myView.setSubText(myStrategy.getSubText());
     final Pair<SpecialErrorPlace, List<WordWithPosition>> errorInfo = myStrategy.getErrorInfo();
@@ -94,7 +89,6 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
     final String lastPart = getLastPart();
     if ((lastPart != null) && myStrategy.isUnknownTextExists()) {
       //Filter to starts from
-      myLastSuggestionTiedToWord = true;
       final Iterator<String> iterator = suggestions.iterator();
       while (iterator.hasNext()) {
         final String textToCheck = iterator.next();
@@ -122,7 +116,10 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
    */
   @NotNull
   private SuggestionsBuilder getBuilderWithHistory() {
-    final SuggestionsBuilder suggestionsBuilder = new SuggestionsBuilder();
+    return new SuggestionsBuilder();
+
+    // TODO: Uncomment when history would be fixed
+    /*final SuggestionsBuilder suggestionsBuilder = new SuggestionsBuilder();
     final List<CommandExecutionInfo> history = getHistory();
     final Collection<String> historyCommands = new LinkedHashSet<String>();
     for (final CommandExecutionInfo info : history) {
@@ -137,7 +134,7 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
       suggestionsBuilder.changeGroup(true);
     }
 
-    return suggestionsBuilder;
+    return suggestionsBuilder;*/
   }
 
   /**
@@ -178,7 +175,7 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
       if (suggestionInfo.getSuggestions().contains(valueFromSuggestionList)) {
         final ParsedCommandLine commandLine = getParsedCommandLine();
         final List<String> words = commandLine != null ? commandLine.getAsWords() : new ArrayList<String>();
-        if (!words.isEmpty() && myLastSuggestionTiedToWord) {
+        if (!words.isEmpty() && myView.isCaretOnWord()) {
           words.remove(words.size() - 1);
         }
         words.add(valueFromSuggestionList);
@@ -190,13 +187,10 @@ public class CommandInterfacePresenterCommandBased<C extends Command> extends Co
 
   @Override
   public void suggestionRequested() {
-    myLastSuggestionTiedToWord = false;
-
     final SuggestionInfo suggestionInfo = myStrategy.getSuggestionInfo();
     final List<String> suggestions = suggestionInfo.getSuggestions();
     if (!suggestions.isEmpty()) {
-      // TODO: Uncomment when history would be fixed
-      final SuggestionsBuilder suggestionsBuilder = new SuggestionsBuilder();/*getBuilderWithHistory();*/
+      final SuggestionsBuilder suggestionsBuilder = getBuilderWithHistory();
       suggestionsBuilder.add(suggestions);
       myView.displaySuggestions(suggestionsBuilder, suggestionInfo.myAbsolute, null);
     }
index 4dd182e6645e90e4fcd1e3d3e8f823eddffa1cad..3071a8dc8665bc50b4d45b0ee27fb7a0d456362f 100644 (file)
@@ -251,6 +251,15 @@ public class CommandInterfaceViewSwingImpl extends JBPopupAdapter implements Com
     }
   }
 
+  @Override
+  public final boolean isCaretOnWord() {
+    final int caretPosition = myMainTextField.getCaretPosition();
+    if (caretPosition == 0) {
+      return false; // At the beginning of the line
+    }
+    return !Character.isWhitespace(myMainTextField.getText().toCharArray()[caretPosition - 1]);
+  }
+
   @Override
   public void setBalloons(@NotNull final Collection<WordWithPosition> balloons) {
     synchronized (myBalloons) {
index 517568522461beb8788b183feb22c4e2ca9b867d..0a247bbcec81e529e1aa9a02bb985f9e7d69ae20 100644 (file)
@@ -98,7 +98,7 @@ public class SmartTextField extends JTextField {
   }
 
   /**
-   * @return place (in chars) where caret.
+   * @return place (in px) where caret.
    */
   int getTextCursorPosition() {
     return (getCaretPosition() + 1) * getColumnWidth();
index 8d200c01b439532a42602ff5d6af603a06108a21..c43f23809806afdb93762bb0f0984f86cfe0975f 100644 (file)
@@ -162,6 +162,9 @@ public class SuggestionList {
    */
   @Nullable
   public String getValue() {
+    if (myListPopUp == null || !myListPopUp.isVisible()) {
+      return null; // Nothing is selected if list is invisible
+    }
     final Object value = myList.getSelectedValue();
     return ((value == null) ? "" : getElement(value).mySuggestion.getText());
   }
@@ -169,7 +172,7 @@ public class SuggestionList {
   /**
    * Element that represents suggestion
    */
-  private static class SuggestionListElement {
+  private static final class SuggestionListElement {
     /**
      * is part of odd group
      */