• 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 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