Takuji->find;

株式会社はてなでアプリケーションエンジニアやってます、技術的な記事を書いているつもり

KotlinでJavaの予約語をメソッド名に使うとstubでメソッドが生成されない

ここで言うstubとは、Kotlinのstub生成機能で、Pluggable Annotation ProcessingでKotlinのクラスを処理するために必要になってくるもの。コンパイル時にJavaコンパイル前にKotlinのファイルからJavaソースコードを生成してstubとして利用する。

当たり前といえば当たり前なんだけど、Kotlin側ではメソッドが作れてしまうのでうっかり作ってしまってハマりそう

@Module
object SharedPreferencesModule {
  @Provides @JvmStatic fun default(context: Context) : SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
}

これのstubはこうなる(一部省略)

@dagger.Module()
public final class SharedPreferencesModule {
    public static final com.github.takuji31.di.SharedPreferencesModule INSTANCE = null;
    private SharedPreferencesModule() {
        super();
    }
}

何もない😇

↓のようにするとよい

@Module
object SharedPreferencesModule {
  @Provides @JvmStatic fun defaultSharedPreferences(context: Context) : SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
}

こうなる

@dagger.Module()
public final class SharedPreferencesModule {
    public static final com.github.takuji31.di.SharedPreferencesModule INSTANCE = null;
    
    @org.jetbrains.annotations.NotNull()
    @dagger.Provides()
    public static final android.content.SharedPreferences defaultSharedPreferences(@org.jetbrains.annotations.NotNull()
    android.content.Context context) {
        return null;
    }
    
    private SharedPreferencesModule() {
        super();
    }
}