Giter VIP home page Giter VIP logo

google-gin's People

Contributors

aragos avatar dburrows0 avatar gkdn avatar

Watchers

 avatar  avatar

google-gin's Issues

Allow private constructors/methods

Although injection into private fields is already implemented, we do not
currently allow (or successfully execute) injection into private methods or
constructors.  The fix for methods is probably quite trivial (using the
same basic principle as field injection), constructors will have to be
investigated. 


Original issue reported on code.google.com by aragos on 23 Dec 2008 at 7:46

No message appears in ambiguous cases

My Module provides values of same type:

public class MyModule extends AbstractGinModule {

    @Provides @Apple
    public Label getApple() {
        return new Label("apple");
    }

    @Provides @Lemon
    public Label getLemon() {
        return new Label("lemon");
    }
}

If I use injector with no annotation, GIN not say me about any warning signs:

@GinModules(MyModule.class)
public interface MyGinjector extends Ginjector {
    Label getLabel();
}

Is it wishful behaviour ?

Original issue reported on code.google.com by [email protected] on 14 May 2009 at 1:36

Add support for provider methods

Gin should support provider methods. This would mean that the GinModule
would have to be instantiated and some of its methods actually called at
runtime. (We'd need to be careful to ensure that configure() still compiles
out completely.)

This may require changes in the Guice SPI to be done cleanly.

Original issue reported on code.google.com by [email protected] on 28 Dec 2008 at 12:56

Maven repository distribution

Please distribute this great library in a maven repository.

See also:
http://groups.google.com/group/google-gin/browse_thread/thread/211fa264a1b42b3a/
470f2b4c9b533ea2?lnk=gst&q=maven#470f2b4c9b533ea2

Original issue reported on code.google.com by [email protected] on 12 Jun 2009 at 4:23

Easier JSNI with GIN

I just had the following (very rough) idea.

BEFORE
======
Java:
public class JSNIExample {
  void instanceFoo(String s) {
    // use s
  }
}

JSNI:
// Call instance method instanceFoo()
[email protected]::instanceFoo(Ljava/lang/String;)(s);

AFTER
=====
Java:
public class JSNIExample {
  // Use @Named to distinguish overloads
  @Named("instanceFooWithMyName")
  void instanceFoo(String s) {
    // use s
  }
}

$(this).named("instanceFooWithMyName").(s);

We could basically rewrite JSNI at compile time, based on annotations in
the Java code. Maybe we can use some kind of matcher system much like Guice
AOP does. 

Setting this to low priority... I'd implement AOP first.

Original issue reported on code.google.com by [email protected] on 5 Oct 2008 at 1:39

Allow constants in Ginjector

Although we support Guice constant bindings (i.e. bindConstant()) in
general, Gin currently does not allow the definition of constant-returning
methods in a Ginjector, for example:

interface MyGinjector extends Ginjector { 
  @Named("foo") int getFoo();
}

This is not terribly important but should probably be enabled eventually.


Original issue reported on code.google.com by aragos on 29 Dec 2008 at 6:46

use GWTTestSuite for GWTTestCases

What steps will reproduce the problem?
1. Run ant.
2. Have many hidden hosted modes created.
3. Have the build take 3 minutes, 21 seconds on new MacBook Pro.

What is the expected output? What do you see instead?
A common technique is to put all GWTTestCases into a single (or a couple large) 
GWTTestSuites 
so only one hidden hosted mode needs to be launched to run a number of 
GWTTestCases.

What version of the product are you using? On what operating system?
r74 on Mac OS X.

Please provide any additional information below.
I'll try to see if I can provide a patch, but I'll need to set up Eclipse to 
follow the style rules so I 
can contribute.


Original issue reported on code.google.com by [email protected] on 7 Jan 2009 at 9:15

[ERROR] No @Inject or default constructor found for classes that have default constructor

What steps will reproduce the problem?
1. Try to bind a class that has two constructors, one of them a default 
constructor. Example:

public class ViewImpl implements View {

       private String hello;

       public ViewImpl() {

       }

       public ViewImpl(String hello) {
               this.hello = hello;
       }

       public void sayHello() {
               GWT.log("Hello from view with constructor." + hello, null);
       }
}

2. Fails to start with the following error: [ERROR] No @Inject or default 
constructor found

What is the expected output? What do you see instead?
It should just use the no argument constructor.

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

Please provide any additional information below.

As noted here: http://groups.google.com/group/google-
gin/browse_thread/thread/98698d20502a5c31, after the Guice documentation was 
updated, 
this is not the default behavior.

Original issue reported on code.google.com by [email protected] on 3 Feb 2009 at 1:41

java.lang.UnsupportedClassVersionError: Bad version number in .class file

What steps will reproduce the problem?
1. download&build gin.jar with gwt1.6.4
2. add the lib gin.jar to the eclipse-build-path
2. adding the <inherits name="com.google.gwt.inject.Inject"/>


What is the expected output? What do you see instead?
Should deploy&run without errors, but gives a [ERROR] Line 20: Unexpected 
exception while 
processing element 'inherits'
java.lang.UnsupportedClassVersionError: Bad version number in .class file


What version of the product are you using? On what operating system?
gwt1.6.4 with the eclipse-plugin on a Mac with several jdks - default is 
1.6.0_13


Is gin supposed to work with gwt1.6.4? Are there any special recommendations on 
building gin 
(eg. a jdk1.5 needed??) I haven't yet used any of the gin-classes, just trying 
to inherit the 
module.




Original issue reported on code.google.com by [email protected] on 23 Jun 2009 at 8:52

disallow @inject on provider methods

What steps will reproduce the problem?
1. Using @Inject on a provider method.

What is the expected output? What do you see instead?
Injection is automatic in provider methods but this is not documented well.
Adding @Inject causes loops that are not visible to the developer because
they are hidden in generated code.

What version of the product are you using? On what operating system?
I'm using gin with adplanner. As far as I know our version is current.

It should be an error (in Guice, not only Gin) to annotate provider methods
with @Inject. Module objects should be created with "new" instead of trying
to inject them in Gin.

Original issue reported on code.google.com by [email protected] on 18 Mar 2009 at 8:32

GinModule's configure() gets called twice

What steps will reproduce the problem?
(code/error message taken from shybyte's mailinglist post "GinTutorial
doesn't work for me"):
public interface Localization
{
    public String MSG_HELLO_WORLD();

}

public class LocalizationImpl implements Localization
{

    @Override
    public String MSG_HELLO_WORLD()
    {
        return "Hello World!";
    }

}

public class ClientGinModule extends AbstractGinModule
{
    @Override
    protected void configure()
    {
        bind(Localization.class).to(LocalizationImpl.class);
    }

}

@GinModules(ClientGinModule.class)
public interface LocalizationGinjector extends Ginjector
{
    Localization getLocalization();

} 

What is the expected output? What do you see instead?
Expected: don't knwo, never seen it ;)
What i got: 
In hosted mode I got:

[ERROR] Errors from Guice: Guice creation errors:

1) A binding to prototype.gin.client.Localization was already
configured at com.google.gwt.inject.rebind.LieToGuiceModule
$ImplicitBindingModule.configure(LieToGuiceModule.java:70).
  at prototype.gin.client.ClientGinModule.configure
(ClientGinModule.java:21)

1 error
com.google.inject.CreationException: Guice creation errors:

1) A binding to prototype.gin.client.Localization was already
configured at com.google.gwt.inject.rebind.LieToGuiceModule
$ImplicitBindingModule.configure(LieToGuiceModule.java:70).
  at prototype.gin.client.ClientGinModule.configure
(ClientGinModule.java:21)

1 error
        at
com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist
(Errors.java:342)
        at com.google.inject.InjectorBuilder.initializeStatically
(InjectorBuilder.java:152)
        at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:105)
        at com.google.inject.Guice.createInjector(Guice.java:92)
        at
com.google.gwt.inject.rebind.BindingsProcessor.validateModulesUsingGuice
(BindingsProcessor.java:309)
        at com.google.gwt.inject.rebind.BindingsProcessor.process
(BindingsProcessor.java:180)
        at com.google.gwt.inject.rebind.GinjectorGeneratorImpl.generate
(GinjectorGeneratorImpl.java:76)
        at com.google.gwt.inject.rebind.GinjectorGenerator.generate
(GinjectorGenerator.java:47)
        at com.google.gwt.dev.cfg.RuleGenerateWith.realize
(RuleGenerateWith.java:49)
        at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.tryRebind
(StandardRebindOracle.java:113)
        at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind
(StandardRebindOracle.java:62)
        at com.google.gwt.dev.shell.StandardRebindOracle.rebind
(StandardRebindOracle.java:172)
        at com.google.gwt.dev.shell.ShellModuleSpaceHost.rebind
(ShellModuleSpaceHost.java:114)
        at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:474)
        at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate
(ModuleSpace.java:365)
        at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:
39)
        at com.google.gwt.core.client.GWT.create(GWT.java:91)
        at prototype.gin.client.GinPrototype.<init>(GinPrototype.java:32)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
        at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate
(ModuleSpace.java:373)
        at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:318)
        at com.google.gwt.dev.shell.BrowserWidget.attachModuleSpace
(BrowserWidget.java:343)
        at com.google.gwt.dev.shell.moz.BrowserWidgetMoz.access$100
(BrowserWidgetMoz.java:35)
        at com.google.gwt.dev.shell.moz.BrowserWidgetMoz
$ExternalObjectImpl.gwtOnLoad(BrowserWidgetMoz.java:58)
        at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native
Method)
        at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:
1428)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2840)
        at com.google.gwt.dev.SwtHostedModeBase.processEvents
(SwtHostedModeBase.java:235)
        at com.google.gwt.dev.HostedModeBase.pumpEventLoop
(HostedModeBase.java:558)
        at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:405)
        at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)

When compiling to javascript I got:

Compiling module prototype.gin.GinPrototype
   Refreshing module from source
      Refreshing TypeOracle
         Processing types in compilation unit: file:/home/marco/
workspace/GinPrototype/src/prototype/gin/client/
LocalizationGinjector.java
            Found type 'LocalizationGinjector'
               Resolving annotation '@GinModules
(ClientGinModule.class)'
                  [ERROR]
java.lang.ClassNotFoundException: prototype.gin.client.ClientGinModule
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at com.google.gwt.dev.javac.TypeOracleMediator.getClassLiteral
(TypeOracleMediator.java:763)
        at
com.google.gwt.dev.javac.TypeOracleMediator.getAnnotationElementValue
(TypeOracleMediator.java:674)
        at
com.google.gwt.dev.javac.TypeOracleMediator.createAnnotationInstance
(TypeOracleMediator.java:442)
        at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotation
(TypeOracleMediator.java:836)
        at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotations
(TypeOracleMediator.java:857)
        at com.google.gwt.dev.javac.TypeOracleMediator.resolveTypeDeclaration
(TypeOracleMediator.java:1384)
        at com.google.gwt.dev.javac.TypeOracleMediator.addNewUnits
(TypeOracleMediator.java:389)
        at com.google.gwt.dev.javac.TypeOracleMediator.refresh
(TypeOracleMediator.java:417)
        at com.google.gwt.dev.javac.CompilationState.refresh
(CompilationState.java:179)
        at com.google.gwt.dev.javac.CompilationState.<init>
(CompilationState.java:93)
        at com.google.gwt.dev.cfg.ModuleDef.getCompilationState
(ModuleDef.java:264)
        at com.google.gwt.dev.Precompile.precompile(Precompile.java:283)
        at com.google.gwt.dev.Compiler.run(Compiler.java:170)
        at com.google.gwt.dev.Compiler$1.run(Compiler.java:124)
        at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:
84)
        at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger
(CompileTaskRunner.java:78)
        at com.google.gwt.dev.Compiler.main(Compiler.java:131)
[ERROR] Unexpected
java.lang.NullPointerException
        at
com.google.gwt.dev.javac.TypeOracleMediator.getAnnotationElementValue
(TypeOracleMediator.java:704)
        at
com.google.gwt.dev.javac.TypeOracleMediator.createAnnotationInstance
(TypeOracleMediator.java:442)
        at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotation
(TypeOracleMediator.java:836)
        at com.google.gwt.dev.javac.TypeOracleMediator.resolveAnnotations
(TypeOracleMediator.java:857)
        at com.google.gwt.dev.javac.TypeOracleMediator.resolveTypeDeclaration
(TypeOracleMediator.java:1384)
        at com.google.gwt.dev.javac.TypeOracleMediator.addNewUnits
(TypeOracleMediator.java:389)
        at com.google.gwt.dev.javac.TypeOracleMediator.refresh
(TypeOracleMediator.java:417)
        at com.google.gwt.dev.javac.CompilationState.refresh
(CompilationState.java:179)
        at com.google.gwt.dev.javac.CompilationState.<init>
(CompilationState.java:93)
        at com.google.gwt.dev.cfg.ModuleDef.getCompilationState
(ModuleDef.java:264)
        at com.google.gwt.dev.Precompile.precompile(Precompile.java:283)
        at com.google.gwt.dev.Compiler.run(Compiler.java:170)
        at com.google.gwt.dev.Compiler$1.run(Compiler.java:124)
        at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:
84)
        at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger
(CompileTaskRunner.java:78)
        at com.google.gwt.dev.Compiler.main(Compiler.java:131) 

What version of the product are you using? On what operating system?
Guice Version: svn r937
Gin Version: svn r95
GWT Version: 1.6.4
Plaform: Linux 32 Bit (Ubuntu 9.04)

Please provide any additional information below.
I worked around that issue by adding a check to the implementation of
GinModule.
I'll take shybyte's code as an example:

public class ClientGinModule extends AbstractGinModule
{
    private static boolean configured = false;

    @Override
    protected void configure()
    {
        if(!configured) {
            bind(Localization.class).to(LocalizationImpl.class);
            configured = true;
        }
    }

} 

That fixed the duplicate binding errors, but on the other hand made GIN
completly ignore every binding i defined, meaning that  Localization would
not be bound to LocalizationImpl although configure() gets called for sure.


Original issue reported on code.google.com by [email protected] on 5 May 2009 at 9:27

bind().in() + bind().to() gives incorrect "double bound" error

This should work in a GinModule:

    // It is legal to have the bind().in() separate from the bind().to()
    bind(MyProvided.class).in(Singleton.class);
    bind(MyProvided.class).toProvider(MyProvidedProvider.class);

But it does not:
      [ERROR] Double-bound:
Key[type=com.google.gwt.inject.client.MyProvided, annotation=[none]].
com.google.gwt.inject.rebind.binding.CallGwtDotCreateBinding@788896,
com.google.gwt.inject.rebind.binding.BindProviderBinding@714e09

Jesse says that we need to replace the original untargetted binding with
the right one when we see it later. I think the right fix will be for Gin
to stop detecting double bindings altogether because Guice's TOOL-mode
check will catch them (with a better error message anyhow).

Original issue reported on code.google.com by [email protected] on 13 Jan 2009 at 6:01

Add support for assisted inject

Add support for assisted inject. Proposed solution: Add a method "void
asFactory()" (or similar) to GinLinkedBindingBuilder.  A binding would look
like this:

bind(MyFactory.class).asFactory();
// or
bind(MyFactory.class).annotatedWith(MyAnnotation.class).asFactory();

Internally gin would then fill out the factory implementation.
This could also be added back to Guice's EDSL for native assisted inject
support.

Original issue reported on code.google.com by aragos on 23 Dec 2008 at 8:04

  • Blocked on: #68

Enums cannot be bound as constants

Binding an enum as a constant currently results in a compile time error:

public void configure() {
  bindConstant().annotatedWith(MyAnnotation.class).to(MyEnum.Value);
}
[ERROR] Errors in
'file:/home/schmitt/projects/gin2/out/testrun/gen/com/google/gwt/inject/client/b
indings/MyGinjectorImpl.java'
  [ERROR] Line 20:  Rebind result
'com.google.gwt.inject.client.bindings.MyEnum' must be a class

This looks like a bug, we probably check for isClassOrInterface and get a
null, we need to check for enums as well.


Original issue reported on code.google.com by aragos on 30 Dec 2008 at 11:04

GIN allows you to bind the same key twice

What steps will reproduce the problem?
1. Create a gin module that binds 
    bind(Foo.class).in(Singleton.class);
and
    bind(Foo.class).toProvider(FooProvider.class).in(Singleton.class);
2. there is no error or warning.

What is the expected output? What do you see instead?
Guice would error on this case and give you the name of the problem class key.

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

Original issue reported on code.google.com by [email protected] on 29 Oct 2008 at 12:13

enum support is broken

What steps will reproduce the problem?

this compiles OK:

Enum:
enum En {
A, B;
}

in GinModule:
public void configure(binder b) {
  b.bindConstant().annotatedWith(A.class).to(En.A);
  b.bindConstant().annotatedWith(B.class).to(En.B);
}

But this:
enum En {
A() {}, B() {};
}

Would result in exception

Using trunk Gin, Guice 2.0, GWT 1.6.4

Original issue reported on code.google.com by [email protected] on 1 Jul 2009 at 5:22

Support static injection

Should be pretty straightforward to implement - allow static injections.

Original issue reported on code.google.com by aragos on 26 Jan 2009 at 7:51

Stack overflow on circular dependency

What steps will reproduce the problem?
1. Create two classes A and B
2. Bind them in Module as singletones
3. Create an injector with getA() method
4. Use constructor injection on both
5. Invoke the getA() method

What is the expected output? What do you see instead?
I expect that two linked instances of the classes are created. 
But I see stack overflow exception. See attached log file.

What version of the product are you using? On what operating system?
I use latest trunk r108, Windows vista, 
java version "1.6.0_10-beta"
Java(TM) SE Runtime Environment (build 1.6.0_10-beta-b24)
Java HotSpot(TM) Client VM (build 11.0-b12, mixed mode, sharing)

Please provide any additional information below.

Please find test project attached.

Original issue reported on code.google.com by aectann on 8 Jun 2009 at 6:03

Attachments:

GIN does not detect circular dependency in binds

What steps will reproduce the problem?
1. create simple class Foo that injects Bar
2. create simple class Bar that injects Foo
3. set up binds for Foo and Bar in your GinModule
4. call injector.getFoo()
5. get a stack overflow error

What is the expected output? What do you see instead?
I would like it if GIN discovered the circular dependency and inform user
during exception in injection.  Seems like it would be helpful in more
complicated cases and better than running the circuit until overflow.

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

Original issue reported on code.google.com by [email protected] on 29 Oct 2008 at 12:20

small cleanups as per jesse's review of r73

From review:

[google-gin] limpbizkit commented on revision r73.
Details are at http://code.google.com/p/google-gin/source/detail?r=73

Score: Positive


Line-by-line comments:

File: /trunk/src/com/google/gwt/inject/rebind/BindingsProcessor.java (r73)
===============================================================================

Line 420:     if (binding == null) {
-------------------------------------------------------------------------------
really necesssary?

File: /trunk/src/com/google/gwt/inject/rebind/LieToGuiceModule.java (r73)
===============================================================================

Line 34:   private final List<Module> implicitBindings = new
ArrayList<Module>();
-------------------------------------------------------------------------------
kinda awkward variable name, a List&lt;Module&gt; being called 'bindings'
I don't know about the use of the word 'implicit' . . .  could you just
call them GwtCreateBindings? I assume that's the only place they come from...

Line 61:   private class ImplicitBindingModule<T> implements Module,
Provider<T> {
-------------------------------------------------------------------------------
Neato

File:
/trunk/src/com/google/gwt/inject/rebind/binding/CallGwtDotCreateBinding.java 
(r73)
===============================================================================

Line 37:     sb.append("GWT.create(")
-------------------------------------------------------------------------------
neato codegen

File:
/trunk/src/com/google/gwt/inject/rebind/binding/RemoteServiceProxyBinding.java
(r73)
===============================================================================

Line 41:   public RemoteServiceProxyBinding(@InjectionPoint MemberCollector
memberCollector,
-------------------------------------------------------------------------------
hmm. . . . I think we're also using the name InjectionPoint possibly for
something different . . . .

Original issue reported on code.google.com by [email protected] on 9 Jan 2009 at 6:06

Gwt gin does not handle injection of class implementing vistor Vistor that is internal to an enum

What steps will reproduce the problem?
1. create an enum (Foo) with an inner Visitor<T> interface

2. set up a binding from visitor to an implementing class
bind(new TypeLeteral<Foo.Vistor<Bar>>).to(BarVistor.class);



where the BarVistor implements Foo.Vistor<Bar>

3. watch gin blow up with 
      Computing all possible rebind results for SCRUBBED MyInjector'
         Rebinding SCRUBBED MyInjector



            Invoking <generate-with
class='com.google.gwt.inject.rebind.GinjectorGenerator'/>
               [ERROR] Generator
'com.google.gwt.inject.rebind.GinjectorGenerator' threw threw an exception



while rebinding 'SCRUBBED MyInjector'
java.lang.IllegalArgumentException: No owner type for enclosed interface
Foo$Visitor



        at
com.google.inject.internal.base.Preconditions.checkArgument(Preconditions.java:1
11)
        at
com.google.inject.internal.MoreTypes$ParameterizedTypeImpl.<init>(MoreTypes.java
:471)
        at



com.google.inject.util.Types.newParameterizedTypeWithOwner(Types.java:60)
        at com.google.inject.util.Types.newParameterizedType(Types.java:49)
        at
com.google.gwt.inject.rebind.util.KeyUtil.gwtTypeToJavaType(KeyUtil.java:261)



        at com.google.gwt.inject.rebind.util.KeyUtil.getKey(KeyUtil.java:108)
        at com.google.gwt.inject.rebind.util.KeyUtil.getKey(KeyUtil.java:70)
        at
com.google.gwt.inject.rebind.binding.CreatorBinding.addParamTypes(CreatorBinding
.java:108)



        at
com.google.gwt.inject.rebind.binding.CallConstructorBinding.setConstructor(CallC
onstructorBinding.java:45)
        at
com.google.gwt.inject.rebind.BindingsProcessor.createImplicitBindingForClass(Bin
dingsProcessor.java:402)



        at
com.google.gwt.inject.rebind.BindingsProcessor.createImplicitBinding(BindingsPro
cessor.java:384)
        at
com.google.gwt.inject.rebind.BindingsProcessor.createImplicitBindingsForUnresolv
ed(BindingsProcessor.java:187)



        at
com.google.gwt.inject.rebind.BindingsProcessor.process(BindingsProcessor.java:17
9)
        at
com.google.gwt.inject.rebind.GinjectorGeneratorImpl.generate(GinjectorGeneratorI
mpl.java:76)
        at



com.google.gwt.inject.rebind.GinjectorGenerator.generate(GinjectorGenerator.java
:47)
        at
com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:49)
        at
com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.tryRebind(StandardRebindO
racle.java:113)



        at
com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOrac
le.java:62)
        at
com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:1
72)
        at



com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:1
61)
        at
com.google.gwt.dev.Precompile$DistillerRebindPermutationOracle.getAllPossibleReb
indAnswers(Precompile.java:243)
        at



com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.doFindAdditionalTypesUsingRebinds
(WebModeCompilerFrontEnd.java:177)
        at
com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.process(AbstractCompiler.ja
va:151)



        at
com.google.gwt.thirdparty.org.eclipse.jdt.internal.compiler.Compiler.compile(Com
piler.java:444)
        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:121)
        at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompi
ler.java:325)



        at com.google.gwt.dev.Precompile.precompile(Precompile.java:341)
        at com.google.gwt.dev.Precompile.run(Precompile.java:444)
        at com.google.gwt.dev.Precompile$1.run(Precompile.java:291)
        atcom.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:84)
        at
com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.
java:78)
        at com.google.gwt.dev.Precompile.main(Precompile.java:298)


Original issue reported on code.google.com by [email protected] on 1 Apr 2009 at 1:12

Compilation of tests with trunk fails due to lack of JavaFileSource class

Compilation of tests fails with current trunk due to this changes:
http://code.google.com/p/google-web-toolkit/source/detail?r=5166


[javac]
/home/kojot/dev/google/google-gin/test/com/google/gwt/inject/rebind/util/Abstrac
tUtilTester.java:32:
cannot find symbol
    [javac] symbol  : class JavaSourceFile                                

    [javac] location: package com.google.gwt.dev.javac                    

    [javac] import com.google.gwt.dev.javac.JavaSourceFile;

Original issue reported on code.google.com by [email protected] on 17 Jun 2009 at 9:47

bind(TypeLiteral).to(TypeLiteral) not supported

What steps will reproduce the problem?
1. Try to bind a generic concrete implementation to a generic interface.
2. Do this by trying to bind the TypeLiteral concrete generic
implementation to generic interface.
3. binding a TypeLiteral to another TypeLiteral is not supported.

What is the expected output? What do you see instead?
This should be possible.

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

Please provide any additional information below.
Discussed here:
http://groups.google.com/group/google-gin/browse_thread/thread/54813ada541e12a9

Original issue reported on code.google.com by [email protected] on 24 Feb 2009 at 3:05

Implement AOP

It should be a fairly straight-forward project to implement Guice AOP in
Gin. We can write subclasses of intercepted types and wrap matched methods
in our pre/post-processing. The interesting part of this implementation is
likely going to be the inclusion and partial re-write (super-source) of
method interceptors as provided by the aop alliance.

See also
http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Binder.ht
ml#bindInterceptor(com.google.inject.matcher.Matcher,%20com.google.inject.matche
r.Matcher,%20org.aopalliance.intercept.MethodInterceptor...)

Original issue reported on code.google.com by aragos on 26 May 2009 at 2:41

  • Blocked on: #68

Gin unit tests do not compile against GWT trunk

The Gin unit tests work fine against GWT 1.5, but when compiling them
against GWT trunk r4244 I get these compile errors:

    [javac] Compiling 62 source files to
/home/bstoler/src/gin/google-gin/out/test
    [javac]
/home/bstoler/src/gin/google-gin/test/com/google/gwt/inject/rebind/util/Abstract
UtilTester.java:108:
getCompilationState(com.google.gwt.core.ext.TreeLogger) in
com.google.gwt.dev.cfg.ModuleDef cannot be applied to ()
    [javac]         compilationState = userModule.getCompilationState();
    [javac]                                      ^
    [javac]
/home/bstoler/src/gin/google-gin/test/com/google/gwt/inject/rebind/util/Abstract
UtilTester.java:111:
cannot find symbol
    [javac] symbol  : method
addGeneratedCompilationUnit(com.google.gwt.dev.javac.CompilationUnit)
    [javac] location: class com.google.gwt.dev.javac.CompilationState
    [javac]           compilationState.addGeneratedCompilationUnit(unit);
    [javac]                           ^
    [javac]
/home/bstoler/src/gin/google-gin/test/com/google/gwt/inject/rebind/util/Abstract
UtilTester.java:114:
compile(com.google.gwt.core.ext.TreeLogger,java.util.Set<com.google.gwt.dev.java
c.CompilationUnit>)
in com.google.gwt.dev.javac.CompilationState cannot be applied to
(com.google.gwt.dev.util.log.PrintWriterTreeLogger)
    [javac]         compilationState.compile(logger);
    [javac]                         ^
    [javac]
/home/bstoler/src/gin/google-gin/test/com/google/gwt/inject/rebind/util/Abstract
UtilTester.java:134:
com.google.gwt.inject.rebind.util.AbstractUtilTester.MyJavaSourceFile is
not abstract and does not override abstract method isSuperSource() in
com.google.gwt.dev.javac.JavaSourceFile
    [javac]   private static class MyJavaSourceFile extends JavaSourceFile {
    [javac]                  ^
    [javac] 4 errors


Seems like this merge from 1.6 changed APIs we use:
http://code.google.com/p/google-web-toolkit/source/detail?spec=svn4375&r=4032

I am afraid that our tests are depending on internal implementation details
of GWT and thus are bound to break. We may need to reconsider how we do
these tests. r61 changed these tests from using EasyMock to using GWT
internals to create instances of the needed Java AST types.

@aragos: What do you think we can do?

Original issue reported on code.google.com by [email protected] on 2 Jan 2009 at 7:51

Adding (limited) method-injection support

For some situations, in particular when the construction of an object is
not under Gin/developer control, constructor injection is not sufficient. 
An example for this issue are GWT entry points - the Ginjector
implementations would shrink by a good margin if one had to only define the
GWT entry points in here.

The attached patch adds method injection to Gin, providing a way to inject
members in objects even after they have been created.  It closely follows
the Guice pattern for similar cases:

--- Example ---

public class MyInjector {
  ...
  injectMembers(MyEntryPoint entryPoint);
}

public class MyEntryPoint {
  private MyService service;

  public void onModuleLoad() {
    MyInjector injector = GWT.create(MyInjector.class);
    injector.injectMembers(this);
    ...
  }

  @Inject
  public void injectHere(MyService service) [
    this.service = service;
  }
}

--- /Example ---

The patch can be found at http://codereview.appspot.com/5863.

Original issue reported on code.google.com by aragos on 15 Sep 2008 at 2:31

Gin fails to inject types with extended generics

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 [email protected] for that.

Original issue reported on code.google.com by [email protected] on 4 Nov 2008 at 9:23

GWT.create() not called on interfaces in bind()

What steps will reproduce the problem?
1. Create an interface.
2. Create a concrete implementation of said interface that @Inject Constants, 
Messages and/or 
RemoteServices.
3. Bind the concrete implementation to the interface in a AbstractGinModule.

What is the expected output? What do you see instead?
The expected output is GWT.create() being called on the Constants, Messages 
and/or 
RemoteServices. Instead, something like the following error message appears:

[ERROR] Guice creation errors:

1) No implementation for com.test.client.ViewConstants was bound.
 while locating com.test.client.ViewConstants
   for parameter 0 at com.test.client.ViewImpl.<init>(ViewImpl.java:11)
 at com.google.gwt.inject.rebind.adapter.BinderAdapter.bind(BinderAdapter.java:33)


What version of the product are you using? On what operating system?
SVN HEAD (revision 60). Mac OS X Leopard.

Please provide any additional information below.

I've patched a test case to show the error. The patch is attached below.

Original issue reported on code.google.com by [email protected] on 22 Dec 2008 at 7:57

Attachments:

Support @Nullable

This should work:

class Foo {
  @Inject Foo(@Nullable @Named("unbound") String s, @Nullable Unimplemented
unimpl);

  interface Unimplemented {}
}

null should be passed for both constructor parameters.

Actually, the unimplemented interface part may be impossible due to the
GWT.create fallback. But we should support nullable injection when possible.

Original issue reported on code.google.com by [email protected] on 31 May 2009 at 10:55

Generated Ginjector can have duplicated private methods

out/testrun/hosted/gen/com/google/gwt/inject/client/field/FruitGinjectorImpl.jav
a
demonstrates this. For example, it has two methods with this signature:

private native void
com$google$gwt$inject$client$field$Pear_color_fieldInjection_(com.google.gwt.inj
ect.client.field.Pear
injectee, java.lang.String value) 

The reason is that injectMembers and regular creation end up duplicating
the member injection helper methods.

Original issue reported on code.google.com by [email protected] on 29 May 2009 at 1:41

Code bloat with native methods

We currently use native methods to allow access control in Gin but that
seems to break the code optimization in the GWT compiler (it treats native
method bodies as blobs). 

To ultimately solve this problem, we'll have to introduce a better
reflection "light" mechanism in GWT, either through improving native method
analysis or by adding a dedicated syntax. In the meantime, we should at
least inject publicly accessible members in java to allow older versions of
GWT some optimization.

Original issue reported on code.google.com by aragos on 21 Apr 2009 at 2:53

bind(X.class) without to() fails Guice validation if X is not concrete

Unit test (and fix) to follow.

Essentially, if MyMessages is an interface that will be instantiated via
GWT.create:

    bind(MyMessages.class).asEagerSingleton();

