fmgasparino / google-gin

Automatically exported from code.google.com/p/google-gin
Apache License 2.0
0 stars 0 forks source link

Gin fails to inject types with extended generics #12

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?

Try binding a type like Map<String, Provider<? extends MyInterface>>.

What is the expected output? What do you see instead?

I expected it to work, however it gives me an error like this:

com.google.inject.ProvisionException: Error creating key for interface
java.util.Map<java.lang.String, com.google.inject.Provider<? extends
com.rdamazio.MyInterface>>
        at com.google.gwt.inject.rebind.KeyUtil.getKey(KeyUtil.java:94)
        at com.google.gwt.inject.rebind.KeyUtil.getKey(KeyUtil.java:54)
        at
com.google.gwt.inject.rebind.binding.CreatorBinding.addParamTypes(CreatorBinding
.java:96)
        at
com.google.gwt.inject.rebind.binding.CallConstructorBinding.setConstructor(CallC
onstructorBinding.java:44)
        at
com.google.gwt.inject.rebind.GinjectorGeneratorImpl.createImplicitBindingForClas
s(GinjectorGeneratorImpl.java:565)
        at
com.google.gwt.inject.rebind.GinjectorGeneratorImpl.createImplicitBinding(Ginjec
torGeneratorImpl.java:539)
        at
com.google.gwt.inject.rebind.GinjectorGeneratorImpl.generate(GinjectorGeneratorI
mpl.java:251)
        at
com.google.gwt.inject.rebind.GinjectorGenerator.generate(GinjectorGenerator.java
:35)
        at
com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:49)
        at
com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.tryRebind(StandardRebindO
racle.java:110)
        at
com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOrac
le.java:62)
        at
com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:1
64)
        at
com.google.gwt.dev.GWTCompiler$DistillerRebindPermutationOracle.getAllPossibleRe
bindAnswers(GWTCompiler.java:165)
        at
com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.doFindAdditionalTypesUsingRebinds
(WebModeCompilerFrontEnd.java:128)
        at
com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.process(AbstractCompiler.ja
va:151)
        at
org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
        at
com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.compile(AbstractCompiler.ja
va:85)
        at
com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.compile(AbstractCompiler.ja
va:181)
        at
com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.access$400(AbstractCompiler
.java:71)
        at
com.google.gwt.dev.jdt.AbstractCompiler.compile(AbstractCompiler.java:473)
        at
com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.getCompilationUnitDeclarations(We
bModeCompilerFrontEnd.java:73)
        at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.<init>(JavaToJavaScriptCompiler.
java:315)
        at com.google.gwt.dev.GWTCompiler.distill(GWTCompiler.java:324)
        at com.google.gwt.dev.GWTCompiler.run(GWTCompiler.java:470)
        at com.google.gwt.dev.GWTCompiler.run(GWTCompiler.java:460)
        at com.google.gwt.dev.GWTCompiler.main(GWTCompiler.java:196)
Caused by: java.lang.ClassNotFoundException: ? extends com.rdamazio.MyInterface
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at com.google.gwt.inject.rebind.KeyUtil.loadClass(KeyUtil.java:166)
        at
com.google.gwt.inject.rebind.KeyUtil.gwtTypeToJavaType(KeyUtil.java:154)
        at
com.google.gwt.inject.rebind.KeyUtil.gwtTypeToJavaType(KeyUtil.java:145)
        at
com.google.gwt.inject.rebind.KeyUtil.gwtTypeToJavaType(KeyUtil.java:145)
        at com.google.gwt.inject.rebind.KeyUtil.getKey(KeyUtil.java:85)
        ... 25 more

apparently it tries to take "? extends com.rdamazio.MyInterface" as a class
name and doesn't find it.

What version of the product are you using? On what operating system?

GWT 1.5 on Linux

Please provide any additional information below.

I can provide an google-internal code sample for reproducing if needed
(just can't post it here) - ping me at rdamazio@google.com for that.

Original issue reported on code.google.com by rdamazio@gmail.com on 4 Nov 2008 at 9:23

GoogleCodeExporter commented 9 years ago
I added a test & fix for this to this pending patch: 
http://codereview.appspot.com/7735

If you want to help with getting this into the repository fast please do a code 
review.

Classes touched by this issue are KeyUtil.java and KeyUtilTest.java

Original comment by aragos on 11 Nov 2008 at 9:46

GoogleCodeExporter commented 9 years ago

Original comment by aragos on 23 Dec 2008 at 7:42