1 /* 2 * Copyright (C) 2017 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 com.android.tools.metalava.model.text 18 19 import com.android.tools.metalava.model.ClassItem 20 import com.android.tools.metalava.model.FieldItem 21 import com.android.tools.metalava.model.TypeItem 22 23 class TextFieldItem( 24 codebase: TextCodebase, 25 name: String, 26 containingClass: TextClassItem, 27 modifiers: TextModifiers, 28 private val type: TextTypeItem, 29 private val constantValue: Any?, 30 position: SourcePositionInfo 31 ) : TextMemberItem(codebase, name, containingClass, position, modifiers), FieldItem { 32 33 init { 34 modifiers.setOwner(this) 35 } 36 equalsnull37 override fun equals(other: Any?): Boolean { 38 if (this === other) return true 39 if (other !is FieldItem) return false 40 41 if (name() != other.name()) { 42 return false 43 } 44 45 return containingClass() == other.containingClass() 46 } 47 hashCodenull48 override fun hashCode(): Int = name().hashCode() 49 50 override fun type(): TypeItem = type 51 52 override fun initialValue(requireConstant: Boolean): Any? = constantValue 53 54 override fun toString(): String = "field ${containingClass().fullName()}.${name()}" 55 56 override fun duplicate(targetContainingClass: ClassItem): TextFieldItem { 57 val duplicated = TextFieldItem( 58 codebase, name(), targetContainingClass as TextClassItem, 59 modifiers.duplicate(), type, constantValue, position 60 ) 61 duplicated.inheritedFrom = containingClass() 62 duplicated.inheritedField = inheritedField 63 64 // Preserve flags that may have been inherited (propagated) from surrounding packages 65 if (targetContainingClass.hidden) { 66 duplicated.hidden = true 67 } 68 if (targetContainingClass.removed) { 69 duplicated.removed = true 70 } 71 if (targetContainingClass.docOnly) { 72 duplicated.docOnly = true 73 } 74 75 return duplicated 76 } 77 78 override var inheritedFrom: ClassItem? = null 79 override var inheritedField: Boolean = false 80 81 private var isEnumConstant = false isEnumConstantnull82 override fun isEnumConstant(): Boolean = isEnumConstant 83 fun setEnumConstant(isEnumConstant: Boolean) { 84 this.isEnumConstant = isEnumConstant 85 } 86 } 87