Completion: fix after ffe3702fc 71/18171/5
Paul Bignier [Thu, 19 May 2016 14:35:40 +0000 (16:35 +0200)]
 * Removed use of S_ISDIR macros because it is not applicable in sub-directoriess, we only get the sub-dir's name and it's not a dir in the current one.

Change-Id: I9e12d9ec35e498279564687a3b0cfd86735835ca

scilab/modules/completion/src/java/org/scilab/modules/completion/AbstractSciCompletionWindow.java
scilab/modules/console/src/c/cmdLine/autoCompletionCli.c
scilab/modules/console/src/c/windows/TermCompletion.c
scilab/modules/console/src/java/org/scilab/modules/console/SciCompletionManager.java

index bcfdaaa..b732839 100644 (file)
@@ -88,6 +88,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * @param component the component to focus
      * @see com.artenum.rosetta.interfaces.ui.CompletionWindow#setFocusOut(javax.swing.JComponent)
      */
+    @Override
     public void setFocusOut(JComponent component) {
         focusOutComponent = component;
     }
@@ -97,6 +98,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * @param inputParsingManager the input parsing manager to set
      * @see com.artenum.rosetta.interfaces.ui.CompletionWindow#setInputParsingManager(com.artenum.rosetta.interfaces.core.InputParsingManager)
      */
+    @Override
     public void setInputParsingManager(InputParsingManager inputParsingManager) {
         this.inputParsingManager = inputParsingManager;
     }
@@ -107,6 +109,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * Caution, the component shouldn't be null otherwise the completion window
      * will never get the focus
      */
