Skip to content

Commit

Permalink
Merge pull request #1225 from marcellogalhardo/expand-resolve-api
Browse files Browse the repository at this point in the history
Expand resolve api
  • Loading branch information
arnaudgiuliani committed Jan 11, 2022
2 parents 00eefd8 + cd221dc commit 9e3bdce
Show file tree
Hide file tree
Showing 5 changed files with 906 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
/*
* Copyright 2017-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.koin.androidx.viewmodel.dsl

import androidx.lifecycle.ViewModel
import org.koin.core.instance.InstanceFactory
import org.koin.core.module.Module
import org.koin.core.qualifier.Qualifier
import org.koin.core.scope.new

/**
* Declare a [Module.viewModel] definition by resolving a constructor reference for the dependency.
* The resolution is done at compile time by leveraging inline functions, no reflection is required.
*
* Example:
* ```
* class MyViewModel : ViewModel()
*
* val myModule = module {
* viewModel(::MyViewModel)
* }
* ```
*
* @author Marcello Galhardo
*
* @see new
*/
inline fun <reified R : ViewModel> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: () -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel> Module.viewModelOf(
crossinline constructor: () -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1> Module.viewModelOf(
crossinline constructor: (T1) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2> Module.viewModelOf(
crossinline constructor: (T1, T2) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3> Module.viewModelOf(
crossinline constructor: (T1, T2, T3) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4, T5) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4, T5) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4, T5, T6) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4, T5, T6) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10> Module.viewModelOf(
qualifier: Qualifier,
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel(qualifier) { new(constructor) }

/**
* @see viewModelOf
*/
inline fun <reified R : ViewModel, reified T1, reified T2, reified T3, reified T4, reified T5, reified T6, reified T7, reified T8, reified T9, reified T10> Module.viewModelOf(
crossinline constructor: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) -> R,
): Pair<Module, InstanceFactory<R>> = viewModel { new(constructor) }
Loading

0 comments on commit 9e3bdce

Please sign in to comment.