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