1 package com.uber.nullaway.dataflow; 2 3 import com.google.common.collect.ImmutableList; 4 import java.util.Arrays; 5 import java.util.List; 6 import java.util.Objects; 7 import javax.annotation.Nullable; 8 import javax.lang.model.element.Element; 9 10 /** 11 * Represents a (non-root) element of an AccessPath. 12 * 13 * <p>This is just a java Element (field, method, etc) in the access-path chain (e.g. f or g() in 14 * x.f.g()). Plus, optionally, a list of constant arguments, allowing access path elements for 15 * method calls with constant values (e.g. h(3) or k("STR_KEY") in x.h(3).g().k("STR_KEY")). 16 */ 17 public final class AccessPathElement { 18 private final Element javaElement; 19 @Nullable private final ImmutableList<String> constantArguments; 20 AccessPathElement(Element javaElement, List<String> constantArguments)21 public AccessPathElement(Element javaElement, List<String> constantArguments) { 22 this.javaElement = javaElement; 23 this.constantArguments = ImmutableList.copyOf(constantArguments); 24 } 25 AccessPathElement(Element javaElement)26 public AccessPathElement(Element javaElement) { 27 this.javaElement = javaElement; 28 this.constantArguments = null; 29 } 30 getJavaElement()31 public Element getJavaElement() { 32 return this.javaElement; 33 } 34 35 @Override equals(Object obj)36 public boolean equals(Object obj) { 37 if (obj instanceof AccessPathElement) { 38 AccessPathElement otherNode = (AccessPathElement) obj; 39 return this.javaElement.equals(otherNode.javaElement) 40 && Objects.equals(constantArguments, otherNode.constantArguments); 41 } else { 42 return false; 43 } 44 } 45 46 @Override hashCode()47 public int hashCode() { 48 int result = javaElement.hashCode(); 49 result = 31 * result + (constantArguments != null ? constantArguments.hashCode() : 0); 50 return result; 51 } 52 53 @Override toString()54 public String toString() { 55 return "APElement{" 56 + "javaElement=" 57 + javaElement.toString() 58 + ", constantArguments=" 59 + Arrays.deepToString(constantArguments != null ? constantArguments.toArray() : null) 60 + '}'; 61 } 62 } 63