leads to:

1) No implementation for com.google.gwt.inject.client.MyMessages was bound.
  at
com.google.gwt.inject.client.scopedimplicit.ScopedImplicitModule.configure(Scope
dImplicitModule.java:25)

Original issue reported on code.google.com by [email protected] on 9 Jan 2009 at 3:04

Feature: Field injection

I implemented field injection for Gin, to reach feature parity with Guice
and because it is fun. :)  Field injection enables any field in a
guice-controlled class to be annotated with @Inject, the Ginjector will
then take care of adding values for those fields.

This change is included in patch http://codereview.appspot.com/7735

Original issue reported on code.google.com by aragos on 4 Nov 2008 at 5:34

Support @Inject(optional)

We currently do not check for optional injection.  Need to add that.

Original issue reported on code.google.com by aragos on 1 Mar 2009 at 6:42

Build does not work when parent directories have spaces (Windows XP)

After checking out GIN, to my eclipse workspace, I run the build.xml script
and get the output in the attached file. The path to the project has spaces
in it and it appears that it is being incorrectly tokenized.

The build works fine when I move it to a different location (without
spaces). I am using Windows XP, Eclipse 3.4 and GWT 1.7.

Original issue reported on code.google.com by [email protected] on 22 Jul 2009 at 4:11

Attachments:

Gin without strings

Follow up on discussion here:
http://groups.google.com/group/google-gin/browse_thread/thread/a182319d8b17c73c

Basically, we could get rid of @Modules("...") by mirroring some Guice
interfaces to corresponding types like GModule, GProvider and so on. For
the generator, or to reuse client code on the backend, we can write
adapters for those classes.

Proof of concept attached in the patch.

Wins:
- Gradually move towards the Guice API without having to include methods
that don't work.
- No more string identifier to specify modules. I know it gets validated at
GWT compile time, but GWT compile time is usually not IDE compile time.
- No more awkward "rebind" package to put the Module in. Having these
different worlds separated by convention feels ugly.
- 100% client to server compatibility using the module adapter.
- Ability to extend the Guice DSL to address GWT specific needs, e.g.
intercepting private methods/interfaces
- Documents the fact (GModule API name) that the module could behave
differently depending on where you use it. For example a class might work
with GWT.create but not on the backend.

Losses:
- Code shared by client and server needs to be in a GModule.
- G's: GModule, GProvider.

Let's discuss.

Original issue reported on code.google.com by [email protected] on 12 Sep 2008 at 12:43

Attachments:

Inject the Ginjector

For Guice-compatibility (and because I think there are a few cases where
it's actually useful), let's make it possible to inject the ginjector
itself, by creating a binding to its interface.

Original issue reported on code.google.com by aragos on 10 Feb 2009 at 1:43

build.xml in trunk is broken

I noticed that the build.xml in the trunk is incomplete. It is missing the
top <project> tag, a mapping to the env property and a fix to build on the
Mac. I attached my changes to the build file to address these issues.

Original issue reported on code.google.com by [email protected] on 11 Sep 2008 at 10:01

Attachments:

non-public classes fail weirdly

Trying to inject an instance of a non-public class fails weirdly. Would be
nice to support this as well as Guice does. Regardless, if it fails, it
should fail with useful error messages.

Original issue reported on code.google.com by [email protected] on 28 Aug 2008 at 11:43

Classes bound 'asEagerSingleton()' are injected as null.

What steps will reproduce the problem?
1. Create a valid concrete instance class (MyClass)
2. bind( MyClass.class ).asEagerSingleton();
3. @Inject public MyConstuctor( MyClass myClass )

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

I would expect that MyClass is initialised ASAP and that MyConstructor will
receive that one-and-only instance in its constructor.

Instead, while the class does seem to be initialised correctly, the inject
is always null. This is also the case if you then bind MyInterface to
MyClass and inject that. Eg:

bind( MyClass.class ).asEagerSingleton();
bind( MyInterface.class ).to( MyClass.class );

The same result if you then inject MyInterface instead. My guess is that
the lookup for MyClass is returning null for some reason...

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

Latest from trunk, on Mac OS X 10.5.7 running Java 6 (1.6.0_13).

Original issue reported on code.google.com by [email protected] on 25 Jun 2009 at 3:56

GIN uses private constructor even if not annotated with @Inject

What steps will reproduce the problem?
1. inject a class that has an unannotated no-args private constructor and a
public constructor with some arguments (which can not be injected)
2. don't create a binding for that class
3. compile

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

I expect a compile-time error.
Instead GIN happily uses the private no-args constructor and creates an
invalid object.

Original issue reported on code.google.com by [email protected] on 6 Mar 2009 at 7:33

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.