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