• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Uber Technologies, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 package com.uber.nullaway.fixserialization.out;
24 
25 import com.sun.tools.javac.code.Symbol;
26 import com.uber.nullaway.fixserialization.Serializer;
27 import com.uber.nullaway.fixserialization.adapters.SerializationAdapter;
28 import com.uber.nullaway.fixserialization.location.SymbolLocation;
29 
30 /**
31  * Stores information regarding a method that initializes a class field and leaves it
32  * {@code @NonNull} at exit point.
33  */
34 public class FieldInitializationInfo {
35 
36   /** Symbol of the initializer method. */
37   private final SymbolLocation initializerMethodLocation;
38 
39   /** Symbol of the initialized class field. */
40   private final Symbol field;
41 
FieldInitializationInfo(Symbol.MethodSymbol initializerMethod, Symbol field)42   public FieldInitializationInfo(Symbol.MethodSymbol initializerMethod, Symbol field) {
43     this.initializerMethodLocation = SymbolLocation.createLocationFromSymbol(initializerMethod);
44     this.field = field;
45   }
46 
47   /**
48    * Returns string representation of content of an object.
49    *
50    * @param adapter adapter used to serialize symbols.
51    * @return string representation of contents of an object in a line seperated by tabs.
52    */
tabSeparatedToString(SerializationAdapter adapter)53   public String tabSeparatedToString(SerializationAdapter adapter) {
54     return initializerMethodLocation.tabSeparatedToString(adapter)
55         + '\t'
56         + Serializer.serializeSymbol(field, adapter);
57   }
58 
59   /**
60    * Creates header of an output file containing all {@link FieldInitializationInfo} written in
61    * string which values are separated by tabs.
62    *
63    * @return string representation of the header separated by tabs.
64    */
header()65   public static String header() {
66     return SymbolLocation.header() + '\t' + "field";
67   }
68 }
69