スポンサーリンク
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を確認してみてください。
スポンサーリンク
スポンサーリンク