e: [kapt] An exception occurred: java.util.NoSuchElementException
at com.sun.tools.javac.util.List$2.next(List.java:432)
at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:302)
at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:254)
at dagger.android.processor.AndroidMapKeys.mapKeyValue(AndroidMapKeys.java:75)
at dagger.android.processor.AndroidMapKeys.lambda$annotationsAndFrameworkTypes$5(AndroidMapKeys.java:56)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1321)
Same issue here:
Caused by: java.util.NoSuchElementException
at com.sun.tools.javac.util.List$2.next(List.java:432)
at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:302)
at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:254)
at dagger.android.processor.AndroidMapKeys.mapKeyValue(AndroidMapKeys.java:75)
at dagger.android.processor.AndroidMapKeys.lambda$annotationsAndFrameworkTypes$5(AndroidMapKeys.java:56)
at dagger.android.processor.AndroidMapKeys.annotationsAndFrameworkTypes(AndroidMapKeys.java:56)
at dagger.android.processor.AndroidMapKeyValidator.annotations(AndroidMapKeyValidator.java:65)
at dagger.shaded.auto.common.BasicAnnotationProcessor.getSupportedAnnotationClasses(BasicAnnotationProcessor.java:146)
at dagger.shaded.auto.common.BasicAnnotationProcessor.getSupportedAnnotationTypes(BasicAnnotationProcessor.java:158)
at dagger.shaded.auto.common.BasicAnnotationProcessor.getSupportedAnnotationTypes(BasicAnnotationProcessor.java:103)
at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.getSupportedAnnotationTypes(annotationProcessing.kt)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:505)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1039)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1180)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:55)
... 15 more
I'm seeing kapt in both of those but the stack traces don't line up to what's in (https://github.com/google/dagger/blob/83ca5963986fc85ef9d30c74997eb728d1cde568/java/dagger/android/processor/AndroidMapKeys.java). Either way, that is a suspicious error.
Can you verify that all dependencies on Dagger libraries are at 2.17?
@ronshapiro yes getting same error with kapt, using 2.17 for all artifacts:
implementation "com.google.dagger:dagger:2.17"
implementation "com.google.dagger:dagger-android:2.17"
implementation "com.google.dagger:dagger-android-support:2.17"
kapt "com.google.dagger:dagger-compiler:2.17"
kapt "com.google.dagger:dagger-android-processor:2.17"
To confirm, v2.16 works fine. Only happens when switching to v2.17
It seems to be an (indirect) issue with the Android Gradle Plugin 3.2.0-beta05. The problem occurs even in an empty project, with a single empty Activity, without any Dagger @Component, @Module, ...
It does not occur with Android Gradle Plugin 3.1.4.
build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
...
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "com.google.dagger:dagger:${dagger_version}"
kapt "com.google.dagger:dagger-compiler:${dagger_version}"
implementation "com.google.dagger:dagger-android:${dagger_version}"
implementation "com.google.dagger:dagger-android-support:${dagger_version}"
kapt "com.google.dagger:dagger-android-processor:${dagger_version}"
}
It can also be observed that, with 3.2.0-beta05, the dependency resolution is strange. I can't tell where the 2.16 comes from.
$ gradlew app:dependencies --configuration kapt
kapt
...
\--- com.google.dagger:dagger-android-processor:2.17 -> 2.16
+--- com.google.dagger:dagger:2.16 -> 2.17 (*)
+--- com.google.dagger:dagger-android-jarimpl:2.16
+--- com.google.dagger:dagger-android-support-jarimpl:2.16
...
With 3.1.4, it looks more as expected:
$ gradlew app:dependencies --configuration kapt
kapt
...
\--- com.google.dagger:dagger-android-processor:2.17
+--- com.google.dagger:dagger:2.17 (*)
+--- com.google.dagger:dagger-android-jarimpl:2.17
| +--- com.google.dagger:dagger:2.17 (*)
| +--- com.android.support:support-annotations:25.0.0
| \--- javax.inject:javax.inject:1
+--- com.google.dagger:dagger-android-support-jarimpl:2.17
| +--- com.google.dagger:dagger:2.17 (*)
| +--- com.google.dagger:dagger-android:2.17
| | +--- com.google.dagger:dagger:2.17 (*)
...
Same here: https://github.com/cortinico/myonnaise/pull/3
Here the stacktrace from CircleCI for that PR:
https://circleci.com/gh/cortinico/myonnaise/16
I also hit this crash
@laenger I also had this weird configuration issue where it still resolved 2.16 for some of them. Then I used resolution strategy to force all dagger dependencies to 2.17 which fixed that issue but still didn't fix the original exception.
@tasomaniac resolution strategies didn't work for me for the kapt configuration (it worked for implementation just fine). so I didn't manage to force dagger-android-processor in kapt to 2.17 馃
I have same issue with dagger 2.17 and and gradle plugin 3.3.0-alpha05.
With 2.16 it works fine.
I have same issue with dagger 2.17 and and gradle plugin 3.3.0-alpha06 as well.
With 2.16 it works fine.
./gradlew app:dependencies --configuration kapt
+--- com.google.dagger:dagger-compiler:2.17
| +--- com.google.dagger:dagger:2.17
| | \--- javax.inject:javax.inject:1
| +--- com.google.dagger:dagger-producers:2.17
| | +--- com.google.dagger:dagger:2.17 (*)
| | +--- com.google.guava:guava:25.0-jre
| | | +--- com.google.code.findbugs:jsr305:1.3.9
| | | +--- org.checkerframework:checker-compat-qual:2.0.0 -> 2.3.0
| | | +--- com.google.errorprone:error_prone_annotations:2.1.3
| | | +--- com.google.j2objc:j2objc-annotations:1.1
| | | \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
| | +--- javax.inject:javax.inject:1
| | \--- org.checkerframework:checker-compat-qual:2.3.0
| +--- com.google.dagger:dagger-spi:2.17
| | +--- com.google.dagger:dagger:2.17 (*)
| | +--- com.google.dagger:dagger-producers:2.17 (*)
| | +--- com.google.guava:guava:25.0-jre (*)
| | \--- javax.inject:javax.inject:1
| +--- com.google.googlejavaformat:google-java-format:1.5
| | +--- com.google.guava:guava:22.0 -> 25.0-jre (*)
| | \--- com.google.errorprone:javac-shaded:9-dev-r4023-3
| +--- com.google.guava:guava:25.0-jre (*)
| +--- com.squareup:javapoet:1.11.0
| +--- javax.annotation:jsr250-api:1.0
| \--- javax.inject:javax.inject:1
+--- com.google.dagger:dagger-android-processor:2.17 -> 2.16
| +--- com.google.dagger:dagger:2.16 -> 2.17 (*)
| +--- com.google.dagger:dagger-android-jarimpl:2.16
| +--- com.google.dagger:dagger-android-support-jarimpl:2.16
| +--- com.google.googlejavaformat:google-java-format:1.4 -> 1.5 (*)
| +--- com.google.guava:guava:23.3-jre -> 25.0-jre (*)
| \--- com.squareup:javapoet:1.8.0 -> 1.11.0
\--- com.arello-mobile:moxy-compiler:1.5.5
+--- com.arello-mobile:moxy:1.5.5
\--- com.squareup:javapoet:1.9.0 -> 1.11.0
not sure why i'm getting 2.16 here -> com.google.dagger:dagger :2.16
I'm also running into this issue, specifically when trying to switch to AndroidX dependencies. I've created a minimal repro in tkindy/dagger-androidx-bug (instructions in README).
This error also happens when compiling iosched 18 google sample
Found the reason for the 2.16 version mismatch in the Jetifier sources.
Is this fixed yet?
Any ETA regarding a fix?
I have same issue with dagger 2.17, even using the latest gradle plugin 3.3.0-alpha08 as well.
With 2.16 it works fine. I'm also using androidx and jetifier.
I'm taking a look now. @tkindy that repro doesn't have the specified androidx branch so I can't test it there.
I shared https://github.com/bobthekingofegypt/androidx-dagger-2.17
It should show the error.
Interestingly if you drop dagger to 2.16 it builds fine in Android studio but its actually not building from the command line. But its a different error, missing javax.annotation classes... but I guess that's for another issue.
@ronshapiro sorry, just pushed the androidx branch
I've been using the iosched project and trying to depend on a locally-built bogus copy of Dagger.... and I can't seem to get it working. It will correctly detect when I have a bogus local version and not attempt to compile, but with a local version that actually exists, it seems to still use some other jar. This seems to line up with what @laenger was alluding to - the stack trace corresponds to dagger-android-processor 2.16 line numbers, not 2.17. Perhaps this is an issue in jetifier where it's pinning that version?
I also feel like it is a jetifier bug since it works fine when jetifier is disabled.
If I create a new dagger-android-processor-copy artifact, and depend on that (at 2.17) everything works fine. It looks like jetifier is somehow intercepting and preventing the 2.17 upgrade, but perhaps is downloading the deps for 2.17, which include a different version of Guava. I'm not fully sure what's happening there, but perhaps there's some strange classpath ordering.
I mentioned this line of the Jetifier sources that I found which prevents the 2.17 upgrade. I also briefly tried to change that config file inside the jetifier jar. It had the desired effect (working 2.17 dependencies) but this resulted in a different error. Unfortunately, I'm traveling right now and don't have more details at hand.
Edit: In fact, patching the config files of jetifier-core-1.0.0-alpha10.jar worked fine to get dagger 2.17 working. Any additional issues I ran into were simply those explained in the 2.17 changelog.
You can see this problem fairly clearly in the logs:
21:22:22.150 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of :debug-updater:kapt' started
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger-compiler.jar (com.google.dagger:dagger-compiler:2.17)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger-android-processor.jar (com.google.dagger:dagger-android-processor:2.16)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger-spi.jar (com.google.dagger:dagger-spi:2.17)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger-producers.jar (com.google.dagger:dagger-producers:2.17)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger.jar (com.google.dagger:dagger:2.17)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact google-java-format.jar (com.google.googlejavaformat:google-java-format:1.5)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact guava.jar (com.google.guava:guava:25.0-jre)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact javapoet.jar (com.squareup:javapoet:1.11.0)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact jsr250-api.jar (javax.annotation:jsr250-api:1.0)
21:22:22.150 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact javax.inject.jar (javax.inject:javax.inject:1)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger-android-jarimpl.jar (com.google.dagger:dagger-android-jarimpl:2.16)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact dagger-android-support-jarimpl.jar (com.google.dagger:dagger-android-support-jarimpl:2.16)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact checker-compat-qual.jar (org.checkerframework:checker-compat-qual:2.3.0)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact javac-shaded.jar (com.google.errorprone:javac-shaded:9-dev-r4023-3)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact jsr305.jar (com.google.code.findbugs:jsr305:1.3.9)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact error_prone_annotations.jar (com.google.errorprone:error_prone_annotations:2.3.1)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact j2objc-annotations.jar (com.google.j2objc:j2objc-annotations:1.1)
21:22:22.151 [INFO] [org.gradle.api.internal.artifacts.transform.TransformArtifactOperation] Executing transform JetifyTransform on artifact animal-sniffer-annotations.jar (org.codehaus.mojo:animal-sniffer-annotations:1.14)
Jetifier bug raised: https://issuetracker.google.com/issues/115738511
Thanks @chrisbanes. I'm going to close this in favor of that.
same issue
should we use v2.16 ?
Yes Julien.
V 2.16 works like charm.
Hello @Eipeks
Even with Jetifier enabled Dagger 2.16 is still using
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
what could be the problem, all other 3rd party libraries worked well except Dagger
If you look at the source code you will see that it is still using support library imports. But that is fine. Jettifier will automatically fix it imports during compilation. You should be able to build with 2.16. Can you try building from command line?
Everything works like charm again. I had issues with other xml support widgets that were causing the build to fail before it reaches Dagger. When those issues are fixed, the jetifier worked well and the project compiled. Thanks for the help @tasomaniac
Seems like this error is persisting into 2.18
Still getting this issue in 2.18 version... anyone knows how to resolve this?
@brad007 that is not an Dagger issue!
That will be fixed with jetifier-processor:1.0.0-beta02
The workaround
buildscript {
dependencies {
classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta01'
}
}
from the jetifier issue does not work.
Are there any other options to use Dagger 2.18 now?
For those that are coming to this bug anew, please see the appropriately filed bug on jetifier instead: https://issuetracker.google.com/issues/115738511
Most helpful comment
To confirm, v2.16 works fine. Only happens when switching to v2.17