1b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets/*
2b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * Copyright 2017 The Android Open Source Project
3b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets *
4b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License");
5b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * you may not use this file except in compliance with the License.
6b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * You may obtain a copy of the License at
7b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets *
8b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets *      http://www.apache.org/licenses/LICENSE-2.0
9b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets *
10b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * Unless required by applicable law or agreed to in writing, software
11b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS,
12b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * See the License for the specific language governing permissions and
14b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets * limitations under the License.
15b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets */
16b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets
171503d52153986fdcfe7e744795010708b7410892Ian Lakepackage androidx.navigation.safe.args.generator.models
18b3e31f33297405a0a5dd0182a42403722f6aad2cSergey Vasilinets
1990ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinetsimport com.squareup.javapoet.ClassName
2090ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets
2116e05dcb2c2b47193b55239be6ae498f7e6e082aSergey Vasilinetsdata class Destination(
229ca584405af88767f97ec06fbb5f5e1b7e98b1b4Sergey Vasilinets        val id: ResReference?,
2390ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets        val name: ClassName?,
2416e05dcb2c2b47193b55239be6ae498f7e6e082aSergey Vasilinets        val type: String,
2516e05dcb2c2b47193b55239be6ae498f7e6e082aSergey Vasilinets        val args: List<Argument>,
2616e05dcb2c2b47193b55239be6ae498f7e6e082aSergey Vasilinets        val actions: List<Action>,
2790ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets        val nested: List<Destination> = emptyList()) {
2890ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets
2990ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets    companion object {
309ca584405af88767f97ec06fbb5f5e1b7e98b1b4Sergey Vasilinets        fun createName(id: ResReference?, name: String, applicationId: String): ClassName? = when {
3190ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets            name.isNotEmpty() -> {
3290ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets                val specifiedPackage = name.substringBeforeLast('.', "")
33e287a49fd22dc33cdb989945866bdf7095ef356cSergey Vasilinets                val classPackage = if (name.startsWith(".")) {
34e287a49fd22dc33cdb989945866bdf7095ef356cSergey Vasilinets                    "$applicationId$specifiedPackage"
35e287a49fd22dc33cdb989945866bdf7095ef356cSergey Vasilinets                } else {
36e287a49fd22dc33cdb989945866bdf7095ef356cSergey Vasilinets                    specifiedPackage
3790ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets                }
38e287a49fd22dc33cdb989945866bdf7095ef356cSergey Vasilinets                ClassName.get(classPackage, name.substringAfterLast('.'))
3990ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets            }
4090ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets            id != null -> ClassName.get(id.packageName, id.name.capitalize())
4190ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets            else -> null
4290ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets        }
4390ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets    }
4490ee199ee11cc50ff6abbad162cca5c4b75fa3fcSergey Vasilinets}