Sharpen Eclipse - Не удалось нанести на карту - супер ссылка - PullRequest
1 голос
/ 04 января 2012

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

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

Но я получаю ошибки в нескольких классах, которые распространяются на 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 (name, new Integer (super.count))'

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

1 Ответ

2 голосов
/ 18 июня 2012

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

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, таким образом, может быть изменен для использования альтернативных конструкций перед преобразованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...