1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.processor.compat.changeid;
18 
19 /**
20  * Simple data class that represents a change, built from the code annotations.
21  */
22 final class Change {
23     final Long id;
24     final String name;
25     final boolean disabled;
26     final boolean loggingOnly;
27     final Integer enabledAfter;
28     final String description;
29     /**
30      * Package name that the change is defined in.
31      */
32     final String javaPackage;
33     /**
34      * Name of the class within it's package that the change is defined in.
35      */
36     final String className;
37     /**
38      * Fully qualified class name (including the package) that the change is defined in.
39      */
40     final String qualifiedClass;
41     /**
42      * Source position, in the form path/to/File.java:line
43      */
44     final String sourcePosition;
45 
46      Change(Long id, String name, boolean disabled, boolean loggingOnly, Integer enabledAfter,
47             String description, String javaPackage, String className, String qualifiedClass,
48             String sourcePosition) {
49         this.id = id;
50         this.name = name;
51         this.disabled = disabled;
52         this.loggingOnly = loggingOnly;
53         this.enabledAfter = enabledAfter;
54         this.description = description;
55         this.javaPackage = javaPackage;
56         this.className = className;
57         this.qualifiedClass = qualifiedClass;
58         this.sourcePosition = sourcePosition;
59     }
60 
61     public static class Builder {
62         Long id;
63         String name;
64         boolean disabled;
65         boolean loggingOnly;
66         Integer enabledAfter;
67         String description;
68         String javaPackage;
69         String javaClass;
70         String qualifiedClass;
71         String sourcePosition;
72 
73         Builder() {
74         }
75 
76         public Builder id(long id) {
77             this.id = id;
78             return this;
79         }
80 
81         public Builder name(String name) {
82             this.name = name;
83             return this;
84         }
85 
86         public Builder disabled() {
87             this.disabled = true;
88             return this;
89         }
90 
91         public Builder loggingOnly() {
92             this.loggingOnly = true;
93             return this;
94         }
95 
96         public Builder enabledAfter(int sdkVersion) {
97             this.enabledAfter = sdkVersion;
98             return this;
99         }
100 
101         public Builder description(String description) {
102             this.description = description;
103             return this;
104         }
105 
106         public Builder javaPackage(String javaPackage) {
107             this.javaPackage = javaPackage;
108             return this;
109         }
110 
111         public Builder javaClass(String javaClass) {
112             this.javaClass = javaClass;
113             return this;
114         }
115 
116         public Builder qualifiedClass(String className) {
117             this.qualifiedClass = className;
118             return this;
119         }
120 
121         public Builder sourcePosition(String sourcePosition) {
122             this.sourcePosition = sourcePosition;
123             return this;
124         }
125 
126         public Change build() {
127             return new Change(id, name, disabled, loggingOnly, enabledAfter, description,
128                     javaPackage, javaClass, qualifiedClass, sourcePosition);
129         }
130     }
131 }
132