情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

EclipseのGenerate Getters and Setters実行時にthis.が二重に生成されるときの対策メモ

Eclipse (60) Java (37)

Eclipseには、ソースを自動的に生成してくれる機能がいくつかあります。そのうち、GetterとSetterを生成してくれる「Generate Getters and Setters」という機能があります。今回、この機能で生成されるコードが「this.this.」というおかしなコードを出力するようになってしまっていたので、原因や対処法についてメモしておきます。

症状

たとえば、「String name;」と宣言されているクラスで「Generate Getters and Setters」を使うと、次のような「Setter」メソッドが生成されてしまいました。

public void setName(String name) {
	<strong>this.this.</strong>name = name;
}

明らかに「this」が余分であり、「Syntax error on token "this", Identifier expected」というエラーが表示されます。

対処法

この自動生成されるGetterやSetterの形式は、「Window>Preference」の「Java>Code Style>Code Templates」で設定されています。たとえばSetterは、「Configure generated code and comments」の「Code>Setter body」でどのようなコードを生成するかが指定されています

さて、ここでその設定を確認してみると、次のようになっていました。

this.${field} = ${param};

特に問題のあるコードには見えません。しかし、ここで「Restore Defaults※」を実行してみると、設定が次のように変わりました(※初期設定に戻す操作)。

${field} = ${param};

つまり、「this.」の部分が完全に余分であり、「${field}」に「this.」が含まれていた、ということなのです。もう一度Setterを生成してみると、正しく生成されました。

こんな設定になっていた原因は???

なぜこんなおかしな設定が保存されていたのかを考えてみると、心当たりがありました。実は、これを行う直前までEclipse 4.2 Juno利用していたWorkspaceを、Eclipse 3.7.2 Indigo SR2で開いていたのです。

つまり、Juno用に設定ファイルが書き換えられていた可能性があるのです。「${field}」の仕様に変更があったのかもしれません。しかし、実際に確認してみると、Junoであっても、やはり「{$field}」の展開結果に「this.」が含まれていました。。。

うーん、結局謎、ということになってしまいましたが、もし「this.this.」というコードが生成されるようなことがあれば、生成するコードのTemplateを確認してみてください。

コメント(0)

新しいコメントを投稿