2017-09-11 2 views
0

J'utilise Kotlin avec Dagger 2. Le problème est, quand je fais une erreur lors de l'implémentation de Dagger (par exemple, miss @Inject pour la classe constractor), IDE doesnt montrer spécifiquement où erreur est. erreur du compilateur INSEAD est toujours le même:Avec le plugin 'kotlin-kapt', Android Studio ne fournit pas d'erreurs spécifiques sur Dagger 2

Execution failed for task ':app:kaptDebugKotlin'. Internal compiler error. See log for more details

classe avec une erreur délibérée (a commenté @Inject):

class LoginPresenter //@Inject 
constructor(private val request: LoginRequest) 

Projet fichier build.gradle:

buildscript { 
    ext.kotlin_version = '1.1.4-3' 

    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.3.3' 
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

Module de construction.gradle:

apply plugin: 'com.android.application' 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-kapt' 

android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.1" 
    defaultConfig { 
     applicationId "com.example.kravets_a.kotlinanddagger" 
     minSdkVersion 16 
     targetSdkVersion 26 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    ... 

    compile 'com.google.dagger:dagger:2.10' 
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10' 
    kapt "com.google.dagger:dagger-compiler:2.10" 

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 
} 
repositories { 
    mavenCentral() 
} 
+1

Vous pouvez trouver l'erreur dans le journal gradle. Dans Android Studio, en bas à droite, cliquez sur 'Console Gradle'. Là, il montrera les erreurs. –

+0

@ La réponse de DavidMedenjak est, apparemment, le meilleur pour l'instant. Il semble qu'AndroidStudio ne gère pas encore les erreurs 'kapt'. Croiser les doigts. –

Répondre

3

Option 1

utilisation apply plugin: 'kotlin-kapt'. Et quand une erreur se produit, vous pouvez le voir dans Android Studio => en bas à droite => à Gradle Console.

Merci à David Medenjak commentaire.

Option 2

Substitute apply plugin: 'kotlin-kapt' avec kapt { generateStubs = true }

compilation échoue avec le résultat attendu:

[com.example.kravets_a.kotlinanddagger.logic.MainActivityComponent.inject (com. exemple.kotlinanddagger.MainActivity)] com.example.kotlinanddagger.logic.LoginPresenter ne peut pas être fourni sans un constructeur @Inject ou à partir d'un @ Provides- ou @ Méthode Produces-annotée.

Tutoriels this aiment, ou thisthat dit que apply plugin: 'kotlin-kapt' peut être utilisé au lieu de kapt { generateStubs = true }. Mais dans ce cas, Android Studio ne fournit pas d'erreur de compilation spécifique.

0

La solution est d'ajouter à la build.gradle de votre module:

kapt { 
    correctErrorTypes = true 
} 
+0

Je l'ai essayé récemment, conformément à la recommandation officielle sur Kapt, mais il échoue toujours. Par exemple, 'NonExistentClass' est toujours ajouté – takecare