問題タブ [sun-codemodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - com.sun.codemodelでジェネリックを使用する
com.sun.codemodelを使用して、汎用のLinkedListフィールドを生成したいと思います。このコードを使用して生のフィールドを作成できます。
しかし、ジェネリック型の.でLinkedListを作成する方法を見つけることができませんでしたdetailClass
。
java - 右側の singleton.getinstance() 割り当てに CodeModel のヘルプが必要
CodeModel API で必要なものの 99% を生成できましたが、ここで困惑しています...
さまざまな「directXX」メソッドを使用しても、生成されたコードに import ステートメントは追加されません。また、生成されたクラスの 1 か所を除いて、「directXXX」タイプのメソッドがなくても作業できます。
次のような生成されたメソッドが必要だとします。
Mapper 割り当ての右側が括弧内に表示されます。パッケージ+クラス全体を発行することが、右側で「SomeSingleton.someMethod()」を宣言し、生成されたコードをコンパイルする唯一の方法でした。MapperSingleton がオブジェクト モデルに追加されていないと、インポートは生成されません...
質問:
1) インポートを強制的に生成する方法はありますか?
2) オブジェクト モデル内で Mapper 割り当ての右側を与える式を宣言する方法 (MapperSingleton のインポートが生成されるようにするため)。
助けていただければ幸いです...
java - CodeModel のスイッチで Enum 定数を使用する
コード モデル APIを使用してJava ソース ファイルを生成しています。コードモデル API を介して定義された列挙型があり、それをスイッチ ブロックで使用したいと考えています。switch ステートメントでは、enum 定数を非修飾として使用する必要があります。コード モデル API が列挙型クラス名で定数を修飾するため、列挙型定数の修飾されていない名前にアクセスするのに問題があります。
つまり、codemodel API を使用して次のコード フラグメントを生成したいと考えています。
しかし、コードモデルはこのように生成します
あなたの助けに感謝。
java - コードモデルの三項演算子のサポート?
によって生成されたコードで三項演算子を使用することは可能com.sun.codemodel
ですか?
次のステートメントを生成したいと思います。
java - CodeModel で Assert JClass を取得するには?
このorg.junit
パッケージは、Assert
JUnit テスト用のクラスを定義します。JClass
この静的クラスをフレームワークのとして取得するにはどうすればよいCodeModel
ですか?
java - NoClassDefFoundError: アノテーション処理中の org/junit/AfterClass
Mavenでのアノテーション処理中にCodeModelでコードを生成しています。そのコードは JUnit テスト用です。
ただし、コンパイル プロセスは、アノテーション自体であるjava.lang.NoClassDefFoundError : org/junit/AfterClass
を取得しようとすると、 をスローします。AfterClass.class
JUnit への依存関係は次のように定義されます。
私のコードで利用できるAfterClass.class
はずです。
これを解決するにはどうすればよいですか?
不明
codemodel を呼び出すコードは、junit が「テスト」依存関係ではないコンパイル済みライブラリにあります。ただし、生成コードを呼び出すコードには、同じ junit 依存関係がありますが、テスト依存関係があります。
後者の依存関係を「テストではない」依存関係に変更すると、問題はなくなります。コードモデルを呼び出すライブラリのみが明示的に使用しているにもかかわらず、この依存関係を「テストではない」と定義する必要があるのはなぜですか?
編集
依存関係ツリーは次のとおりです。
非常に奇妙な:
org.junit
はい、このライブラリの pom.xml には次のものがあります。
java - CodeModel - 列挙値で注釈を定義する方法は?
Java コード ジェネレーター フレームワークCodeModelは、名前のない列挙値のみを含む注釈を作成できないようです。残念ながら、非常に一般的なパターンです (たとえば、JPA が使用します)。
API ドキュメントには 、「TODO 注釈に列挙型を追加する方法」のみが記載されています。
質問:
この制限を回避する方法はありますか?
jaxb - CodeModel における ClassOutline / JClass / CClass の役割は何ですか?
私の質問は、JAXB プラグイン、特に JAXB コードモデルの作成に関するものです。
ClassOutline
(およびその仲間) とJClass
(および仲間) とCClass
(および仲間)の役割は何ですか? 対応するパッケージ内のクラスのリストを見ると、何がニワトリで何がエッグなのか明確ではありません。
私の解釈では、CClass
( CPropertyInfo
、CEnumConstant
、 ...) は XSD の最初のドラフト解析で XJC によって作成されます。次に、いくつかの魔法が起こり、このモデルがJClass
( JFieldVar
、JEnumConstant
、 ...) に変換され、この変換中にカスタマイズが適用されます。その後、プラグインが呼び出されます。ClassOutline
は、これら 2 つのモデル間のブリッジとして使用されます。全体として非常に複雑に見えます。
これらの並列モデルを使用すると、同じ情報をいくつかの方法で導出できると思います。たとえば、クラス フィールド タイプは次のとおりです。
JClass#fields()
→JFieldVar#type
→JType
CClassInfo#getProperties()
→CPropertyInfo#baseType
→JType
上記のモデルのライフサイクルの詳細な説明を探しています。ありがとう。
java - SunCodeModelジェネリックメソッド
CodeModelを使用して次のジェネリックメソッド宣言を生成する方法を知っている人はいますか?
利用方法:
既存の実装では処理されないようです。
次のようにコードを処理できることはわかっていますが、キャストが必要です。
利用方法:
明らかに、これはキャストのために少し厄介です。