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

com.google.gwt.inject.rebind.reflect.FieldLiteral Maven / Gradle / Ivy

Go to download

GIN (GWT INjection) brings automatic dependency injection to Google Web Toolkit client-side code. GIN is built on top of Guice and uses (a subset of) Guice's binding language.

The newest version!
package com.google.gwt.inject.rebind.reflect;

import com.google.gwt.inject.rebind.util.Preconditions;
import com.google.inject.TypeLiteral;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * Generic field representation preserving the fields type parametrization.
 *
 * @see TypeLiteral
 */
public class FieldLiteral extends MemberLiteral {

  /**
   * Returns a new field literal based on the passed field and its declaring
   * type.
   *
   * @param field field for which the literal is created
   * @param declaringType the field's declaring type
   * @return new field literal
   */
  public static  FieldLiteral get(Field field, TypeLiteral declaringType) {
    Preconditions.checkArgument(
        field.getDeclaringClass().equals(declaringType.getRawType()),
        "declaringType (%s) must be the type literal where field was declared (%s)!",
        declaringType, field.getDeclaringClass());
    return new FieldLiteral(field, declaringType);
  }

  private FieldLiteral(Field field, TypeLiteral typeLiteral) {
    super(field, typeLiteral);
  }

  /**
   * Returns the field's type, if appropriate parametrized with the declaring
   * class's type parameters.
   *
   * @return field type
   */
  public TypeLiteral getFieldType() {
    return getDeclaringType().getFieldType(getMember());
  }

  /**
   * Returns {@code true} if this is a final field that past versions of Gin
   * allowed to be set by member injection.
   *
   * 

Past versions of Gin used native Javascript to set the values of * inaccessible fields. If those fields also happened to be final, the native * code would ignore the final modifier and assign the field anyway. * *

As I (dburrows) don't feel that this is something to encourage, I'm * narrowly allowing this usage only in cases where to do otherwise would * break previously compiling code. It might be prudent to remove this * exclusion in the future, but not as part of my current work. */ public boolean isLegacyFinalField() { return !isPublic() && Modifier.isFinal(getModifiers()); } /** * Returns the field's declaring type and name in the format used in javadoc, * e.g. {@code com.bar.Foo#baz}, with resolved type parameters. * * @return string representation for this method including the declaring type */ @Override public String toString() { return String.format("%s#%s", getDeclaringType(), getName()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy