google/dagger — pull request #55 by cgruber (2014-10-30 19:10:31+00:00)
Title: Merge changes from inside google, notably scoping validations begin.

First set of scope annotation validations, enforcing the constraint that components may only include bindings that are equivalently scoped, or un-scoped.

Specifically,

```
@Singleton @Component(modules = { ModuleWithPerRequestScopeAnnotation.class })
interface FooComponent {
Foo foo();
}

@Module
interface ModuleWithPerRequestScopeAnnotation {
@Provides @PerRequest Bar bar() { ... }
}

```

will error out with any bindings labelled with the `bar()` provides method listed as offending. Dagger uses scope to label intended lifetimes of graphs/components, so a shorter-lifetime (shorter scope) is a shorter-lived component that perhaps depends on longer-lived component(s). This means that a single component can only have memoized (cached) instances associated with its own lifetime.

Similarly an un-scoped `@Component interface` cannot have any scoped bindings obtained from any of its modules.

Validations of scope annotations between dependent components is not constrained by this change, though that is coming.

This pull also includes some minor cleanup.