All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.inject.internal.LinkedBindingImpl Maven / Gradle / Ivy

package com.google.inject.internal;

import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Binder;
import com.google.inject.Key;
import com.google.inject.spi.BindingTargetVisitor;
import com.google.inject.spi.Dependency;
import com.google.inject.spi.HasDependencies;
import com.google.inject.spi.LinkedKeyBinding;

import java.util.Set;

public final class LinkedBindingImpl extends BindingImpl implements LinkedKeyBinding, HasDependencies {

    final Key targetKey;

    public LinkedBindingImpl(InjectorImpl injector, Key key, Object source,
                             InternalFactory internalFactory, Scoping scoping,
                             Key targetKey) {
        super(injector, key, source, internalFactory, scoping);
        this.targetKey = targetKey;
    }

    public LinkedBindingImpl(Object source, Key key, Scoping scoping, Key targetKey) {
        super(source, key, scoping);
        this.targetKey = targetKey;
    }

    public  V acceptTargetVisitor(BindingTargetVisitor visitor) {
        return visitor.visit(this);
    }

    public Key getLinkedKey() {
        return targetKey;
    }

    public Set> getDependencies() {
        return ImmutableSet.>of(Dependency.get(targetKey));
    }

    public BindingImpl withScoping(Scoping scoping) {
        return new LinkedBindingImpl(getSource(), getKey(), scoping, targetKey);
    }

    public BindingImpl withKey(Key key) {
        return new LinkedBindingImpl(getSource(), key, getScoping(), targetKey);
    }

    public void applyTo(Binder binder) {
        getScoping().applyTo(binder.withSource(getSource()).bind(getKey()).to(getLinkedKey()));
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(LinkedKeyBinding.class)
                .add("key", getKey())
                .add("source", getSource())
                .add("scope", getScoping())
                .add("target", targetKey)
                .toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof LinkedBindingImpl) {
            LinkedBindingImpl o = (LinkedBindingImpl) obj;
            return getKey().equals(o.getKey())
                    && getScoping().equals(o.getScoping())
                    && Objects.equal(targetKey, o.targetKey);
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(getKey(), getScoping(), targetKey);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy