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