๐Ÿ’ซ A Gradle Plugin to generate your networking code from Swagger

Overview

Swagger Gradle Codegen

Plugin Portal Pre Merge Checks License Join the chat at https://kotlinlang.slack.com Twitter

A Gradle plugin to generate networking code from a Swagger spec file.

This plugin wraps swagger-codegen, and exposes a configurable generateSwagger gradle task that you can plug inside your gradle build/workflows.

Getting Started

Swagger Gradle Codegen is distributed through Gradle Plugin Portal. To use it you need to add the following dependency to your gradle files. Please note that those code needs to be added the gradle file of the module where you want to generate the code (not the top level build.gradle[.kts] file).

If you're using the Groovy Gradle files:

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
    }

    dependencies {
        classpath "com.yelp.codegen:plugin:<latest_version>"
    }
}

apply plugin: "com.yelp.codegen.plugin"

generateSwagger {
    platform = "kotlin"
    packageName = "com.yelp.codegen.samples"
    inputFile = file("./sample_specs.json")
    outputDir = file("./src/main/java/")
}

If you're using the Kotlin Gradle files:

plugins {
    id("com.yelp.codegen.plugin") version "<latest_version>"
}

generateSwagger {
    platform.set("kotlin")
    packageName.set("com.yelp.codegen.samples")
    inputFile.set(file("./sample_specs.json"))
    outputDir.set(project.layout.buildDirectory.dir("./src/main/java/"))
}

Please note that the generateSwagger { } block is needed in order to let the plugin work.

Once you setup the plugin correctly, you can call the :generateSwagger gradle task, that will run the code generation with the configuration you provided.

Requirements

In order to run this gradle plugin you need to fulfill the following requirements:

  • Gradle 6.x - This plugin uses Gradle 6 features, and you will need to setup your Gradle wrapper to use 6.8 or more.
  • Java 8+

Supported platforms

The Swagger Gradle Codegen is designed to support multiple platforms. For every platform, we provide templates that are tested and generates opinionated code.

Here the list of the supported platforms:

Platform Description
kotlin Generates Kotlin code and Retrofit interfaces, with RxJava2 for async calls and Moshi for serialization
kotlin-coroutines Generates Kotlin code and Retrofit interfaces, with Kotlin Coroutines for async calls and Moshi for serialization

We're looking forward to more platforms to support in the future. Contributions are more than welcome.

Examples

You can find some examples in this repository to help you set up your generator environment.

  • samples/groovy-android Contains an example of an Android Library configured with a build.gradle file, using the classical Gradle/Groovy as scripting language.

  • samples/kotlin-android Contains an example of an Android Library configured with a build.gradle.kts file, using Kotlin as scripting language.

  • samples/kotlin-coroutines Contains an example of an Android Library configured to output Kotlin Coroutines capable code.

  • samples/junit-tests This sample contains specs used to test edge cases and scenarios that have been reported in the issue tracker or that are worth testing. Tests are executed using moshi-codegen. It does also contains all the generated code inside the /scr/main/java folder. You can use this example to see how the generated code will look like (like here).

How the generated code will look like

Here you can find some examples of how the generated code will look like in your project.

Configuration

To configure the generator, please use the generateSwagger { } block. Here an example of this block with all the properties.

generateSwagger {
    platform.set("kotlin")
    packageName.set("com.yelp.codegen.integrations")
    specName.set("integration")
    specVersion.set("1.0.0")
    inputFile.set(file("../sample_specs.json"))
    outputDir.set(project.layout.buildDirectory.dir("./src/main/java/"))
    features {
        headersToRemove.add("Accept-Language")
    }
}

And here a table with all the properties and their default values:

Property Description Default
inputFile Defines the path to the Swagger spec file REQUIRED
platform Defines the platform/templates that will be used. See Supported platforms for a list of them. "kotlin"
packageName Defines the fully qualified package name that will be used as root when generating the code. "com.codegen.default"
specName Defines the name of the service that is going to be built. "defaultname"
specVersion Defines the version of the spec that is going to be used. If not provided, the version will be read from the specfile. If version is missing will default to "0.0.0"
outputDir Defines the output root folder for the generated files. $buildDir/gen
extraFiles Defines a folder with extra files that will be copied over after the generation (e.g. util classes or overrides). not set by default

Please note that all those properties can be configured with command line flags that mirrors 1:1 the property name. E.g.:

./gradlew generateSwagger --inputFile=./sample/specs.json

Extra Features

You can use the features { } block to specify customization or enabled/disable specific features for your generator.

Here a list of all the supported features:

Feature Description Command line
headersToRemove List of headers that needs to be ignored for every endpoints. The headers in this list will be dropped and not generated as parameters for the endpoints. -ignoreheaders=

Building

To contribute or to start developing the Swagger Codegen Plugin, you need to set up your environment.

Make sure you have:

  • Python (needed for pre-commit hook)
  • Java/Kotlin (needed for compiling the plugin code)

We also recommend you set up:

  • aactivator To correctly manage your venv connected to this project
  • IntelliJ IDEA Either the Community or the Ultimate edition are great to contribute to the plugin.

Before starting developing, please run:

./gradlew installHooks

This will take care of installing the pre-commit hooks to keep a consistent style in the codebase.

While developing, you can build, run pre-commits, checks & tests on the plugin using:

./gradlew preMerge

Make sure your tests are all green โœ… locally before submitting PRs.

NOTE: If you don't have the Android SDK you can skip the Android related tasks by setting SKIP_ANDROID enviromental variable (tests will be run on the CI anyway).

Contributing/Support

Support for this project is offered in the #swagger-gradle-codegen channel on the Kotlinlang slack (request an invite here).

We're looking for contributors! Feel free to open issues/pull requests to help me improve this project.

If you found a new issue related to incompatible Swagger specs, please attach also the spec file to help investigate the issue.

License ๐Ÿ“„

This project is licensed under the Apache 2.0 License - see the License file for details

