2012-03-22 5 views
0

в плагин Eclipse, я работаю у меня есть кусок кода, который в основном выглядит следующим образом:IPathVariableManager.validateValue (URI) возвращает нуль

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 

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

+0

Я попытался следующие, но я получаю ту же проблему: значение java.net.URI = новый java.io.File (путь). Touri(); (и я пропустил вызов path.replace(), просто передав конструктору файла путь в его исходном виде «C: \\ temp» –

ответ

0

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

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

URI uri = new File("C:\\temp").toURI(); 
pathManager.setURIValue(theName, uri); 
Смежные вопросы