gt:       if ((other instanceof GuiceModuleAccess.Binding)) {
context: /**
   * Copyright (c) 2015, 2017 itemis AG (http://www.itemis.eu) and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   */
  package org.eclipse.xtext.xtext.generator.model;
  
  import com.google.common.base.Objects;
  import java.util.Collections;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Set;
  import org.apache.log4j.Logger;
  import org.eclipse.xtend.lib.annotations.Accessors;
  import org.eclipse.xtend.lib.annotations.Data;
  import org.eclipse.xtend2.lib.StringConcatenationClient;
  import org.eclipse.xtext.util.internal.Log;
  import org.eclipse.xtext.xbase.lib.CollectionLiterals;
  import org.eclipse.xtext.xbase.lib.Conversions;
  import org.eclipse.xtext.xbase.lib.Pure;
  import org.eclipse.xtext.xbase.lib.util.ToStringBuilder;
  import org.eclipse.xtext.xtext.generator.model.TypeReference;
  
  /**
   * Configuration object for Guice modules based on {@link org.eclipse.xtext.service.AbstractGenericModule}.
   */
  @Log
  @SuppressWarnings("all")
  public class GuiceModuleAccess {
    @Data
    public static class BindKey {
      private final String name;
      
      private final TypeReference type;
      
      private final boolean singleton;
      
      private final boolean eagerSingleton;
      
      @Override
      public boolean equals(final Object other) {
        boolean _xifexpression = false;
        if ((other instanceof GuiceModuleAccess.BindKey)) {
          _xifexpression = (Objects.equal(this.name, ((GuiceModuleAccess.BindKey)other).name) && Objects.equal(this.type, ((GuiceModuleAccess.BindKey)other).type));
        } else {
          _xifexpression = false;
        }
        return _xifexpression;
      }
      
      @Override
      public int hashCode() {
        int h = 0;
        if ((this.name != null)) {
          int _h = h;
          int _hashCode = this.name.hashCode();
          h = (_h + _hashCode);
        }
        if ((this.type != null)) {
          int _h_1 = h;
          int _hashCode_1 = this.type.hashCode();
          h = (_h_1 + _hashCode_1);
        }
        return h;
      }
      
      public BindKey(final String name, final TypeReference type, final boolean singleton, final boolean eagerSingleton) {
        super();
        this.name = name;
        this.type = type;
        this.singleton = singleton;
        this.eagerSingleton = eagerSingleton;
      }
      
      @Override
      @Pure
      public String toString() {
        ToStringBuilder b = new ToStringBuilder(this);
        b.add("name", this.name);
        b.add("type", this.type);
        b.add("singleton", this.singleton);
        b.add("eagerSingleton", this.eagerSingleton);
        return b.toString();
      }
      
      @Pure
      public String getName() {
        return this.name;
      }
      
      @Pure
      public TypeReference getType() {
        return this.type;
      }
      
      @Pure
      public boolean isSingleton() {
        return this.singleton;
      }
      
      @Pure
      public boolean isEagerSingleton() {
        return this.eagerSingleton;
      }
    }
    
    @Data
    public static class BindValue {
      private final Object expression;
      
      private final TypeReference type;
      
      private final boolean provider;
      
      private final List<Object> statements;
      
      public BindValue(final Object expression, final TypeReference type, final boolean provider, final List<Object> statements) {
        super();
        this.expression = expression;
        this.type = type;
        this.provider = provider;
        this.statements = statements;
      }
      
      @Override
      @Pure
      public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((this.expression== null) ? 0 : this.expression.hashCode());
        result = prime * result + ((this.type== null) ? 0 : this.type.hashCode());
        result = prime * result + (this.provider ? 1231 : 1237);
        return prime * result + ((this.statements== null) ? 0 : this.statements.hashCode());
      }
      
      @Override
      @Pure
      public boolean equals(final Object obj) {
        if (this == obj)
          return true;
        if (obj == null)
          return false;
        if (getClass() != obj.getClass())
          return false;
        GuiceModuleAccess.BindValue other = (GuiceModuleAccess.BindValue) obj;
        if (this.expression == null) {
          if (other.expression != null)
            return false;
        } else if (!this.expression.equals(other.expression))
          return false;
        if (this.type == null) {
          if (other.type != null)
            return false;
        } else if (!this.type.equals(other.type))
          return false;
        if (other.provider != this.provider)
          return false;
        if (this.statements == null) {
          if (other.statements != null)
            return false;
        } else if (!this.statements.equals(other.statements))
          return false;
        return true;
      }
      
      @Override
      @Pure
      public String toString() {
        ToStringBuilder b = new ToStringBuilder(this);
        b.add("expression", this.expression);
        b.add("type", this.type);
        b.add("provider", this.provider);
        b.add("statements", this.statements);
        return b.toString();
      }
      
      @Pure
      public Object getExpression() {
        return this.expression;
      }
      
      @Pure
      public TypeReference getType() {
        return this.type;
      }
      
      @Pure
      public boolean isProvider() {
        return this.provider;
      }
      
      @Pure
      public List<Object> getStatements() {
        return this.statements;
      }
    }
    
    @Data
    public static class Binding {
      private final GuiceModuleAccess.BindKey key;
      
      private final GuiceModuleAccess.BindValue value;
      
      private final boolean isFinal;
      
      private final String contributedBy;
      
      @Override
      public boolean equals(final Object other) {
        boolean _xifexpression = false;
  