Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Eclipse IllegalArgumentException: element is not valid for the containing declared type #206

Closed
jdpatterson opened this issue Jun 7, 2015 · 2 comments

Comments

@jdpatterson
Copy link

Using dagger 2.1-20150601.165141-7

I get the following exception in the Eclipse error log and no DaggerXxxComponent created.

java.lang.IllegalArgumentException: element is not valid for the containing declared type
at org.eclipse.jdt.internal.compiler.apt.model.TypesImpl.asMemberOf(TypesImpl.java:102)
at dagger.internal.codegen.MembersInjectionBinding$Factory.injectionSiteForInjectField(MembersInjectionBinding.java:160)
at dagger.internal.codegen.MembersInjectionBinding$Factory.access$200(MembersInjectionBinding.java:126)
at dagger.internal.codegen.MembersInjectionBinding$Factory$1.visitVariableAsField(MembersInjectionBinding.java:208)
at dagger.internal.codegen.MembersInjectionBinding$Factory$1.visitVariableAsField(MembersInjectionBinding.java:197)
at javax.lang.model.util.ElementKindVisitor6.visitVariable(ElementKindVisitor6.java:229)
at org.eclipse.jdt.internal.compiler.apt.model.VariableElementImpl.accept(VariableElementImpl.java:55)
at dagger.internal.codegen.MembersInjectionBinding$Factory.forInjectedType(MembersInjectionBinding.java:195)
at dagger.internal.codegen.InjectBindingRegistry.getOrFindMembersInjectionBinding(InjectBindingRegistry.java:256)
at dagger.internal.codegen.BindingGraph$Factory$RequestResolver.rollUpMembersInjectionBindings(BindingGraph.java:326)
at dagger.internal.codegen.BindingGraph$Factory$RequestResolver.lookUpBindings(BindingGraph.java:318)
at dagger.internal.codegen.BindingGraph$Factory$RequestResolver.resolve(BindingGraph.java:420)
at dagger.internal.codegen.BindingGraph$Factory$RequestResolver.resolve(BindingGraph.java:423)
at dagger.internal.codegen.BindingGraph$Factory$RequestResolver.resolve(BindingGraph.java:423)
at dagger.internal.codegen.BindingGraph$Factory$RequestResolver.resolve(BindingGraph.java:423)
at dagger.internal.codegen.BindingGraph$Factory.create(BindingGraph.java:180)
at dagger.internal.codegen.BindingGraph$Factory.create(BindingGraph.java:103)
at dagger.internal.codegen.ComponentProcessingStep.processComponents(ComponentProcessingStep.java:147)
at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:90)
at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:228)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:139)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:121)
at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:818)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:367)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:179)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:304)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:61)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:256)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:175)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

eclipse.buildId=4.4.2.M20150204-1700
java.version=1.8.0_05
java.vendor=Oracle Corporation
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments: -product org.eclipse.epp.package.java.product -keyring /Users/xxx/.eclipse_keyring -showlocation
Command-line arguments: -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.java.product -keyring /Users/xxx/.eclipse_keyring -showlocation

The problem is caused by an @Inject field in a generic base class. Here is my setup:

@Singleton
@Component(modules = HandlerModule.class)
public interface JoinMeComponent {
  Set<Handler> handlers();
}

@Module
@Singleton
public class HandlerModule {
  @Provides(type = Type.SET)
  Handler provideIdentifyHandler(IdentifyHandler handler) {
    return handler;
  }
}

public class IdentifyHandler extends CommandHandler<Identify, Void> {
  @Inject
  public IdentifyHandler() {
  }
}

public abstract class CommandHandler<C extends Command<R>, R> implements Handler {
  @Inject Codec codec;
}

When I remove the @Inject annotation from Codec, everything compiles fine.

@tbroyer
Copy link

tbroyer commented Jun 7, 2015

That really looks like an ECJ/JDT bug: it considers that CommandHandler<Identify, Void> (the superclass of IdentifyHandler) and CommandHandler<C, R> (the enclosing type of the field) are “not equal” inside the implementation of asMemberOf. I wonder in which conditions asMemberOf would work other than passing the enclosing type as the declaringType argument (in which case the call to asMemberOf is useless); I also don't see where in the ECJ/JDT code of asMemberOf are the type parameters resolved against the type arguments of the declaringType.

@netdpb
Copy link
Member

netdpb commented Dec 8, 2015

This is https://bugs.eclipse.org/bugs/show_bug.cgi?id=382590. I'm closing this issue here, since there's nothing for us to do, and since it's not a problem in javac.

@netdpb netdpb closed this as completed Dec 8, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants