锐化Eclipse -映射失败-超级引用

本文关键字:引用 映射 Eclipse 锐化 失败 | 更新日期: 2023-09-27 18:19:17

我正在尝试在Eclipse中使用锐化将java项目(完整源代码)转换为c#

我遵循这个博客的指导方针,工作得很好:http://tumblr.com/ZVuYOwDv6mdu(建议使用Lluis Sanchez的编译版本的锐化在源代码控制)

但我得到错误在几个类上扩展ByteArrayInputStream和ByteArrayOutputStream。任何对"super"的属性和方法的引用都会返回"Failed to map"

的例子:

[执行]错误://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))'

我想知道是否有任何简单的解决方案,通过锐化,或者如果我将不得不花时间和重新编写java代码(多个代码文件)来"模仿"引用,而不是使用扩展,然后在最终转换的代码项目中使用MemoryStream编写c#代码?

锐化Eclipse -映射失败-超级引用

我做了一个非常简单的测试,下面的转换确实会失败:

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();
  }
}
总结:锐化不支持在超类中访问字段。但是,支持对超类方法的访问。当超类字段有一个可适用的替换时,可以这样修改Java代码,以便在转换之前使用替代结构。