diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/AndroidModuleTemplateBuilder.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/AndroidModuleTemplateBuilder.kt index 6e64b2970..d63f44f24 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/AndroidModuleTemplateBuilder.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/AndroidModuleTemplateBuilder.kt @@ -54,7 +54,7 @@ class AndroidModuleTemplateBuilder : ModuleTemplateBuilder() { /** * Configure the properties for `AndroidManifest.xml` file. */ - fun manifest(block: AndroidManifestBuilder.() -> Unit) { + inline fun manifest(crossinline block: AndroidManifestBuilder.() -> Unit) { manifest.apply(block) } @@ -81,7 +81,7 @@ class AndroidModuleTemplateBuilder : ModuleTemplateBuilder() { * * @param configure Function to configure the resources. */ - fun RecipeExecutor.res(configure: AndroidModuleResManager.() -> Unit) { + inline fun RecipeExecutor.res(crossinline configure: AndroidModuleResManager.() -> Unit) { res.apply(configure) } @@ -97,8 +97,8 @@ class AndroidModuleTemplateBuilder : ModuleTemplateBuilder() { * * @param name The name of the class. */ - fun RecipeExecutor.createActivity(name: String = "MainActivity", - configure: TypeSpec.Builder.() -> Unit + inline fun RecipeExecutor.createActivity(name: String = "MainActivity", + crossinline configure: TypeSpec.Builder.() -> Unit ) { sources { createClass(data.packageName, name, configure) diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/ModuleTemplateBuilder.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/ModuleTemplateBuilder.kt index 097b0a050..f9ce81c59 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/ModuleTemplateBuilder.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/ModuleTemplateBuilder.kt @@ -42,14 +42,18 @@ abstract class ModuleTemplateBuilder : internal val platforms = hashSetOf() internal val dependencies = hashSetOf() - protected val sourceWriter = SourceWriter() + + @PublishedApi + internal val sourceWriter = SourceWriter() + + @PublishedApi internal var _name: String? = null val name: String get() = checkNotNull(_name) { "Name not set to module template" } - protected open fun RecipeExecutor.preConfig() {} - protected open fun RecipeExecutor.postConfig() {} + open fun RecipeExecutor.preConfig() {} + open fun RecipeExecutor.postConfig() {} /** * Get the asset path for base module project template. @@ -123,7 +127,7 @@ abstract class ModuleTemplateBuilder : * * @param configure Function for configuring the source files. */ - fun RecipeExecutor.sources(configure: SourceWriter.() -> Unit) { + inline fun RecipeExecutor.sources(crossinline configure: SourceWriter.() -> Unit) { sourceWriter.apply(configure) } @@ -133,8 +137,8 @@ abstract class ModuleTemplateBuilder : * @param moduleData Called after the base configuration is setup and before the [recipe] is executed. Caller can perform its own * pre-recipe configuration here. Returns the [ModuleTemplateData] instance. */ - fun commonPreRecipe(extraConfig: TemplateRecipeConfigurator = {}, - moduleData: RecipeExecutor.() -> ModuleTemplateData + inline fun commonPreRecipe(crossinline extraConfig: TemplateRecipeConfigurator = {}, + crossinline moduleData: RecipeExecutor.() -> ModuleTemplateData ): TemplateRecipeConfigurator = { val data = moduleData() diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/ProjectTemplateBuilder.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/ProjectTemplateBuilder.kt index 2802cfcfe..2e2802448 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/ProjectTemplateBuilder.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/ProjectTemplateBuilder.kt @@ -39,10 +39,14 @@ class ProjectTemplateBuilder : ExecutorDataTemplateBuilder() { private var _defModule: ModuleTemplateData? = null + + @PublishedApi internal val defModuleTemplate: ModuleTemplate? = null + @PublishedApi internal val modules = mutableListOf() + @PublishedApi internal val defModule: ModuleTemplateData get() = checkNotNull(_defModule) { "Module template data not set" } diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt index fff3beb10..000a45814 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt @@ -60,13 +60,13 @@ typealias AndroidModuleTemplateConfigurator = AndroidModuleTemplateBuilder.() -> * * @param block Function to configure the template. */ -fun baseProject(projectName: StringParameter = projectNameParameter(), +inline fun baseProject(projectName: StringParameter = projectNameParameter(), packageName: StringParameter = packageNameParameter(), useKts: BooleanParameter = useKtsParameter(), minSdk: EnumParameter = minSdkParameter(), language: EnumParameter = projectLanguageParameter(), projectVersionData: ProjectVersionData = ProjectVersionData(), - block: ProjectTemplateBuilder.() -> Unit + crossinline block: ProjectTemplateBuilder.() -> Unit ): ProjectTemplate { return ProjectTemplateBuilder().apply { @@ -148,8 +148,8 @@ fun baseProject(projectName: StringParameter = projectNameParameter(), * * @param block The module configurator. */ -fun baseAndroidModule(isLibrary: Boolean = false, - block: AndroidModuleTemplateConfigurator +inline fun baseAndroidModule(isLibrary: Boolean = false, + crossinline block: AndroidModuleTemplateConfigurator ): ModuleTemplate { return AndroidModuleTemplateBuilder().apply { @@ -201,8 +201,8 @@ fun baseAndroidModule(isLibrary: Boolean = false, * @param configurator The configurator to configure the template. * @return The [FileTemplate]. */ -fun baseFile(dir: File, - configurator: FileTemplateBuilder.() -> Unit +inline fun baseFile(dir: File, + crossinline configurator: FileTemplateBuilder.() -> Unit ): FileTemplate { return FileTemplateBuilder(dir).apply(configurator) .build() as FileTemplate diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/android/utils.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/android/utils.kt index 748f6d825..b1f1dcfff 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/android/utils.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/android/utils.kt @@ -31,10 +31,10 @@ import com.itsaky.androidide.templates.base.util.AndroidManifestBuilder.Configur * @param copyDefAssets Whether to copy the default Android assets (except `values` directory) to this module. * @param block The module configurator. */ -fun ProjectTemplateBuilder.defaultAppModule(name: String = ":app", +inline fun ProjectTemplateBuilder.defaultAppModule(name: String = ":app", addAndroidX: Boolean = true, copyDefAssets: Boolean = true, - block: AndroidModuleTemplateConfigurator + crossinline block: AndroidModuleTemplateConfigurator ) { check( defModuleTemplate == null) { "Default module has been already configured" } diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/common.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/common.kt index c2e39d5dc..d9ef1370d 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/common.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/modules/common.kt @@ -52,8 +52,8 @@ internal fun ModuleTemplateBuilder.dependencies(): String { * @param name The name of the field. * @param configure A function to configure the field. */ -fun TypeSpec.Builder.createConstant(type: TypeName, name: String, isPublic: Boolean, - configure: FieldSpec.Builder.() -> Unit +inline fun TypeSpec.Builder.createConstant(type: TypeName, name: String, isPublic: Boolean, + crossinline configure: FieldSpec.Builder.() -> Unit ) { val accessMod = if (isPublic) Modifier.PUBLIC else Modifier.PRIVATE FieldSpec.builder(type, name, accessMod, Modifier.STATIC, Modifier.FINAL) @@ -68,8 +68,8 @@ fun TypeSpec.Builder.createConstant(type: TypeName, name: String, isPublic: Bool * @param name The name of the field. * @param configure A function to configure the field. */ -fun TypeSpec.Builder.createField(type: TypeName, name: String, vararg modifiers: Modifier, - configure: FieldSpec.Builder.() -> Unit +inline fun TypeSpec.Builder.createField(type: TypeName, name: String, vararg modifiers: Modifier, + crossinline configure: FieldSpec.Builder.() -> Unit ) { FieldSpec.builder(type, name, *modifiers).apply(configure).build().also { addField(it) } } @@ -79,7 +79,7 @@ fun TypeSpec.Builder.createField(type: TypeName, name: String, vararg modifiers: * * @param configure A function to configure the method. */ -fun TypeSpec.Builder.createConstructor(configure: MethodSpec.Builder.() -> Unit) { +inline fun TypeSpec.Builder.createConstructor(crossinline configure: MethodSpec.Builder.() -> Unit) { MethodSpec.constructorBuilder().apply(configure).build().also { addMethod(it) } } @@ -89,6 +89,6 @@ fun TypeSpec.Builder.createConstructor(configure: MethodSpec.Builder.() -> Unit) * @param name The name of the method. * @param configure A function to configure the method. */ -fun TypeSpec.Builder.createMethod(name: String, configure: MethodSpec.Builder.() -> Unit) { +inline fun TypeSpec.Builder.createMethod(name: String, crossinline configure: MethodSpec.Builder.() -> Unit) { MethodSpec.methodBuilder(name).apply(configure).build().also { addMethod(it) } } \ No newline at end of file diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/templateBuilders.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/templateBuilders.kt index 6446ae1cb..f543b4781 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/templateBuilders.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/templateBuilders.kt @@ -29,7 +29,10 @@ import com.itsaky.androidide.templates.TemplateRecipeResult sealed class PrePostRecipeTemplateBuilder : TemplateBuilder() { + @PublishedApi internal var preRecipe: TemplateRecipeConfigurator = {} + + @PublishedApi internal var postRecipe: TemplateRecipeFinalizer = {} private var _recipe: TemplateRecipe? = null @@ -56,7 +59,10 @@ sealed class PrePostRecipeTemplateBuilder : sealed class ExecutorDataTemplateBuilder : PrePostRecipeTemplateBuilder() { + @PublishedApi internal var _executor: RecipeExecutor? = null + + @PublishedApi internal var _data: D? = null val executor: RecipeExecutor diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/AndroidModuleResManager.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/AndroidModuleResManager.kt index 40c044343..ef41b38f1 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/AndroidModuleResManager.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/AndroidModuleResManager.kt @@ -86,12 +86,12 @@ class AndroidModuleResManager { * @param srcSet The source set. * @param config The configuration for the resource type. */ - fun AndroidModuleTemplateBuilder.createValuesResource(name: String, + inline fun AndroidModuleTemplateBuilder.createValuesResource(name: String, type: ResourceType = VALUES, srcSet: SrcSet = Main, config: ConfigDescription = ConfigDescription(), selfClose: Boolean = false, - configure: XmlBuilder.() -> Unit + crossinline configure: XmlBuilder.() -> Unit ) { return createXmlResource(name, type, srcSet, config) { createElement(name = "resources", closeStartTag = true, @@ -107,11 +107,11 @@ class AndroidModuleResManager { * @param srcSet The source set. * @param config The configuration for the resource type. */ - fun AndroidModuleTemplateBuilder.createXmlResource(name: String, + inline fun AndroidModuleTemplateBuilder.createXmlResource(name: String, type: ResourceType, srcSet: SrcSet = SrcSet.Main, config: ConfigDescription = ConfigDescription(), - configure: XmlBuilder.() -> Unit = {} + crossinline configure: XmlBuilder.() -> Unit = {} ) { val file = File(resDir(type, srcSet, config), "${name}.xml") val builder = IndentedXmlBuilder().apply(configure) @@ -146,11 +146,11 @@ class AndroidModuleResManager { * @param config The configuration for the resource type. * @param source Function which returns the source code for the resource. */ - fun AndroidModuleTemplateBuilder.writeXmlResource(name: String, + inline fun AndroidModuleTemplateBuilder.writeXmlResource(name: String, type: ResourceType, srcSet: SrcSet = SrcSet.Main, config: ConfigDescription = ConfigDescription(), - source: () -> String = { "" } + crossinline source: () -> String = { "" } ) { writeXmlResource(name, type, srcSet, config, source()) } diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/SourceWriter.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/SourceWriter.kt index 2f33ba339..fed7a44fc 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/SourceWriter.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/SourceWriter.kt @@ -91,8 +91,8 @@ class SourceWriter { * @param className The name of the class. * @param configure Function to configure the [TypeSpec.Builder]. */ - fun ModuleTemplateBuilder.createClass(packageName: String, className: String, - configure: TypeSpec.Builder.() -> Unit + inline fun ModuleTemplateBuilder.createClass(packageName: String, className: String, + crossinline configure: TypeSpec.Builder.() -> Unit ) { return createJavaFile(packageName, className, ClassType(), configure) } @@ -104,8 +104,8 @@ class SourceWriter { * @param className The name of the class. * @param configure Function to configure the [TypeSpec.Builder]. */ - fun ModuleTemplateBuilder.createEnum(packageName: String, className: String, - configure: TypeSpec.Builder.() -> Unit + inline fun ModuleTemplateBuilder.createEnum(packageName: String, className: String, + crossinline configure: TypeSpec.Builder.() -> Unit ) { return createJavaFile(packageName, className, EnumType(), configure) } @@ -117,8 +117,8 @@ class SourceWriter { * @param className The name of the interface. * @param configure Function to configure the [TypeSpec.Builder]. */ - fun ModuleTemplateBuilder.createInterface(packageName: String, className: String, - configure: TypeSpec.Builder.() -> Unit + inline fun ModuleTemplateBuilder.createInterface(packageName: String, className: String, + crossinline configure: TypeSpec.Builder.() -> Unit ) { return createJavaFile(packageName, className, InterfaceType(), configure) } @@ -130,8 +130,8 @@ class SourceWriter { * @param className The name of the interface. * @param configure Function to configure the [TypeSpec.Builder]. */ - fun ModuleTemplateBuilder.createAnnotation(packageName: String, className: String, - configure: TypeSpec.Builder.() -> Unit + inline fun ModuleTemplateBuilder.createAnnotation(packageName: String, className: String, + crossinline configure: TypeSpec.Builder.() -> Unit ) { return createJavaFile(packageName, className, AnnotationType(), configure) } @@ -144,8 +144,8 @@ class SourceWriter { * @param type The type of the class. * @param configure Function to configure the [TypeSpec.Builder]. */ - fun ModuleTemplateBuilder.createJavaFile(packageName: String, className: String, type: SourceType, - configure: TypeSpec.Builder.() -> Unit + inline fun ModuleTemplateBuilder.createJavaFile(packageName: String, className: String, type: SourceType, + crossinline configure: TypeSpec.Builder.() -> Unit ) { val klass = ClassName.get(packageName, className) val builder = type.builder(klass).apply(configure).also { @@ -191,8 +191,8 @@ class SourceWriter { * @param className The name of the class. * @param source A function which returns the source code for the file. */ - fun ModuleTemplateBuilder.writeJavaSrc(packageName: String, className: String, - srcSet: SrcSet = SrcSet.Main, source: () -> String + inline fun ModuleTemplateBuilder.writeJavaSrc(packageName: String, className: String, + srcSet: SrcSet = SrcSet.Main, crossinline source: () -> String ) { writeJavaSrc(packageName, className, srcSet, source()) } @@ -204,13 +204,14 @@ class SourceWriter { * @param className The name of the class. * @param source A function which returns the source code for the file. */ - fun ModuleTemplateBuilder.writeKtSrc(packageName: String, className: String, - srcSet: SrcSet = SrcSet.Main, source: () -> String + inline fun ModuleTemplateBuilder.writeKtSrc(packageName: String, className: String, + srcSet: SrcSet = SrcSet.Main, crossinline source: () -> String ) { writeKtSrc(packageName, className, srcSet, source()) } - private fun ModuleTemplateBuilder.write(file: JavaFile) { + @PublishedApi + internal fun ModuleTemplateBuilder.write(file: JavaFile) { file.writeTo(mainJavaSrc()) } } diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt index a18257844..904ed1474 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/utils.kt @@ -32,7 +32,7 @@ internal fun BaseTemplateData.optonallyKts(file: String): String { return if (useKts) "${file}.kts" else file } -internal fun ProjectTemplateData.moduleNameToDir(name: String): File { +fun ProjectTemplateData.moduleNameToDir(name: String): File { return File(this.projectDir, moduleNameToDirName(name).replace(':', '/').trim { it == '/' }) } diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/xmlBuilder.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/xmlBuilder.kt index 4a9ec2285..de81d5526 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/xmlBuilder.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/util/xmlBuilder.kt @@ -25,7 +25,7 @@ import org.eclipse.lemminx.dom.builder.XmlBuilder * The [configure] function is used to configure everything inside the element and then * the element is automatically closed. */ -fun XmlBuilder.createElement(name: String, closeStartTag: Boolean = false, selfClose: Boolean = false, configure: XmlBuilder.() -> Unit) { +inline fun XmlBuilder.createElement(name: String, closeStartTag: Boolean = false, selfClose: Boolean = false, crossinline configure: XmlBuilder.() -> Unit) { startElement(name, closeStartTag) configure() if (selfClose) { diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt index 17e3f7229..aecc90b53 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt @@ -349,19 +349,19 @@ class EnumParameterBuilder> : TextFieldParameterBuilder() { /** * Create a new [StringParameter] for accepting string input. */ -fun stringParameter(block: StringParameterBuilder.() -> Unit +inline fun stringParameter(crossinline block: StringParameterBuilder.() -> Unit ): StringParameter = StringParameterBuilder().apply(block).build() /** * Create a new [BooleanParameter] for accepting boolean input. */ -fun booleanParameter(block: BooleanParameterBuilder.() -> Unit +inline fun booleanParameter(crossinline block: BooleanParameterBuilder.() -> Unit ): BooleanParameter = BooleanParameterBuilder().apply(block).build() -fun > enumParameter(block: EnumParameterBuilder.() -> Unit +inline fun > enumParameter(crossinline block: EnumParameterBuilder.() -> Unit ): EnumParameter = EnumParameterBuilder().apply(block).build() -fun projectNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = +inline fun projectNameParameter(crossinline configure: StringParameterBuilder.() -> Unit = {}) = stringParameter { name = string.project_app_name default = "My Application" @@ -371,7 +371,7 @@ fun projectNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = configure() } -fun packageNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = +inline fun packageNameParameter(crossinline configure: StringParameterBuilder.() -> Unit = {}) = stringParameter { name = string.package_name default = "com.example.myapplication" @@ -381,8 +381,8 @@ fun packageNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = configure() } -fun projectLanguageParameter( - configure: EnumParameterBuilder.() -> Unit = {} +inline fun projectLanguageParameter( + crossinline configure: EnumParameterBuilder.() -> Unit = {} ) = enumParameter { name = string.wizard_language default = Java @@ -395,7 +395,7 @@ fun projectLanguageParameter( configure() } -fun minSdkParameter(configure: EnumParameterBuilder.() -> Unit = {}) = +inline fun minSdkParameter(crossinline configure: EnumParameterBuilder.() -> Unit = {}) = enumParameter { name = string.minimum_sdk default = Sdk.Lollipop @@ -405,7 +405,7 @@ fun minSdkParameter(configure: EnumParameterBuilder.() -> Unit = {}) = configure() } -fun useKtsParameter(configure: BooleanParameterBuilder.() -> Unit = {}) = +inline fun useKtsParameter(crossinline configure: BooleanParameterBuilder.() -> Unit = {}) = booleanParameter { name = string.msg_use_kts default = true diff --git a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt index b51dc146f..b233fd8d8 100644 --- a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt +++ b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt @@ -206,9 +206,9 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider { }.root } - private fun TextFieldParameter<*>.configureTextField(context: Context, + private inline fun TextFieldParameter<*>.configureTextField(context: Context, root: TextInputLayout, - onTextChanged: (String) -> Unit = {} + crossinline onTextChanged: (String) -> Unit = {} ) { root.setHint(name) resetStartAndEndIcons(context, root) diff --git a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base.kt b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base.kt index 1f321c538..fa495e17e 100644 --- a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base.kt +++ b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base.kt @@ -54,14 +54,14 @@ internal fun AndroidModuleTemplateBuilder.templateAsset(name: String, return "templates/${name}/${path}" } -internal fun baseProjectImpl( +internal inline fun baseProjectImpl( projectName: StringParameter = projectNameParameter(), packageName: StringParameter = packageNameParameter(), useKts: BooleanParameter = useKtsParameter(), minSdk: EnumParameter = minSdkParameter(), language: EnumParameter = projectLanguageParameter(), projectVersionData: ProjectVersionData = ProjectVersionData(), - block: ProjectTemplateBuilder.() -> Unit + crossinline block: ProjectTemplateBuilder.() -> Unit ): ProjectTemplate = baseProject(projectName = projectName, packageName = packageName, useKts = useKts, minSdk = minSdk, language = language, diff --git a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/recipe.kt b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/recipe.kt index b751493e9..9b2f37773 100644 --- a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/recipe.kt +++ b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/recipe.kt @@ -26,16 +26,16 @@ import com.itsaky.androidide.templates.base.AndroidModuleTemplateBuilder import com.itsaky.androidide.templates.base.ExecutorDataTemplateBuilder import com.itsaky.androidide.templates.base.ProjectTemplateBuilder -internal fun ExecutorDataTemplateBuilder<*, *>.createRecipe( - action: RecipeExecutor.() -> R +internal inline fun ExecutorDataTemplateBuilder<*, *>.createRecipe( + crossinline action: RecipeExecutor.() -> R ): TemplateRecipe { return TemplateRecipe { return@TemplateRecipe executor.run(action) } } -internal fun AndroidModuleTemplateBuilder.createRecipe( - action: RecipeExecutor.() -> Unit +internal inline fun AndroidModuleTemplateBuilder.createRecipe( + crossinline action: RecipeExecutor.() -> Unit ): TemplateRecipe { return TemplateRecipe { executor.run(action) @@ -43,8 +43,8 @@ internal fun AndroidModuleTemplateBuilder.createRecipe( } } -internal fun ProjectTemplateBuilder.createRecipe( - action: RecipeExecutor.() -> Unit +internal inline fun ProjectTemplateBuilder.createRecipe( + crossinline action: RecipeExecutor.() -> Unit ): TemplateRecipe { return TemplateRecipe { executor.run(action) diff --git a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/src.kt b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/src.kt index b4e943b7c..66542d1cb 100644 --- a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/src.kt +++ b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/base/src.kt @@ -23,8 +23,8 @@ import com.itsaky.androidide.templates.base.modules.android.ManifestActivity import com.itsaky.androidide.templates.base.util.SourceWriter import com.itsaky.androidide.templates.base.util.withXmlDecl -internal fun AndroidModuleTemplateBuilder.writeMainActivity( - writer: SourceWriter, ktSrc: () -> String, javaSrc: () -> String +internal inline fun AndroidModuleTemplateBuilder.writeMainActivity( + writer: SourceWriter, crossinline ktSrc: () -> String, crossinline javaSrc: () -> String ) { val className = "MainActivity" writer.apply {