codegen

Clone Tools
  • last updated a few seconds ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
Organize imports

Polish whitespace

  1. … 2 more files in changeset.
Compile scripts against generated Kotlin API jar

We would like Kotlin build scripts to behave as if all the `Action<T>`

parameters in the Gradle API had been declared as `T.() -> Unit` to

avoid the need for explicitly qualifying the single argument to the

given lambda expressions with `it`.

In other words, we would like users to be writing code like:

copySpec {

from("src")

into("out")

}

Instead of:

copySpec {

it.from("src")

it.into("out")

}

Where `copySpec` is declared in the Gradle Java API as:

CopySpec copySpec(Action<? super CopySpec> configuration)

So far we have been able to avoid the qualifying `it` in some situations

via mindful use of inheritance and Kotlin extensions but a comprehensive

solution was still lacking. The underlying issue is that while Kotlin

does provide a type extension mechanism, type members still take

precedence over extensions and currently there's no mechanism to

instruct Kotlin otherwise.

In the future we might be able to implement a different solution to this

particular issue via a new Kotlin language feature still in discussion:

- https://youtrack.jetbrains.com/issue/KT-12848

In the meantime, by giving the Kotlin compiler a carefully crafted API

jar with all members that could potentially conflict with our provided

extensions removed we can work around the fact that interface members

take precedence over extension members and expose all the extensions we

want.

And that is the solution implemented in this commit:

- Remove all API methods that take a last `Action<T>` parameter

- Generate shim extensions that take a last `T.() -> Unit`

Proper treatment for generic types will be implemented in a future

commit.

Resolves: #52

See also: #54, #117

    • -0
    • +122
    ./GenerateActionExtensionsTest.kt
    • -0
    • +35
    ./MarkdownKDocProviderTest.kt
    • -0
    • +46
    ./MethodSignatureTest.kt
  1. … 25 more files in changeset.
Remove automatic API extension codegen

This is dead code at the moment, but will likely be re-introduced after

working out issues mentioned in 757129804ce0807965694c00317f7935a8366e3c.

Simply revert this commit at that time to put everything back in place.

  1. … 3 more files in changeset.
Polish `ExtensionFunction`

  1. … 1 more file in changeset.
Generate API extensions for `Action<*>` methods

The generated extensions replace the `Action<T>` parameters by function

literals with [custom receiver

objects](https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver)

to provide an experience closer to the Groovy DSL.

Unfortunately it seems the Kotlin compiler will still pick the original

`Action<*>` methods from the interface instead of the generated

extensions with custom receiver objects.

See #1

    • -0
    • +31
    ./ApiExtensionsTest.kt
  1. … 4 more files in changeset.