Sharpen Eclipse - Не удалось нанести на карту - супер ссылка

Я пытаюсь использовать Sharpen в Eclipse для преобразования проекта Java (полный исходный код) в C#

Я следовал рекомендациям этого блога, которые работали довольно хорошо: http://tumblr.com/ZVuYOwDv6mdu (которые предлагают использовать скомпилированную версию Sharpen Луиса Санчеса для контроля над источниками)

Но я получаю ошибки в нескольких классах, которые распространяются на ByteArrayInputStream и ByteArrayOutputStream. Любая ссылка на свойство и метод "super" возвращается с "Failed to map"

Пример:

[exec] ОШИБКА: /sharpened/src/com/netnumber/dns/message/DnsOutputStream.java:176: не удалось сопоставить: 'this.nameTable.put(name,new Integer(super.count))' [exec] java.lang.IllegalArgumentException: /sharpened/src/com/netnumber/dns/message/DnsOutputStream.java:176: не удалось сопоставить: 'this.nameTable.put (имя, новое целое число (super.count))'

Я задавался вопросом, есть ли какое-нибудь простое решение для этого через Sharpen или мне нужно было бы потратить время и переписать Java-код (несколько файлов кода), чтобы "имитировать" ссылки и не использовать extends, а затем написать код C# с помощью MemoryStream в окончательном проекте преобразованного кода?

1 ответ

Решение

Я сделал очень простой тест, и следующее преобразование действительно потерпит неудачу:

public class DnsOutputStream extends ByteArrayOutputStream {
  public int count() {
    return super.count;
  }
}

Конкретное сообщение об ошибке указывает, что доступ к полю в суперклассе не поддерживается:

 [exec] Caused by: java.lang.IllegalArgumentException: /sharpened/src/DnsOutputStream.java:16: super.count
 [exec]     at sharpen.core.CSharpBuilder.notImplemented(CSharpBuilder.java:243)
 [exec]     at sharpen.core.CSharpBuilder.visit(CSharpBuilder.java:227)
 [exec]     at org.eclipse.jdt.core.dom.SuperFieldAccess.accept0(SuperFieldAccess.java:165)
 [exec]     at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2514)
 [exec]     at sharpen.core.CSharpBuilder.mapExpression(CSharpBuilder.java:3343)

С другой стороны, если я заменю super.count с super.size() код Java успешно преобразован в этот код C#:

public class DnsOutputStream : ByteArrayOutputStream {
  public virtual int Count()
  {
    return base.Size();
  }
}

В итоге: Sharpen не поддерживает доступ к полям в суперклассе. Однако доступ к методам суперкласса поддерживается. Когда есть подходящая замена для поля суперкласса, код Java, таким образом, может быть изменен для использования альтернативных конструкций перед преобразованием.

Другие вопросы по тегам