1 /* 2 * Copyright (C) 2019 Square, Inc. 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 * https://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 @file:Suppress("unused") 17 18 package com.squareup.kotlinpoet.metadata 19 20 import kotlinx.metadata.Flag 21 import kotlinx.metadata.Flags 22 import kotlinx.metadata.KmClass 23 import kotlinx.metadata.KmConstructor 24 import kotlinx.metadata.KmFunction 25 import kotlinx.metadata.KmProperty 26 import kotlinx.metadata.KmType 27 import kotlinx.metadata.KmTypeParameter 28 import kotlinx.metadata.KmValueParameter 29 30 // Common flags for any element with flags. 31 @KotlinPoetMetadataPreview 32 public val Flags.hasAnnotations: Boolean get() = Flag.HAS_ANNOTATIONS(this) 33 34 @KotlinPoetMetadataPreview 35 public val Flags.isAbstract: Boolean get() = Flag.IS_ABSTRACT(this) 36 37 @KotlinPoetMetadataPreview 38 public val Flags.isFinal: Boolean get() = Flag.IS_FINAL(this) 39 40 @KotlinPoetMetadataPreview 41 public val Flags.isInternal: Boolean get() = Flag.IS_INTERNAL(this) 42 43 @KotlinPoetMetadataPreview 44 public val Flags.isLocal: Boolean get() = Flag.IS_LOCAL(this) 45 46 @KotlinPoetMetadataPreview 47 public val Flags.isOpen: Boolean get() = Flag.IS_OPEN(this) 48 49 @KotlinPoetMetadataPreview 50 public val Flags.isPrivate: Boolean get() = Flag.IS_PRIVATE(this) 51 52 @KotlinPoetMetadataPreview 53 public val Flags.isPrivate_to_this: Boolean get() = Flag.IS_PRIVATE_TO_THIS(this) 54 55 @KotlinPoetMetadataPreview 56 public val Flags.isProtected: Boolean get() = Flag.IS_PROTECTED(this) 57 58 @KotlinPoetMetadataPreview 59 public val Flags.isPublic: Boolean get() = Flag.IS_PUBLIC(this) 60 61 @KotlinPoetMetadataPreview 62 public val Flags.isSealed: Boolean get() = Flag.IS_SEALED(this) 63 64 // Type flags. 65 @KotlinPoetMetadataPreview 66 public val Flags.isNullableType: Boolean get() = Flag.Type.IS_NULLABLE(this) 67 68 @KotlinPoetMetadataPreview 69 public val Flags.isSuspendType: Boolean get() = Flag.Type.IS_SUSPEND(this) 70 71 // Class flags. 72 @KotlinPoetMetadataPreview 73 public val Flags.isAnnotationClass: Boolean get() = Flag.Class.IS_ANNOTATION_CLASS(this) 74 75 @KotlinPoetMetadataPreview 76 public val Flags.isClass: Boolean get() = Flag.Class.IS_CLASS(this) 77 78 @KotlinPoetMetadataPreview 79 public val Flags.isCompanionObjectClass: Boolean get() = Flag.Class.IS_COMPANION_OBJECT(this) 80 81 @KotlinPoetMetadataPreview 82 public val Flags.isDataClass: Boolean get() = Flag.Class.IS_DATA(this) 83 84 @KotlinPoetMetadataPreview 85 public val Flags.isEnumClass: Boolean get() = Flag.Class.IS_ENUM_CLASS(this) 86 87 @KotlinPoetMetadataPreview 88 public val Flags.isEnumEntryClass: Boolean get() = Flag.Class.IS_ENUM_ENTRY(this) 89 90 @KotlinPoetMetadataPreview 91 public val Flags.isExpectClass: Boolean get() = Flag.Class.IS_EXPECT(this) 92 93 @KotlinPoetMetadataPreview 94 public val Flags.isExternalClass: Boolean get() = Flag.Class.IS_EXTERNAL(this) 95 96 @KotlinPoetMetadataPreview 97 public val Flags.isValueClass: Boolean get() = Flag.Class.IS_VALUE(this) 98 99 @KotlinPoetMetadataPreview 100 public val Flags.isInnerClass: Boolean get() = Flag.Class.IS_INNER(this) 101 102 @KotlinPoetMetadataPreview 103 public val Flags.isObjectClass: Boolean get() = Flag.Class.IS_OBJECT(this) 104 105 @KotlinPoetMetadataPreview 106 public val Flags.isInterface: Boolean get() = Flag.Class.IS_INTERFACE(this) 107 108 @KotlinPoetMetadataPreview 109 public val Flags.isFun: Boolean get() = Flag.Class.IS_FUN(this) 110 111 @KotlinPoetMetadataPreview 112 public val KmClass.isAnnotation: Boolean get() = flags.isAnnotationClass 113 114 @KotlinPoetMetadataPreview 115 public val KmClass.isClass: Boolean get() = flags.isClass 116 117 @KotlinPoetMetadataPreview 118 public val KmClass.isCompanionObject: Boolean get() = flags.isCompanionObjectClass 119 120 @KotlinPoetMetadataPreview 121 public val KmClass.isData: Boolean get() = flags.isDataClass 122 123 @KotlinPoetMetadataPreview 124 public val KmClass.isEnum: Boolean get() = flags.isEnumClass 125 126 @KotlinPoetMetadataPreview 127 public val KmClass.isEnumEntry: Boolean get() = flags.isEnumEntryClass 128 129 @KotlinPoetMetadataPreview 130 public val KmClass.isExpect: Boolean get() = flags.isExpectClass 131 132 @KotlinPoetMetadataPreview 133 public val KmClass.isExternal: Boolean get() = flags.isExternalClass 134 135 @KotlinPoetMetadataPreview 136 public val KmClass.isValue: Boolean get() = flags.isValueClass 137 138 @KotlinPoetMetadataPreview 139 public val KmClass.isInner: Boolean get() = flags.isInnerClass 140 141 @KotlinPoetMetadataPreview 142 public val KmClass.isObject: Boolean get() = flags.isObjectClass 143 144 @KotlinPoetMetadataPreview 145 public val KmClass.isInterface: Boolean get() = flags.isInterface 146 147 @KotlinPoetMetadataPreview 148 public val KmClass.isFun: Boolean get() = flags.isFun 149 150 @KotlinPoetMetadataPreview 151 public val KmType.isSuspend: Boolean get() = flags.isSuspendType 152 153 @KotlinPoetMetadataPreview 154 public val KmType.isNullable: Boolean get() = flags.isNullableType 155 156 // Constructor flags. 157 @KotlinPoetMetadataPreview 158 public val Flags.isPrimaryConstructor: Boolean get() = !Flag.Constructor.IS_SECONDARY(this) 159 160 @KotlinPoetMetadataPreview 161 public val KmConstructor.isPrimary: Boolean get() = flags.isPrimaryConstructor 162 163 @KotlinPoetMetadataPreview 164 public val KmConstructor.isSecondary: Boolean get() = !isPrimary 165 166 // Function flags. 167 @KotlinPoetMetadataPreview 168 public val Flags.isDeclarationFunction: Boolean get() = Flag.Function.IS_DECLARATION(this) 169 170 @KotlinPoetMetadataPreview 171 public val Flags.isFakeOverrideFunction: Boolean get() = Flag.Function.IS_FAKE_OVERRIDE(this) 172 173 @KotlinPoetMetadataPreview 174 public val Flags.isDelegationFunction: Boolean get() = Flag.Function.IS_DELEGATION(this) 175 176 @KotlinPoetMetadataPreview 177 public val Flags.isSynthesizedFunction: Boolean get() = Flag.Function.IS_SYNTHESIZED(this) 178 179 @KotlinPoetMetadataPreview 180 public val Flags.isOperatorFunction: Boolean get() = Flag.Function.IS_OPERATOR(this) 181 182 @KotlinPoetMetadataPreview 183 public val Flags.isInfixFunction: Boolean get() = Flag.Function.IS_INFIX(this) 184 185 @KotlinPoetMetadataPreview 186 public val Flags.isInlineFunction: Boolean get() = Flag.Function.IS_INLINE(this) 187 188 @KotlinPoetMetadataPreview 189 public val Flags.isTailRecFunction: Boolean get() = Flag.Function.IS_TAILREC(this) 190 191 @KotlinPoetMetadataPreview 192 public val Flags.isExternalFunction: Boolean get() = Flag.Function.IS_EXTERNAL(this) 193 194 @KotlinPoetMetadataPreview 195 public val Flags.isSuspendFunction: Boolean get() = Flag.Function.IS_SUSPEND(this) 196 197 @KotlinPoetMetadataPreview 198 public val Flags.isExpectFunction: Boolean get() = Flag.Function.IS_EXPECT(this) 199 200 @KotlinPoetMetadataPreview 201 public val KmFunction.isDeclaration: Boolean get() = flags.isDeclarationFunction 202 203 @KotlinPoetMetadataPreview 204 public val KmFunction.isFakeOverride: Boolean get() = flags.isFakeOverrideFunction 205 206 @KotlinPoetMetadataPreview 207 public val KmFunction.isDelegation: Boolean get() = flags.isDelegationFunction 208 209 @KotlinPoetMetadataPreview 210 public val KmFunction.isSynthesized: Boolean get() = flags.isSynthesizedFunction 211 212 @KotlinPoetMetadataPreview 213 public val KmFunction.isOperator: Boolean get() = flags.isOperatorFunction 214 215 @KotlinPoetMetadataPreview 216 public val KmFunction.isInfix: Boolean get() = flags.isInfixFunction 217 218 @KotlinPoetMetadataPreview 219 public val KmFunction.isInline: Boolean get() = flags.isInlineFunction 220 221 @KotlinPoetMetadataPreview 222 public val KmFunction.isTailRec: Boolean get() = flags.isTailRecFunction 223 224 @KotlinPoetMetadataPreview 225 public val KmFunction.isExternal: Boolean get() = flags.isExternalFunction 226 227 @KotlinPoetMetadataPreview 228 public val KmFunction.isSuspend: Boolean get() = flags.isSuspendFunction 229 230 @KotlinPoetMetadataPreview 231 public val KmFunction.isExpect: Boolean get() = flags.isExpectFunction 232 233 // Parameter flags. 234 @KotlinPoetMetadataPreview 235 public val KmValueParameter.declaresDefaultValue: Boolean get() = 236 Flag.ValueParameter.DECLARES_DEFAULT_VALUE(flags) 237 238 @KotlinPoetMetadataPreview 239 public val KmValueParameter.isCrossInline: Boolean get() = Flag.ValueParameter.IS_CROSSINLINE(flags) 240 241 @KotlinPoetMetadataPreview 242 public val KmValueParameter.isNoInline: Boolean get() = Flag.ValueParameter.IS_NOINLINE(flags) 243 244 // Property flags. 245 @KotlinPoetMetadataPreview 246 public val Flags.isFakeOverrideProperty: Boolean get() = Flag.Property.IS_FAKE_OVERRIDE(this) 247 248 @KotlinPoetMetadataPreview 249 public val KmProperty.hasConstant: Boolean get() = Flag.Property.HAS_CONSTANT(flags) 250 251 @KotlinPoetMetadataPreview 252 public val KmProperty.hasGetter: Boolean get() = Flag.Property.HAS_GETTER(flags) 253 254 @KotlinPoetMetadataPreview 255 public val KmProperty.hasSetter: Boolean get() = Flag.Property.HAS_SETTER(flags) 256 257 @KotlinPoetMetadataPreview 258 public val KmProperty.isConst: Boolean get() = Flag.Property.IS_CONST(flags) 259 260 @KotlinPoetMetadataPreview 261 public val KmProperty.isDeclaration: Boolean get() = Flag.Property.IS_DECLARATION(flags) 262 263 @KotlinPoetMetadataPreview 264 public val KmProperty.isDelegated: Boolean get() = Flag.Property.IS_DELEGATED(flags) 265 266 @KotlinPoetMetadataPreview 267 public val KmProperty.isDelegation: Boolean get() = Flag.Property.IS_DELEGATION(flags) 268 269 @KotlinPoetMetadataPreview 270 public val KmProperty.isExpect: Boolean get() = Flag.Property.IS_EXPECT(flags) 271 272 @KotlinPoetMetadataPreview 273 public val KmProperty.isExternal: Boolean get() = Flag.Property.IS_EXTERNAL(flags) 274 275 @KotlinPoetMetadataPreview 276 public val KmProperty.isFakeOverride: Boolean get() = flags.isFakeOverrideProperty 277 278 @KotlinPoetMetadataPreview 279 public val KmProperty.isLateinit: Boolean get() = Flag.Property.IS_LATEINIT(flags) 280 281 @KotlinPoetMetadataPreview 282 public val KmProperty.isSynthesized: Boolean get() = Flag.Property.IS_SYNTHESIZED(flags) 283 284 @KotlinPoetMetadataPreview 285 public val KmProperty.isVar: Boolean get() = Flag.Property.IS_VAR(flags) 286 287 @KotlinPoetMetadataPreview 288 public val KmProperty.isVal: Boolean get() = !isVar 289 290 // Property Accessor Flags 291 @KotlinPoetMetadataPreview 292 public val Flags.isPropertyAccessorExternal: Boolean 293 get() = Flag.PropertyAccessor.IS_EXTERNAL(this) 294 295 @KotlinPoetMetadataPreview 296 public val Flags.isPropertyAccessorInline: Boolean 297 get() = Flag.PropertyAccessor.IS_INLINE(this) 298 299 @KotlinPoetMetadataPreview 300 public val Flags.isPropertyAccessorNotDefault: Boolean 301 get() = Flag.PropertyAccessor.IS_NOT_DEFAULT(this) 302 303 // TypeParameter flags. 304 @KotlinPoetMetadataPreview 305 public val KmTypeParameter.isReified: Boolean get() = Flag.TypeParameter.IS_REIFIED(flags) 306 307 // Property Accessor Flags 308 public enum class PropertyAccessorFlag { 309 IS_EXTERNAL, 310 IS_INLINE, 311 IS_NOT_DEFAULT, 312 } 313 314 @KotlinPoetMetadataPreview 315 public val KmProperty.setterPropertyAccessorFlags: Set<PropertyAccessorFlag> 316 get() = setterFlags.propertyAccessorFlags 317 318 @KotlinPoetMetadataPreview 319 public val KmProperty.getterPropertyAccessorFlags: Set<PropertyAccessorFlag> 320 get() = getterFlags.propertyAccessorFlags 321 322 @KotlinPoetMetadataPreview 323 public val Flags.propertyAccessorFlags: Set<PropertyAccessorFlag> <lambda>null324 get() = setOf { 325 if (Flag.PropertyAccessor.IS_EXTERNAL(this@propertyAccessorFlags)) { 326 add(PropertyAccessorFlag.IS_EXTERNAL) 327 } 328 if (Flag.PropertyAccessor.IS_INLINE(this@propertyAccessorFlags)) { 329 add(PropertyAccessorFlag.IS_INLINE) 330 } 331 if (Flag.PropertyAccessor.IS_NOT_DEFAULT(this@propertyAccessorFlags)) { 332 add(PropertyAccessorFlag.IS_NOT_DEFAULT) 333 } 334 } 335 setOfnull336internal inline fun <E> setOf(body: MutableSet<E>.() -> Unit): Set<E> { 337 return mutableSetOf<E>().apply(body).toSet() 338 } 339