Comments
  • Unable to load class 'org.gradle.kotlin.dsl.precompile.v1.PrecompiledProjectScript'.

    Unable to load class 'org.gradle.kotlin.dsl.precompile.v1.PrecompiledProjectScript'.

    Hi. made a new project, gradle version 3.5.3 (<<< EDIT: actually it is 5.4.1) added in the the module gradle file:

    buildscript {
        repositories {
            maven { url "https://plugins.gradle.org/m2/" }
        }
        dependencies {
            classpath "com.yelp.codegen:plugin:1.3.0"
        }
    }
    apply plugin: "com.yelp.codegen.plugin"
    generateSwagger {
        platform = "kotlin"
        packageName = "com.yelp.codegen.samples"
        inputFile = file("./sample_specs.json")
        outputDir = file("./src/main/java/")
    }
    

    but I get this error: Unable to load class 'org.gradle.kotlin.dsl.precompile.v1.PrecompiledProjectScript'.

    can somebdoy help me ? thx!

    question 
    opened by mariuspena 17
  • Make the root project a composite build

    Make the root project a composite build

    One more step towards lazy task configuration (https://github.com/Yelp/swagger-gradle-codegen/pull/69)

    This pull requests ~moves the samples to a composite build~ makes the rootProject a composite build that will treat the plugin as an included build.

    This allows to do dependency substitution on the plugin artifact and therefore have the sample code in sync with the plugin code from the repo (without having to publish on ~mavenCentral~ mavenLocal or jcenter first).

    ~If you're working on the samples, you should open swagger-gradle-codegen/sample in your favorite IDE.~ Opening the root project in intelliJ is still the recommended way to work on the project as it will include the necessary projects.

    infra 
    opened by martinbonnin 11
  • Sample doesn't works

    Sample doesn't works

    I use the sample project android kotlin, but i have an error when i run generateSwagger

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':app:generateSwagger'.
    > com/yelp/codegen/utils/InlineModelResolver
    

    and with a swagger v3, i have a diffrent result

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':app:generateSwagger'.
    > missing swagger input or config!
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    question 
    opened by zelyon 10
  • Applying plugin attempts to read configuration before it is initialized

    Applying plugin attempts to read configuration before it is initialized

    Using the standard example from the README:

    apply plugin: "com.yelp.codegen.plugin"
    
    generateSwagger {
        platform = "kotlin"
        packageName = "com.yelp.codegen.samples"
        inputFile = file("./sample_specs.json")
        outputDir = file("./src/main/java/")
    }
    

    The plugin fails to apply:

    * What went wrong:
    An exception occurred applying plugin request [id: 'com.yelp.codegen.plugin', version: '1.0.0']
    > Failed to apply plugin [id 'com.yelp.codegen.plugin']
       > Could not create task ':lib-models:generateSwagger'.
          > lateinit property inputFile has not been initialized
    
    Stack trace

    org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'com.yelp.codegen.plugin', version: '1.0.0']
            at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:247)
            at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:229)
            at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:148)
            at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:186)
            at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
            at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
            at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
            at org.gradle.configuration.project.BuildScriptProcessor$1.run(BuildScriptProcessor.java:44)
            at org.gradle.internal.Factories$1.create(Factories.java:25)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:200)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
            at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:41)
            at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
            at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:106)
            at org.gradle.internal.Factories$1.create(Factories.java:25)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:226)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.access$700(DefaultProjectStateRegistry.java:143)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl$1.create(DefaultProjectStateRegistry.java:215)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withoutLocks(DefaultWorkerLeaseService.java:254)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withoutLocks(StopShieldingWorkerLeaseService.java:50)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:211)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:95)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:67)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
            at org.gradle.api.internal.project.DefaultProjectAccessListener.evaluateProjectAndDiscoverTasks(DefaultProjectAccessListener.java:32)
            at org.gradle.api.internal.project.DefaultProjectAccessListener.beforeResolvingProjectDependency(DefaultProjectAccessListener.java:28)
            at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency.beforeResolved(DefaultProjectDependency.java:101)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.ProjectIvyDependencyDescriptorFactory.createDependencyDescriptor(ProjectIvyDependencyDescriptorFactory.java:41)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultDependencyDescriptorFactory.createDependencyDescriptor(DefaultDependencyDescriptorFactory.java:46)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultLocalConfigurationMetadataBuilder.addDependencies(DefaultLocalConfigurationMetadataBuilder.java:58)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultLocalConfigurationMetadataBuilder.addDependenciesAndExcludes(DefaultLocalConfigurationMetadataBuilder.java:48)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.realizeDependencies(DefaultLocalComponentMetadata.java:499)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.addDefinedExcludes(DefaultLocalComponentMetadata.java:456)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.getExcludes(DefaultLocalComponentMetadata.java:447)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.getModuleResolutionFilter(NodeState.java:384)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitOutgoingDependencies(NodeState.java:192)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:169)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:131)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:121)
            at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:171)
            at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:86)
            at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$7.run(DefaultConfiguration.java:580)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:571)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$600(DefaultConfiguration.java:135)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$6.run(DefaultConfiguration.java:551)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$SafeExclusiveLockImpl.withLock(DefaultProjectStateRegistry.java:244)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveExclusively(DefaultConfiguration.java:547)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:542)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$2200(DefaultConfiguration.java:135)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getSelectedArtifacts(DefaultConfiguration.java:1158)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:1147)
            at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:72)
            at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:384)
            at com.google.common.collect.ImmutableCollection$ArrayBasedBuilder.addAll(ImmutableCollection.java:476)
            at com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:518)
            at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:80)
            at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:54)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.getResDirectories(Android25ProjectHandler.kt:109)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.getResDirectories(Android25ProjectHandler.kt:20)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin$applyExperimental$4.invoke(AndroidSubplugin.kt:207)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin$applyExperimental$4.invoke(AndroidSubplugin.kt:78)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler$sam$org_gradle_api_Action$0.execute(Android25ProjectHandler.kt)
            at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.forEachVariant(Android25ProjectHandler.kt:28)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.applyExperimental(AndroidSubplugin.kt:205)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.apply(AndroidSubplugin.kt:110)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.apply(AndroidSubplugin.kt:78)
            at org.jetbrains.kotlin.gradle.plugin.SubpluginEnvironment.addSubpluginOptions(SubpluginEnvironment.kt:85)
            at org.jetbrains.kotlin.gradle.plugin.SubpluginEnvironment.addSubpluginOptions(SubpluginEnvironment.kt:50)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.applySubplugins(KotlinPlugin.kt:753)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.access$applySubplugins(KotlinPlugin.kt:616)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2$3.invoke(KotlinPlugin.kt:692)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2$3.invoke(KotlinPlugin.kt:616)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler$sam$org_gradle_api_Action$0.execute(Android25ProjectHandler.kt)
            at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.forEachVariant(Android25ProjectHandler.kt:28)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:690)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:616)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1$1.run(DefaultListenerBuildOperationDecorator.java:150)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:147)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:144)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
            at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
            at com.sun.proxy.$Proxy25.afterEvaluate(Unknown Source)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:190)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:187)
            at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1419)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:196)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:111)
            at org.gradle.internal.Factories$1.create(Factories.java:25)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:226)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.access$700(DefaultProjectStateRegistry.java:143)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl$1.create(DefaultProjectStateRegistry.java:215)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withoutLocks(DefaultWorkerLeaseService.java:254)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withoutLocks(StopShieldingWorkerLeaseService.java:50)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:211)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:95)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:67)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
            at org.gradle.api.internal.project.DefaultProjectAccessListener.evaluateProjectAndDiscoverTasks(DefaultProjectAccessListener.java:32)
            at org.gradle.api.internal.project.DefaultProjectAccessListener.beforeResolvingProjectDependency(DefaultProjectAccessListener.java:28)
            at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency.beforeResolved(DefaultProjectDependency.java:101)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.ProjectIvyDependencyDescriptorFactory.createDependencyDescriptor(ProjectIvyDependencyDescriptorFactory.java:41)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultDependencyDescriptorFactory.createDependencyDescriptor(DefaultDependencyDescriptorFactory.java:46)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultLocalConfigurationMetadataBuilder.addDependencies(DefaultLocalConfigurationMetadataBuilder.java:58)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultLocalConfigurationMetadataBuilder.addDependenciesAndExcludes(DefaultLocalConfigurationMetadataBuilder.java:48)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.realizeDependencies(DefaultLocalComponentMetadata.java:499)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.addDefinedExcludes(DefaultLocalComponentMetadata.java:456)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.getExcludes(DefaultLocalComponentMetadata.java:447)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.getModuleResolutionFilter(NodeState.java:384)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitOutgoingDependencies(NodeState.java:192)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:169)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:131)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:121)
            at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:171)
            at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:86)
            at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$7.run(DefaultConfiguration.java:580)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:571)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$600(DefaultConfiguration.java:135)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$6.run(DefaultConfiguration.java:551)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$SafeExclusiveLockImpl.withLock(DefaultProjectStateRegistry.java:244)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveExclusively(DefaultConfiguration.java:547)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:542)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$2200(DefaultConfiguration.java:135)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getSelectedArtifacts(DefaultConfiguration.java:1158)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:1147)
            at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:72)
            at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:384)
            at com.google.common.collect.ImmutableCollection$ArrayBasedBuilder.addAll(ImmutableCollection.java:476)
            at com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:518)
            at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:80)
            at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:54)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.getResDirectories(Android25ProjectHandler.kt:109)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.getResDirectories(Android25ProjectHandler.kt:20)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin$applyExperimental$4.invoke(AndroidSubplugin.kt:207)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin$applyExperimental$4.invoke(AndroidSubplugin.kt:78)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler$sam$org_gradle_api_Action$0.execute(Android25ProjectHandler.kt)
            at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.forEachVariant(Android25ProjectHandler.kt:28)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.applyExperimental(AndroidSubplugin.kt:205)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.apply(AndroidSubplugin.kt:110)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.apply(AndroidSubplugin.kt:78)
            at org.jetbrains.kotlin.gradle.plugin.SubpluginEnvironment.addSubpluginOptions(SubpluginEnvironment.kt:85)
            at org.jetbrains.kotlin.gradle.plugin.SubpluginEnvironment.addSubpluginOptions(SubpluginEnvironment.kt:50)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.applySubplugins(KotlinPlugin.kt:753)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.access$applySubplugins(KotlinPlugin.kt:616)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2$3.invoke(KotlinPlugin.kt:692)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2$3.invoke(KotlinPlugin.kt:616)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler$sam$org_gradle_api_Action$0.execute(Android25ProjectHandler.kt)
            at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.forEachVariant(Android25ProjectHandler.kt:28)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:690)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:616)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1$1.run(DefaultListenerBuildOperationDecorator.java:150)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:147)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:144)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
            at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
            at com.sun.proxy.$Proxy25.afterEvaluate(Unknown Source)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:190)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:187)
            at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1419)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:196)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:111)
            at org.gradle.internal.Factories$1.create(Factories.java:25)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:226)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.access$700(DefaultProjectStateRegistry.java:143)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl$1.create(DefaultProjectStateRegistry.java:215)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withoutLocks(DefaultWorkerLeaseService.java:254)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withoutLocks(StopShieldingWorkerLeaseService.java:50)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:211)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:95)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:67)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
            at org.gradle.api.internal.project.DefaultProjectAccessListener.evaluateProjectAndDiscoverTasks(DefaultProjectAccessListener.java:32)
            at org.gradle.api.internal.project.DefaultProjectAccessListener.beforeResolvingProjectDependency(DefaultProjectAccessListener.java:28)
            at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency.beforeResolved(DefaultProjectDependency.java:101)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.ProjectIvyDependencyDescriptorFactory.createDependencyDescriptor(ProjectIvyDependencyDescriptorFactory.java:41)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultDependencyDescriptorFactory.createDependencyDescriptor(DefaultDependencyDescriptorFactory.java:46)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultLocalConfigurationMetadataBuilder.addDependencies(DefaultLocalConfigurationMetadataBuilder.java:58)
            at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.dependencies.DefaultLocalConfigurationMetadataBuilder.addDependenciesAndExcludes(DefaultLocalConfigurationMetadataBuilder.java:48)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.realizeDependencies(DefaultLocalComponentMetadata.java:499)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.addDefinedExcludes(DefaultLocalComponentMetadata.java:456)
            at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata$DefaultLocalConfigurationMetadata.getExcludes(DefaultLocalComponentMetadata.java:447)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.getModuleResolutionFilter(NodeState.java:384)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitOutgoingDependencies(NodeState.java:192)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:169)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:131)
            at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:121)
            at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:171)
            at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:86)
            at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$7.run(DefaultConfiguration.java:580)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:571)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$600(DefaultConfiguration.java:135)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$6.run(DefaultConfiguration.java:551)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$SafeExclusiveLockImpl.withLock(DefaultProjectStateRegistry.java:244)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveExclusively(DefaultConfiguration.java:547)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:542)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$2200(DefaultConfiguration.java:135)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getSelectedArtifacts(DefaultConfiguration.java:1158)
            at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:1147)
            at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:72)
            at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:384)
            at com.google.common.collect.ImmutableCollection$ArrayBasedBuilder.addAll(ImmutableCollection.java:476)
            at com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:518)
            at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:80)
            at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:54)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.getResDirectories(Android25ProjectHandler.kt:109)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.getResDirectories(Android25ProjectHandler.kt:20)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin$applyExperimental$4.invoke(AndroidSubplugin.kt:207)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin$applyExperimental$4.invoke(AndroidSubplugin.kt:78)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler$sam$org_gradle_api_Action$0.execute(Android25ProjectHandler.kt)
            at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.forEachVariant(Android25ProjectHandler.kt:26)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.applyExperimental(AndroidSubplugin.kt:205)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.apply(AndroidSubplugin.kt:110)
            at org.jetbrains.kotlin.gradle.internal.AndroidSubplugin.apply(AndroidSubplugin.kt:78)
            at org.jetbrains.kotlin.gradle.plugin.SubpluginEnvironment.addSubpluginOptions(SubpluginEnvironment.kt:85)
            at org.jetbrains.kotlin.gradle.plugin.SubpluginEnvironment.addSubpluginOptions(SubpluginEnvironment.kt:50)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.applySubplugins(KotlinPlugin.kt:753)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler.access$applySubplugins(KotlinPlugin.kt:616)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2$3.invoke(KotlinPlugin.kt:692)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2$3.invoke(KotlinPlugin.kt:616)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler$sam$org_gradle_api_Action$0.execute(Android25ProjectHandler.kt)
            at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
            at org.jetbrains.kotlin.gradle.plugin.Android25ProjectHandler.forEachVariant(Android25ProjectHandler.kt:26)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:690)
            at org.jetbrains.kotlin.gradle.plugin.AbstractAndroidProjectHandler$handleProject$2.execute(KotlinPlugin.kt:616)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1$1.run(DefaultListenerBuildOperationDecorator.java:150)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:147)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:144)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
            at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
            at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
            at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
            at com.sun.proxy.$Proxy25.afterEvaluate(Unknown Source)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:190)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:187)
            at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1419)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:196)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:111)
            at org.gradle.internal.Factories$1.create(Factories.java:25)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:226)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:220)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:95)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:67)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
            at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
            at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
            at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:41)
            at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:302)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:210)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
            at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:134)
            at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:58)
            at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:55)
            at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
            at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:75)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
            at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
            at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:75)
            at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:55)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:58)
            at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
            at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:49)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:46)
            at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
            at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
            at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
            at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
            at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
            at org.gradle.util.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id 'com.yelp.codegen.plugin']
            at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:163)
            at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:133)
            at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$3.run(DefaultPluginRequestApplicator.java:151)
            at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:225)
            ... 445 more
    Caused by: org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreationException: Could not create task ':lib-models:generateSwagger'.
            at org.gradle.api.internal.tasks.DefaultTaskContainer.taskCreationException(DefaultTaskContainer.java:703)
            at org.gradle.api.internal.tasks.DefaultTaskContainer.access$600(DefaultTaskContainer.java:78)
            at org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreatingProvider.domainObjectCreationException(DefaultTaskContainer.java:695)
            at org.gradle.api.internal.DefaultNamedDomainObjectCollection$AbstractDomainObjectCreatingProvider.tryCreate(DefaultNamedDomainObjectCollection.java:931)
            at org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreatingProvider.access$1301(DefaultTaskContainer.java:641)
            at org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreatingProvider$1.run(DefaultTaskContainer.java:668)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreatingProvider.tryCreate(DefaultTaskContainer.java:664)
            at org.gradle.api.internal.DefaultNamedDomainObjectCollection$AbstractDomainObjectCreatingProvider.getOrNull(DefaultNamedDomainObjectCollection.java:912)
            at org.gradle.api.internal.provider.AbstractReadOnlyProvider.get(AbstractReadOnlyProvider.java:27)
            at org.gradle.api.internal.DefaultNamedDomainObjectCollection$AbstractDomainObjectCreatingProvider.get(DefaultNamedDomainObjectCollection.java:898)
            at org.gradle.api.internal.DefaultDomainObjectCollection.addLater(DefaultDomainObjectCollection.java:271)
            at org.gradle.api.internal.DefaultNamedDomainObjectCollection.addLater(DefaultNamedDomainObjectCollection.java:145)
            at org.gradle.api.internal.tasks.DefaultTaskContainer.addLaterInternal(DefaultTaskContainer.java:751)
            at org.gradle.api.internal.tasks.DefaultTaskContainer.access$900(DefaultTaskContainer.java:78)
            at org.gradle.api.internal.tasks.DefaultTaskContainer$3.call(DefaultTaskContainer.java:414)
            at org.gradle.api.internal.tasks.DefaultTaskContainer$3.call(DefaultTaskContainer.java:401)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
            at org.gradle.api.internal.tasks.DefaultTaskContainer.registerTask(DefaultTaskContainer.java:401)
            at org.gradle.api.internal.tasks.DefaultTaskContainer.register(DefaultTaskContainer.java:373)
            at org.gradle.kotlin.dsl.TaskContainerScope.register(TaskContainerExtensions.kt)
            at com.yelp.codegen.Plugin_gradle.<init>(plugin.gradle.kts:23)
            at com.yelp.codegen.PluginPlugin.apply(PluginPlugin.kt:14)
            at com.yelp.codegen.PluginPlugin.apply(PluginPlugin.kt:8)
            at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
            at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
            at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
            at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
            at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:267)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
            at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:155)
            at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:152)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
            at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:152)
            ... 448 more
    Caused by: kotlin.UninitializedPropertyAccessException: lateinit property inputFile has not been initialized
            at com.yelp.codegen.plugin.GenerateTaskConfiguration.getInputFile(GenerateTaskConfiguration.kt:12)
            at com.yelp.codegen.Plugin_gradle$$special$$inlined$invoke$lambda$1.invoke(plugin.gradle.kts:14)
            at com.yelp.codegen.Plugin_gradle$$special$$inlined$invoke$lambda$1.invoke(plugin.gradle.kts:4)
            at com.yelp.codegen.Plugin_gradle$inlined$sam$i$org_gradle_api_Action$0.execute(TaskContainerExtensions.kt)
            at org.gradle.api.internal.DefaultMutationGuard$2.execute(DefaultMutationGuard.java:41)
            at org.gradle.api.internal.DefaultMutationGuard$2.execute(DefaultMutationGuard.java:41)
            at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1$1.run(DefaultCollectionCallbackActionDecorator.java:100)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
            at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:97)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
            at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:94)
            at org.gradle.internal.ImmutableActionSet$SetWithFewActions.execute(ImmutableActionSet.java:285)
            at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:247)
            at org.gradle.api.internal.DefaultNamedDomainObjectCollection.doAdd(DefaultNamedDomainObjectCollection.java:112)
            at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:241)
            at org.gradle.api.internal.DefaultNamedDomainObjectCollection$AbstractDomainObjectCreatingProvider.tryCreate(DefaultNamedDomainObjectCollection.java:927)
            ... 490 more
    

    bug invalid 
    opened by damianw 10
  • Kotlin support of Square Bracket on variable name causing an issue with query parameters' kotlin variable names with square brackets as syntax error

    Kotlin support of Square Bracket on variable name causing an issue with query parameters' kotlin variable names with square brackets as syntax error

    @JvmSuppressWildcards
    interface JobPostingApi {
      
    
      /** 
       * Retrieves the collection of JobPosting resources.
       * The endpoint is owned by defaultname service owner
       * @param datePosted[before]  (optional)
       * @param datePosted[strictlyBefore]  (optional)
       * @param datePosted[after]  (optional)
       * @param datePosted[strictlyAfter]  (optional)
       * @param page The collection page number (optional)
       * @param itemsPerPage The number of items per page (optional)
       */
      @Headers(
        "X-Operation-ID: getJobPostingCollection"
      )
      @GET("/api/job_postings")
      fun getJobPostingCollection(
        @retrofit2.http.Query("datePosted[before]") datePosted[before]: String?, <===ERROR
        @retrofit2.http.Query("datePosted[strictly_before]") datePosted[strictlyBefore]: String?, <===ERROR
        @retrofit2.http.Query("datePosted[after]") datePosted[after]: String?,<===ERROR
        @retrofit2.http.Query("datePosted[strictly_after]") datePosted[strictlyAfter]: String?,<===ERROR
        @retrofit2.http.Query("page") page: Int?,<===CORRECT
        @retrofit2.http.Query("itemsPerPage") itemsPerPage: Int?
      ): Single<List<JobPosting>>
    
    

    A type annotation is required on the value parameter.

    Another Example

    /** 
       * Retrieves the collection of City resources.
       * The endpoint is owned by defaultname service owner
       * @param id  (optional)
       * @param id[]  (optional)
       * @param name  (optional)
       * @param name[]  (optional)
       * @param page The collection page number (optional)
       * @param itemsPerPage The number of items per page (optional)
       */
      @Headers(
        "X-Operation-ID: getCityCollection"
      )
      @GET("/api/cities")
      fun getCityCollection(
        @retrofit2.http.Query("id") id: Int?,
        @retrofit2.http.Query("id[]") id[]: List<Int>?,
        @retrofit2.http.Query("name") name: String?,
        @retrofit2.http.Query("name[]") name[]: List<String>?,
        @retrofit2.http.Query("page") page: Int?,
        @retrofit2.http.Query("itemsPerPage") itemsPerPage: Int?
      ): Single<List<City>>
    
    bug 
    opened by yudhir 8
  • How to remove usingPUT?

    How to remove usingPUT?

    1, How to remove ALL usingPUT/usingPOST/UsingGET1/using* at the end of the suspend fun?

    2, How to remove header:

    "X-Operation-ID: blabla"?

    3, How to generate responses under models/responses and requests under models/requests?

    BTW, Thanks for the library!

    opened by klaszlo8207 7
  • Kotlin Coroutines Support

    Kotlin Coroutines Support

    This is an initial PR for supporting another template to generate Kotlin-coroutines code. I'd love to get some early feedback from @macisamuele before I continue working on this to decide how we want to setup the project.

    I'm not a big fan of copying all the .mustache files over, so we should probably re-organize them in subfolders?

    What's missing:

    • [x] Tests
    • [x] Updated the readme
    • [x] Add a kotlin-coroutines to the samples
    enhancement 
    opened by cortinico 7
  • Features headers to remove not working

    Features headers to remove not working

    Using the new 1.4.0 version and the previous one 1.3.0, headers to remove function isn't working.

    This is the output of my successful generateSwagger task:

    > Task :app:generateSwagger
    Successfully read version from Swagger Spec file: 1.1.0
    ####################
    Yelp Swagger Codegen
    ####################
    Platform 	 kotlin-coroutines
    Package 	 com.my.super.project
    specName 	 [ DEFAULT ] defaultname
    specVers 	 1.1.0
    input 		 /home/projects/app/swagger.json
    output 		 /home/projects/app/src/main/java
    groupId 	 com.my.super.project
    artifactId 	 com.my.super.project
    features 	 X-HTTP-Method-Override, X-Operation-ID, Content-Type
    
    BUILD SUCCESSFUL in 1s
    1 actionable task: 1 executed
    10:09:41 PM: Task execution finished 'generateSwagger'.
    

    And this is my gradle configuration:

    generateSwagger {
        platform = "kotlin-coroutines"
        packageName = "com.my.super.project"
        outputDir = file("./src/main/java/")
        features {
            headersToRemove = ["X-HTTP-Method-Override", "X-Operation-ID", "Content-Type"]
        }
        inputFile = file("../swagger/destination/PointsOfInterest_v1_Swagger_specification.json")
    }
    

    And this is the output of my Api:

    @Headers(
            "X-Operation-ID: getPointOfInterest",
          "Content-Type: application/json"
        )
        @GET("api/{poisId}")
        suspend fun getPointOfInterest(
            @retrofit2.http.Path("poisId") poisId: String
        ): Map<String, Any?>
    

    By the awesome project and thx for the help !

    bug 
    opened by pietrini 6
  • Codecov fix

    Codecov fix

    The goal of this PR is to ideally fix codecov comments into PRs (nothing specific has been done yet). Fixes: #61

    NOTE: I'm not 100% confident yet about the change, unfortunately as we need to test codecov capability to comment on PR we need to have something published

    infra 
    opened by macisamuele 6
  • Allow Code-geneated Moshi Adapters

    Allow Code-geneated Moshi Adapters

    The goal of this PR is pretty straight forward it plugs-in moshi-kotlin-codegen into the generated code.

    The main difference in the code generated by swagger-gradle-codegen is the presence of @JsonClass(generateAdapter = true) within the code.

    This annotation allows KotlinJsonAdapterFactory to identify the JsonAdapter generated via kotlin annotation processor (kapt) if the kapt directive (look into samples/junit-tests/build.gradle changes) is enabled.

    This approach leads to a no-op change for users of the current tool but empowers them to get better runtime performances by enabling kapt. Disclaimer: I've not verified the performance improvements but considering that this is an opt-in approach I'm not concerned about it

    Fixes #68 Fixes #62 Fixes #71

    enhancement 
    opened by macisamuele 6
  • Build failed on Version 1.1.0

    Build failed on Version 1.1.0

    Once I update the version to 1.1.0 it gave build failure but the plugin is working with version 1.0.0

    > Task :generateSwagger FAILED
    ####################
    Yelp Swagger Codegen
    ####################
    Platform         kotlin
    Package          com.yelp.codegen.integrations
    specName         integration
    specVers         1.0.0
    input            /Users/chatura/swagger-gen/swagger-gradle-codegen-master/samples/sample_specs.json
    output           /Users/chatura/swagger-gen/swagger-gradle-codegen-master/samples/groovy-android/src/main/java
    groupId          com.yelp.codegen.integrations
    artifactId       com.yelp.codegen.integrations
    features         Accept-Language
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':generateSwagger'.
    > com/yelp/codegen/utils/InlineModelResolver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    

    These are my configurations

    ------------------------------------------------------------
    Gradle 5.5
    ------------------------------------------------------------
    
    Build time:   2019-06-28 17:36:05 UTC
    Revision:     83820928f3ada1a3a1dbd9a6c0d47eb3f199378f
    
    Kotlin:       1.3.31
    Groovy:       2.5.4
    Ant:          Apache Ant(TM) version 1.9.14 compiled on March 12 2019
    JVM:          1.8.0_212 (AdoptOpenJDK 25.212-b04)
    OS:           Mac OS X 10.13.6 x86_64
    
    opened by chathudan 6
  • Plugin generates invalid code with kebab-cased-variable-names

    Plugin generates invalid code with kebab-cased-variable-names

    Screenshot 2022-12-16 at 6 58 13 PM

    I'm trying to generate code for a third-party API service. They have a kebab-cased naming for different variables in response for which the generated code is invalid in Kotlin. I searched for any configuration that could handle this but found none.

    opened by divyanshdxn 0
  • Configuration of inputFile via command line flags is not working

    Configuration of inputFile via command line flags is not working

    I'm trying to specify the inputFile via command line options, as described inside the readme:

    ./gradlew generateSwagger --inputFile=./specs.json
    

    but this fails with

    Option 'inputFile' cannot be cast to type 'java.io.File' in class 'com.yelp.codegen.plugin.GenerateTask'.
    

    I tried many different options of specifying the inputFile parameter, without any success.

    After playing around with some custom task and @InputFile / @Option myself, it seems like it would only work if the type is a String (and not a RegularFileProperty). This would be in line with what the Gradle documentation about Option is saying:

    https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/options/Option.html

    An option may have one of the following types:

    • boolean
    • Boolean
    • Property<Boolean>
    • an enum type
    • Property<T> of an enum type
    • String
    • Property<String>
    • List<T> of an enum type
    • List<String>

    I didn't try any other properties, but maybe outputDir could also make problems, as it's a DirectoryProperty.

    Plugin version: 1.4.1

    opened by astuetz 1
  • Arrays handling seems bugged

    Arrays handling seems bugged

    I found a bug when generating api for a service responsing with an array of objects. Generated code doesn't point to proper class definition (TestObject in the example below replaced with Any?) despite it was properly generated.

    Input:

    {
      "swagger": "2.0",
      "info": {
        "version": "1.0",
        "title": "test-swagger",
        "description": "https://test-swagger.com/"
      },
      "schemes": [
        "https",
        "http"
      ],
      "produces": [
        "application/json"
      ],
      "consumes": [
        "application/json"
      ],
      "paths": {
        "/api/test/swagger": {
          "get": {
            "tags": [
              "test-swagger"
            ],
            "summary": "Test swagger.",
            "parameters": [
              {
                "name": "id",
                "in": "query",
                "required": true,
                "description": "Uniqe id.",
                "type": "string"
              }
            ],
            "responses": {
              "200": {
                "description": "OK",
                "schema": {
                  "properties": {
                    "cities": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/TestObject"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "definitions": {
        "TestObject": {
          "properties": {
            "name": {
              "type": "string"
            }
          }
        }
      }
    }
    

    Output:

    package com.test.package.apis
    
    import com.test.package.models.Any?
    import retrofit2.http.GET
    import retrofit2.http.Headers
    
    @JvmSuppressWildcards
    interface TestSwaggerApi {
        /**
         * Test swagger.
         * The endpoint is owned by defaultname service owner
         * @param id Uniqe id. (required)
         */
        @Headers(
            "Content-Type: application/json"
        )
        @GET("/api/test/swagger")
        suspend fun apiTestSwaggerGet(
            @retrofit2.http.Query("id") id: String
        ): Map<String, Any?>
    }
    
    package com.test.package.models
    
    import com.squareup.moshi.Json
    import com.squareup.moshi.JsonClass
    
    /**
     * @property name
     */
    @JsonClass(generateAdapter = true)
    data class TestObject(
        @Json(name = "name") @field:Json(name = "name") var name: String? = null
    )
    
    opened by krzybob 4
  • Replace moshi with kotlinx-serialization

    Replace moshi with kotlinx-serialization

    This PR extends on #136. There's still work to be so external input is more then welcome:

    Changes that should be discussed:

    • replaced ZonedDateTime with Instant from kotlinx-datetime - while this logically correct it does reduce all datetime representations to Zulu timezone
    • replaced number from BigDecimal to double - there is no official kmp support for BigDecimal which is not great because double is an approximation
    • replaced object with JsonObject - while using Json* classes is more type-safe it does modify the API heavily

    As you can see most problems are around unsupported types which we could support via the Java classes but would still require some serialization changes maybe via contextual serialization?

    The last problematic point is regarding nullability. While deserialization works as expected serialization implicitly omits null values. As far as I can tell these could be added back if the integrator passes in encodeDefaults: true on the JsonConfiguration. The x-nullable vendor extension just states null as a valid value and doesn't imply the client should explicitly send null to define a property as missing so maybe this is not actually a problem.

    opened by agologan 1
  • Support for kotlinx-datetime

    Support for kotlinx-datetime

    Hello ๐Ÿ‘‹ It will be great to have support for kotlinx-datetime rather than ThreeTenABP. It will be also required in case you will be supporting Kotlin Multiplatform later on!

    kmp 
    opened by mustafaozhan 3
  • Add Polymorphism support

    Add Polymorphism support

    Fixes #103

    The goal of this PR is to introduce support for polymorphic data models within the generated code. Details of the feature introduced are properly described in the linked issue (so I'll avoid to repeat myself ;) )

    WARNING: This PR is based on top of #104 ... that's why the long list of commits.

    This is currently published to give visibility and a reason to some code additions of #104 justified as "check the subsequent branch".

    The split of the changes in two PRs was mostly to reduce review complexity.

    opened by macisamuele 0
Releases(1.4.1)
  • 1.4.1(Feb 21, 2020)

    (2020-02-21)

    • ๐Ÿ› headersToRemove should apply also to top level headers (e.g. X-Operation-ID or Content-Type) [#121]

    Thanks to @cortinico for the support with this release

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Feb 18, 2020)

    (2020-02-18)

    • ๐ŸŽ Moshi-Codegen Support #82 #88
    • ๐ŸŽ Bump io.swagger:swagger-codegen to 2.4.12 #91
    • ๐ŸŽ Updated Mustache style and indent #90
    • ๐Ÿ› Fixed bug with Multipart file support #101
    • ๐Ÿ› Removed kotlin-dsl and fixed support for Gradle 5.x #112 #111
    • ๐Ÿงช Multiple fixes in our testing infra #95 #93 #87 #85 #84
    • โš™๏ธ Moved all the build targets from Makefile to Gradle #105
    • โš™๏ธ Moved the project to be a composite build #97
    • โš™๏ธ Multiple fixes to our pre-commit hook infrastructure #100 #86 #94 #93 #92

    โœ…: swagger-gradle-codegen:plugin:1.4.0 is supported on Gradle 5.4.1+

    Thanks to @cortinico @martinbonnin @macisamuele for the support with this release

    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Jan 21, 2020)

    (2020-01-21)

    • ๐ŸŽ Kotlin Coroutines Support [#29]
    • ๐Ÿ› Allow dot in parameter names for operations [#77]
    • ๐Ÿ› Fix Nullability warning in JsonAdapters [#78]
    • ๐Ÿ› Fix missing inner enum import on operations [#79]
    • ๐Ÿ› Fix Gradle Portal URL in settings.gradle.kts breaking Gradle syncs [#59]
    • ๐Ÿ› Issue 55 failing windows tests [#56]
    • โš™๏ธ Update multiple dependencies [#64]
    • โš™๏ธ Update several dependencies [#80]
    • โš™๏ธ Gradle to 5.6.2 [#67]
    • โš™๏ธ Add JaCoCo for CodeCov [#66]

    Thanks to @cortinico @doug-precocity @redwarp @macisamuele @filipemp for the support with this release

    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Jul 31, 2019)

    (2019-07-31)

    • ๐ŸŽ Remove leading slash if Swagger Spec are specifying a basePath #50
    • ๐Ÿ› Fix handling of Top Level Operation Headers #52
    • ๐Ÿงช Add JUnit Tests for the plugin classes #48
    • ๐Ÿงช Add Integration tests for response classes #42
    • โš™๏ธ Configure Detekt #44
    • โš™๏ธ Updating all the dependencies #43

    Thanks to @cortinico for the support with this release.

    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Jul 9, 2019)

  • 1.1.0(Jun 5, 2019)

    (2019-06-05)

    • ๐ŸŽ Update SharedCodegen to fallback to title usage if x-model is not present #21
    • ๐ŸŽ Add support for composed models and reference models #22
    • ๐ŸŽ Extended visibility of Custom Moshi Adapters #30
    • ๐Ÿ› Fix model sanitisation #19
    • ๐Ÿ› Ensure that retrofit body is not nullable #20
    • ๐Ÿ› Read spec version from SwaggerSpec via codegen tools and allow to set DEFAULT_VERSION constant #23
    • ๐Ÿ› Fix issue with MultiPart request and file uploads #26
    • ๐Ÿ› Fix for square brackets in the operation name #32

    Thanks to @cortinico, @MatthewTPage, @GuilhE, @macisamuele and @redwarp for the support with this release.

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Jun 5, 2019)

Owner
Yelp.com
Yelp.com
This program will read from your android application string.xml file and generate translated strings.xml files in your preferred languages using google sheet.

Localize your application content This program will read from your application string.xml file and generate translated strings.xml files in your prefe

DhiWise 4 Jul 29, 2022
Sample Project with Clean Architecture for demonstrating using Kotlin Flows for fetching User Location and networking.

Nearby-Places-Foursquare-Android Getting Nearby Places using Foursquare API API's Used from FourSquare Get Key from Foursquare site. NearBy places Her

Abhishek Dubey 5 Nov 30, 2022
The KPy gradle plugin allows you to write Kotlin/Native code and use it from python.

The KPy gradle plugin allows you to write Kotlin/Native code and use it from python.

Martmists 14 Dec 26, 2022
Plugin-shared-preferences - Pluto plugin to manage your Shared Preferences

Pluto Shared Preferences Plugin Pluto Shared Preferences is a Pluto plugin to in

Pluto 1 Feb 14, 2022
Gradle plugin adding a task to run a Paper Minecraft server

Run Paper Run Paper is a Gradle plugin which adds a task to automatically download and run a Paper Minecraft server along with your plugin built by Gr

Jason 64 Dec 29, 2022
Gradle plugin for simplify Kotlin Multiplatform mobile configurations

Mobile Multiplatform gradle plugin This is a Gradle plugin for simple setup of Kotlin Multiplatform mobile Gradle modules. Setup buildSrc/build.gradle

IceRock Development 78 Sep 27, 2022
kinstall is an easy way to install gradle-based command-line kotlin projects that use the application plugin.

kinstall kinstall is an easy way to install gradle-based command-line kotlin projects that use the application plugin. use First, install kinstall its

david kilmer 0 Apr 24, 2022
An advanced Minecraft plugin template made in Gradle

//DONT_APPLY_TEMPLATE_CHANGE Gradle Plugin Template Kotlin DSL Version โ„น๏ธ This template was planned to support only kotlin, but it also supports Java!

null 0 Apr 17, 2022
A Gradle plugin to easily publish library components to Maven.

Component Publisher A Gradle plugin to easily publish components based on maven-publish. You can find the latest released plugin on Gradle Plugin Port

Hulk Su 7 Oct 24, 2022
A server code template using Kotlin, Gradle, and Ktor

This project is a server code template using Kotlin, Gradle, and Ktor. It aims to help you build a service by providing reusable code examples that is likely essential for a server.

Dooho Chang 25 Dec 26, 2022
Auto-generate the fastest possible Parcelable implementations for Java and Kotlin

This project is deprecated It will still be maintained, but no new features will be added. Please use Parcelize, as it is the official way of generati

Bradley Campbell 492 Nov 17, 2022
This is a Kotlin multiplatform template project used to generate and deploy a natively compiled AWS lambda function using the custom runtime.

Overview This is a Kotlin multiplatform template project used to generate and deploy a natively compiled AWS Lambda function using a custom runtime. U

Greg Steckman 5 Jun 25, 2022
Koin Annotations - help declare Koin definition in a very fast and intuitive way, and generate all underlying Koin DSL for you

The goal of Koin Annotations project is to help declare Koin definition in a very fast and intuitive way, and generate all underlying Koin DSL for you. The goal is to help developer experience to scale and go fast ?? , thanks to Kotlin Compilers.

insert-koin.io 68 Jan 6, 2023
[prototype] Generate TypeScript interfaces from Kotlin classes

Kotlinx Serialization TypeScript Generator Kotlinx Serialization TypeScript Generator creates TypeScript interfaces from Kotlinx Serialization classes

null 17 Dec 18, 2022
Muhammad Bilal 0 Jan 6, 2022
A somewhat copy past of Jetbrain's code from the kotlin plugin repo to make it humanly possible to test Intellij IDEA kotlin plugins that work on kotlin

A somewhat copy past of Jetbrain's code from the kotlin plugin repo to make it humanly possible to test Intellij IDEA kotlin plugins that work on kotlin

common sense OSS 0 Jan 20, 2022
Open as default - A flutter plugin that allows setting up your flutter app to open files as default

open_as_default A flutter plugin that allows setting up your flutter app to open

LuisDeLaValier 3 Nov 15, 2022
A Kotlin Android library for heuristics evasion that prevents your code from being tested.

EvadeMe An Android library for heuristics evasion that prevents your code from being tested. User Instructions Add the maven repository to your projec

Chris Basinger 29 Dec 26, 2022