package com.airbnb.epoxy; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.CodeBlock; /** * Represents a layout resource used in an Epoxy model via the {@link EpoxyModelClass} annotation * <p> * Inpspired by Butterknife. https://github.com/JakeWharton/butterknife/pull/613 */ final class LayoutResource { private static final ClassName ANDROID_R = ClassName.get("android", "R"); final ClassName className; final String resourceName; final int value; final CodeBlock code; final boolean qualifed; LayoutResource(int value) { this.value = value; this.code = CodeBlock.of("$L", value); this.qualifed = false; resourceName = null; className = null; } LayoutResource(ClassName className, String resourceName, int value) { this.className = className; this.resourceName = resourceName; this.value = value; this.code = className.topLevelClassName().equals(ANDROID_R) ? CodeBlock.of("$L.$N", className, resourceName) : CodeBlock.of("$T.$N", className, resourceName); this.qualifed = true; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof LayoutResource)) { return false; } LayoutResource that = (LayoutResource) o; if (value != that.value) { return false; } return code.equals(that.code); } @Override public int hashCode() { int result = value; result = 31 * result + code.hashCode(); return result; } @Override public String toString() { throw new UnsupportedOperationException("Please use value or code explicitly"); } }