IPathVariableManager.validateValue (URI) возвращает ноль - PullRequest
0 голосов
/ 23 марта 2012

в плагине Eclipse, над которым я работаю, у меня есть фрагмент кода, который в основном выглядит следующим образом:

public static void checkProblemV1() {
   try {
      String path = "C:\\temp";
      org.eclipse.core.runtime.IPath value = 
         new org.eclipse.core.runtime.Path(path);
      IPathVariableManager pathManager = 
         ResourcesPlugin.getWorkspace().getPathVariableManager();
      String name = "somename";
      IStatus statusName = pathManager.validateName(name);
      IStatus statusValue = pathManager.validateValue(value);

      if (statusName == null || statusValue == null) {
         System.err.println("checkProblemV1(): statusName is " +
            (statusName == null ? "null" : ("not null: '" + statusName + "'.")));
         System.err.println("checkProblemV1(): statusValue is " +
            (statusValue == null ? "null" : ("not null: '" + statusValue + "'.")));
      }
      else if (statusName.isOK() && statusValue.isOK()) {
         pathManager.setValue(name, value); // setValue is deprecated
         System.out.println("checkProblemV1(): Everything fine");
      }
      else {
         if (!statusName.isOK()) {
            System.err.println("checkProblemV1(): statusName is not OK.");
         }
         if (!statusValue.isOK()) {
            System.err.println("checkProblemV1(): statusValue is not OK.");
         }
      }
   }
   catch (CoreException e) {
      System.err.println("checkProblemV1(): CoreException: " + e.getMessage());
   }
}

Когда вышеуказанный метод выполняется, проблем нет, но я получаю предупреждение об устаревании для setValue () при компиляции. Когда я захотел исправить это предупреждение об устаревании, заменив вызов setValue () на вызов setURIValue (), у меня возникли проблемы. Сначала мне пришлось настроить, как этот путь в стиле Windows был написан, чтобы избежать URISyntaxException, но после этого setURIValue () возвращает значение null, и после просмотра документации я не вижу, что он должен это делать? Я думаю, что URI недействителен в конце концов, но не знаю, как это исправить. Ниже приведен метод тестирования в том же стиле, что и выше, демонстрирующий проблему.

public static void checkProblemV2() {
   try {
      String path = "C:\\temp";
      // Have to replace \ with /, or we get URISyntaxExeption:
      // checkProblemV2(): URISyntaxException: Illegal character in opaque part at index 2: C:\temp
      path = path.replace('\\', '/');
      java.net.URI value = new java.net.URI(path);
      IPathVariableManager pathManager = 
         ResourcesPlugin.getWorkspace().getPathVariableManager();
      String name = "somename";
      IStatus statusName = pathManager.validateName(name);
      IStatus statusValue = pathManager.validateValue(value);

      if (statusName == null || statusValue == null) {
         System.err.println("checkProblemV2(): statusName is " +
            (statusName == null ? "null" : ("not null: '" + statusName + "'.")));
         System.err.println("checkProblemV2(): statusValue is " +
            (statusValue == null ? "null" : ("not null: '" + statusValue + "'.")));
      }
      else if (statusName.isOK() && statusValue.isOK()) {
         pathManager.setURIValue(name, value);
         System.out.println("checkProblemV2(): Everything fine");
      }
      else {
         if (!statusName.isOK()) {
            System.err.println("checkProblemV2(): statusName is not OK.");
         }
         if (!statusValue.isOK()) {
            System.err.println("checkProblemV2(): statusValue is not OK.");
         }
      }
   }
   catch (URISyntaxException e) {
      System.err.println("checkProblemV2(): URISyntaxException: " + e.getMessage());
   }
   catch (CoreException e) {
      System.err.println("checkProblemV2(): CoreException: " + e.getMessage());
   }
}

Когда я запускаю вышеупомянутые два метода, я получаю следующий вывод.

checkProblemV1(): Everything fine
checkProblemV2(): statusName is not null: 'Status OK: unknown code=0 OK null'.
checkProblemV2(): statusValue is null

Спасибо за чтение и за любую помощь, это очень ценится!

1 Ответ

0 голосов
/ 23 марта 2012

В org.eclipse.core.internal.resources.PathVariableManager.validateValue(URI) есть ошибка, когда он использует другие внутренние методы, но возвращает null независимо от того, что еще происходит.Пожалуйста, откройте ошибку с Eclipse Platform / Resources .

. И я согласен с вашим комментарием, вы должны использовать:

URI uri = new File("C:\\temp").toURI();
pathManager.setURIValue(theName, uri);
...