2012-01-03 3 views
1

を私はC#シャープEclipseは - マップに失敗しました - スーパーリファレンス

にJavaプロジェクト(完全なソース)を変換するために、Eclipseでシャープを使用しようとしている私はかなりよく働いこのブログのガイドラインに従っ:http://tumblr.com/ZVuYOwDv6mdu(これは、Lluis Sanchezのコンパイル済みバージョンのSharpenをソースコントロールよりも使用することを示唆しています)。

しかし、私はByteArrayInputStreamとByteArrayOutputStreamを拡張するいくつかのクラスでエラーが発生しています。返された「スーパー」のプロパティとメソッドへの参照は

例「マップに失敗しました」:

[exec] ERROR: /sharpened/src/com/netnumber/dns/message/DnsOutputStream.java:176: failed to map: 'this.nameTable.put(name,new Integer(super.count))' [exec] java.lang.IllegalArgumentException: /sharpened/src/com/netnumber/dns/message/DnsOutputStream.java:176: failed to map: 'this.nameTable.put(name,new Integer(super.count))'

シャープを介して、または私が持っている場合は、このための任意の簡単な解決策があった場合、私は疑問に思い

参照を擬似するためにJavaコード(複数のコードファイル)を書き直して使用しないで、最後に変換されたコードプロジェクトでMemoryStreamを使用してC#コードを書きますか?

+0

この問題を解決しましたか?そうでない場合は、より詳細なエラーダンプを共有して、エラーが特定されたコードをSharpenのどの場所に正確に表示できますか? –

+0

私はしませんでした。それ以来、この問題を超えて、最後にJavaプロジェクトを使用せずに「手作業で」行ってきました。 – Quintium

+0

Sharpenなしで移植の問題を解決することはできましたが、私はこの問題について独自に調査しました。あなたは私の調査結果が下の回答に関係なく貴重なものになることを願っています。 –

答えて

2

私は非常に簡単なテストをしたし、次の変換は確かに失敗します。

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.countsuper.size()に置き換えた場合、JavaコードはこのC#コードに正常に変換されます。

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

まとめ:Sharpenは、スーパークラスのフィールドへのアクセスをサポートしていません。ただし、スーパークラスメソッドへのアクセスはサポートされています。適用可能なスーパークラスフィールドの置換がある場合、変換前に代替構成を使用するようにJavaコードを変更することができます。

+0

アンデルスに感謝します。私はあなたにそれをもう少し研究する時間を取ってくれた答えにあなたに報います。 – Quintium

関連する問題