12e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets/* 22e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * Copyright (C) 2017 The Android Open Source Project 32e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * 42e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License"); 52e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * you may not use this file except in compliance with the License. 62e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * You may obtain a copy of the License at 72e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * 82e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * http://www.apache.org/licenses/LICENSE-2.0 92e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * 102e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * Unless required by applicable law or agreed to in writing, software 112e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS, 122e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * See the License for the specific language governing permissions and 142e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * limitations under the License. 152e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets */ 162e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets 17bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.lifecycle.model 182e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets 19bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.name 20bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.syntheticName 212e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinetsimport javax.lang.model.element.ExecutableElement 222e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinetsimport javax.lang.model.element.TypeElement 232e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets 242e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinetsdata class InputModel( 252e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets // all java files with lifecycle annotations excluding classes from classpath 262e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets private val rootTypes: Set<TypeElement>, 272e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets // info about all lifecycle observers including classes from classpath 282e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets val observersInfo: Map<TypeElement, LifecycleObserverInfo>, 292e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets // info about generated adapters from class path 302e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets val generatedAdapters: Map<TypeElement, List<ExecutableElement>>) { 312e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets 322e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets /** 332e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets * Root class is class defined in currently processed module, not in classpath 342e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets */ 352e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets fun isRootType(type: TypeElement) = type in rootTypes 362e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets 372e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets fun hasSyntheticAccessorFor(eventMethod: EventMethod): Boolean { 382e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets val syntheticMethods = generatedAdapters[eventMethod.type] ?: return false 392e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets return syntheticMethods.any { executable -> 402e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets executable.name() == syntheticName(eventMethod.method) 412e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets // same number + receiver object 422e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets && (eventMethod.method.parameters.size + 1) == executable.parameters.size 432e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets } 442e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets } 452e9de5a9a940a64564f9d08953cfffa84226757bSergey Vasilinets}