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 androidx.room.processor 18 19 import androidx.room.vo.Warning 20 import com.google.auto.common.AnnotationMirrors 21 import com.google.auto.common.MoreElements 22 import javax.lang.model.element.AnnotationValue 23 import javax.lang.model.element.Element 24 import javax.lang.model.util.SimpleAnnotationValueVisitor6 25 26 /** 27 * A visitor that reads SuppressWarnings annotations and keeps the ones we know about. 28 */ 29 object SuppressWarningProcessor { 30 getSuppressedWarningsnull31 fun getSuppressedWarnings(element: Element): Set<Warning> { 32 val annotation = MoreElements.getAnnotationMirror(element, 33 SuppressWarnings::class.java).orNull() 34 return if (annotation == null) { 35 emptySet() 36 } else { 37 val value = AnnotationMirrors.getAnnotationValue(annotation, "value") 38 if (value == null) { 39 emptySet() 40 } else { 41 VISITOR.visit(value) 42 } 43 } 44 } 45 46 private object VISITOR : SimpleAnnotationValueVisitor6<Set<Warning>, String>() { visitArraynull47 override fun visitArray(values: List<AnnotationValue>?, elementName: String? 48 ): Set<Warning> { 49 return values?.mapNotNull { 50 Warning.fromPublicKey(it.value.toString()) 51 }?.toSet() ?: emptySet() 52 } 53 defaultActionnull54 override fun defaultAction(o: Any?, p: String?): Set<Warning> { 55 return emptySet() 56 } 57 } 58 } 59