+    @Override
     public void setGraphicalContext(Component component) {
 
         /* List to display all completion items */
@@ -146,6 +149,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * @param location position of the top left corner of the window
      * @see com.artenum.rosetta.interfaces.ui.CompletionWindow#show(java.util.List, java.awt.Point)
      */
+    @Override
     public abstract void show(List<CompletionItem> list, Point location);
 
     /**
@@ -153,6 +157,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * @return the character string
      * @see com.artenum.rosetta.interfaces.ui.CompletionWindow#getCompletionResult()
      */
+    @Override
     public String getCompletionResult() {
         return ((CompletionItem) listUI.getSelectedValue()).getReturnValue();
     }
@@ -206,6 +211,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
          * @return the corresponding element
          * @see javax.swing.ListModel#getElementAt(int)
          */
+        @Override
         public Object getElementAt(int index) {
             /* Filtering is done by Scilab */
             return data.get(index);
@@ -216,6 +222,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
          * @return the size
          * @see javax.swing.ListModel#getSize()
          */
+        @Override
         public int getSize() {
             /* Filtering is done by Scilab */
             return data.size();
@@ -262,7 +269,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
 
         boolean typeStringIsFile = false;
 
-        if (stringToAddType.equals(Messages.gettext("File or Directory"))) {
+        if (stringToAddType.equals(Messages.gettext("File")) || stringToAddType.equals(Messages.gettext("Directory"))) {
             typeStringIsFile = true;
         }
 
@@ -292,6 +299,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * Management of the key typing for the filtering
      * @param e event
      */
+    @Override
     public void keyPressed(KeyEvent e) {
         if (e.getKeyCode() == KeyEvent.VK_ENTER) {
             /* The user validates an entry in the list */
@@ -355,6 +363,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when a key is released ?
      * @param e event
      */
+    @Override
     public void keyReleased(KeyEvent e) {
     }
 
@@ -362,6 +371,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when a key is typed ?
      * @param e event
      */
+    @Override
     public void keyTyped(KeyEvent e) {
     }
 
@@ -369,6 +379,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when the completion window gets the focus ?
      * @param e event
      */
+    @Override
     public void focusGained(FocusEvent e) {
     }
 
@@ -376,6 +387,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * To support the auto hide when focus is lost
      * @param e event
      */
+    @Override
     public void focusLost(FocusEvent e) {
         setVisible(false);
     }
@@ -384,6 +396,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * To support the completion window resize
      * @param e event
      */
+    @Override
     public void mouseDragged(MouseEvent e) {
         Point origine = window.getLocationOnScreen();
         Point destination = ((Component) e.getSource()).getLocationOnScreen();
@@ -397,6 +410,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when the mouse is moved over the completion window ?
      * @param e event
      */
+    @Override
     public void mouseMoved(MouseEvent e) {
     }
 
@@ -404,6 +418,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when a mouse button is clicked over the completion window ?
      * @param e event
      */
+    @Override
     public void mouseClicked(MouseEvent e) {
         if (model.getSize() > 0) {
             /* Select the list item under the mouse */
@@ -423,6 +438,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when the mouse enters the completion window ?
      * @param e event
      */
+    @Override
     public void mouseEntered(MouseEvent e) {
     }
 
@@ -430,6 +446,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when the mouse exits over the completion window ?
      * @param e event
      */
+    @Override
     public void mouseExited(MouseEvent e) {
     }
 
@@ -437,6 +454,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when a mouse button mouse is pressed over the completion window ?
      * @param e event
      */
+    @Override
     public void mousePressed(MouseEvent e) {
     }
 
@@ -444,6 +462,7 @@ public abstract class AbstractSciCompletionWindow implements CompletionWindow, K
      * What to do when a mouse button mouse is released over the completion window ?
      * @param e event
      */
+    @Override
     public void mouseReleased(MouseEvent e) {
         window.validate();
     }
index 9b5a43f..eef0154 100644 (file)
@@ -18,7 +18,6 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
-#include <sys/stat.h>
 #include "charEncoding.h"
 #include "completion.h"
 #include "autoCompletionCli.h"
@@ -339,22 +338,20 @@ static void separateFilesDirectories(char** dictionary, int size, char*** files,
     *sizeDirectories = 0;
     for (i = 0; i < size; ++i)
     {
-        struct stat statbuf;
-        if (stat(dictionary[i], &statbuf) != 0)
-        {
-            return;
-        }
-        if (S_ISDIR(statbuf.st_mode))
+        // Check that the item is a file or a directory
+        char* word = dictionary[i];
+        int len = (int) strlen(word);
+        if (len && word[len - 1] == '/')
         {
             (*sizeDirectories)++;
             *directories = (char **) REALLOC(*directories, sizeof(char *) * (*sizeDirectories));
-            (*directories)[*sizeDirectories - 1] = strdup(dictionary[i]);
+            (*directories)[*sizeDirectories - 1] = strdup(word);
         }
         else
         {
             (*sizeFiles)++;
             *files = (char **) REALLOC(*files, sizeof(char *) * (*sizeFiles));
-            (*files)[*sizeFiles - 1] = strdup(dictionary[i]);
+            (*files)[*sizeFiles - 1] = strdup(word);
         }
     }
 }
index 0f5b87f..eb48c50 100644 (file)
@@ -16,7 +16,6 @@
 /*--------------------------------------------------------------------------*/
 #include <string.h>
 #include <stdlib.h>
-#include <sys/stat.h>
 #include "TermCompletion.h"
 #include "sci_malloc.h"
 #include "freeArrayOfString.h"
@@ -30,8 +29,6 @@
 #include "os_string.h"
 #include "completeLine.h"
 /*--------------------------------------------------------------------------*/
-#define S_ISDIR(x) (x & _S_IFDIR)
-/*--------------------------------------------------------------------------*/
 static void displayCompletionDictionary(char **dictionary, int sizedictionary, char *namedictionary);
 static char **concatenateStrings(int *sizearrayofstring, char *string1,
                                  char *string2, char *string3,
@@ -134,44 +131,20 @@ static void separateFilesDirectories(char** dictionary, int size, char*** files,
     for (i = 0; i < size; ++i)
     {
         // Check that the item is a file or a directory
-        char* dict = dictionary[i];
-        int isCopy = 0;
-        int len = (int) strlen(dict);
-        if (len && dict[len - 1] == '\\')
-        {
-            isCopy = 1;
-            dict = os_strdup(dict);
-            dict[len - 1] = '\0';
-        }
-
-        struct stat statbuf;
-        if (stat(dict, &statbuf) == -1)
-        {
-            if (isCopy)
-            {
-                free(dict);
-            }
-            return;
-        }
-
-        if (S_ISDIR(statbuf.st_mode))
+        char* word = dictionary[i];
+        int len = (int) strlen(word);
+        if (len && word[len - 1] == '\\')
         {
             (*sizeDirectories)++;
             *directories = (char **) REALLOC(*directories, sizeof(char *) * (*sizeDirectories));
-            (*directories)[*sizeDirectories - 1] = strdup(dictionary[i]);
+            (*directories)[*sizeDirectories - 1] = strdup(word);
         }
         else
         {
             (*sizeFiles)++;
             *files = (char **) REALLOC(*files, sizeof(char *) * (*sizeFiles));
-            (*files)[*sizeFiles - 1] = strdup(dictionary[i]);
-        }
-
-        if (isCopy)
-        {
-            free(dict);
+            (*files)[*sizeFiles - 1] = strdup(word);
         }
-
     }
 }
 /*--------------------------------------------------------------------------*/
index 92af690..9718934 100644 (file)
@@ -17,8 +17,6 @@ package org.scilab.modules.console;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.io.File;
-
 import org.scilab.modules.completion.Completion;
 import org.scilab.modules.localization.Messages;
 
@@ -50,6 +48,7 @@ public class SciCompletionManager implements CompletionManager {
      * @return array list of matching items
      * @see com.artenum.rosetta.interfaces.core.CompletionManager#getCompletionItems()
      */
+    @Override
     public List<CompletionItem> getCompletionItems() {
         int compLevel = inputParsingManager.getCompletionLevel();
 
@@ -104,6 +103,7 @@ public class SciCompletionManager implements CompletionManager {
      * @param inputParsingManager a parsing tool
      * @see com.artenum.rosetta.interfaces.core.CompletionManager#setInputParsingManager(com.artenum.rosetta.interfaces.core.InputParsingManager)
      */
+    @Override
     public void setInputParsingManager(InputParsingManager inputParsingManager) {
         this.inputParsingManager = inputParsingManager;
     }
@@ -113,6 +113,7 @@ public class SciCompletionManager implements CompletionManager {
      * @param  interpretor an interpreting tool
      * @see com.artenum.rosetta.interfaces.core.CompletionManager#setInputParsingManager(com.artenum.rosetta.interfaces.core.InputParsingManager)
      */
+    @Override
     public void setInterpretor(GenericInterpreter interpretor) {
         // No need for Scilab implementation
     }
@@ -137,14 +138,13 @@ public class SciCompletionManager implements CompletionManager {
      * @param directoriesDictionnary output: only the directories
      */
     public void separateFilesDirectories(String[] scilabFilesDictionnary, ArrayList<String> filesDictionnary, ArrayList<String> directoriesDictionnary) {
-        for (int i = 0; i < scilabFilesDictionnary.length; ++i) {
-            File cur = new File(scilabFilesDictionnary[i]);
-            if (cur.isDirectory()) {
-                directoriesDictionnary.add(new String(scilabFilesDictionnary[i]));
+        String fileSep = System.getProperty("file.separator");
+        for (String word : scilabFilesDictionnary) {
+            if (word.endsWith(fileSep)) {
+                directoriesDictionnary.add(new String(word));
             } else {
-                filesDictionnary.add(new String(scilabFilesDictionnary[i]));
+                filesDictionnary.add(new String(word));
             }
         }
     }
-
 }