Skip to content

Commit

Permalink
Solves #351 - Add kotlin docs (#353)
Browse files Browse the repository at this point in the history
* Solves #351 - Add kotlin docs

* Fix doc typos
  • Loading branch information
checketts committed Apr 26, 2024
1 parent 124108a commit 6a84710
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/index.md
Expand Up @@ -59,7 +59,7 @@ jte gives you the same productive, typesafe experience you're used to from writi

## 5 minutes example

Here is a small jte template `example.jte`:
Here is a small jte template `example.jte` (or `example.kte` if using Kotlin):

=== "Java"

Expand Down
96 changes: 96 additions & 0 deletions docs/kotlin.md
@@ -0,0 +1,96 @@
---
title: jte Kotlin tips
description: Details specific to Kotlin usage
---

# Kotlin Details

Kotlin entails a few differences. The `jte-kotlin` dependency is needed to enable `.kte` templates that contain
Kotlin code. Keep in mind that Kotlin application code can use either Java (`.jte`) or Kotlin (`.kte`) templates. `.kte`
files are only needed for Kotlin based templates.

## Add required dependencies

This dependency is a compile time dependency to avoid including the Kotlin compiler in the resulting build.

=== "Maven"

```xml linenums="1"
<dependency>
<groupId>gg.jte</groupId>
<artifactId>jte-kotlin</artifactId>
<version>{{ latest-git-tag }}</version>
<scope>compile</scope>
</dependency>
```

=== "Gradle"

```groovy linenums="1"
compileOnly "gg.jte:jte-kotlin:{{ latest-git-tag }}"
```

## Common errors

### Non-null parameters

=== "Non-null (`.kte file`)"

```html linenums="1"
@param name: String
```

=== "Nullable (`.kte file`)"

```html linenums="1"
@param name: String?
```

If a non-null parameter exists in the template, the template will fail to load with an error in the line where the
parameter is being included.

```
Error rendering template:
Failed to render admin/index.kte, error at admin/index.kte:1
(many many lines of stack trace)
Caused by: java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
```
### Writing a non-supported type to a template

```html linenums="1"
@param myList: List

${myList}
```

This will generate an error like so:

```
gg.jte.TemplateException: Failed to compile template, error at myPage/index.kte:3
jteOutput.writeUserContent(things)
/Users/aUser/app/jte-classes/gg/jte/generated/ondemand/index/JteindexGenerated.kt:13:14
Reason: None of the following functions can be called with the arguments supplied:
public open fun writeUserContent(p0: Content!): Unit defined in gg.jte.html.HtmlTemplateOutput
public open fun writeUserContent(p0: Boolean): Unit defined in gg.jte.html.HtmlTemplateOutput
(etc.)
```

This will be improved in the future.

### Nulls in `@for` expressions

`@for` loops use an iterator. If a variable is null then the following error will appear:

```
Failed to compile template, error at myApp/index.kte:5
for (s in things) {
/Users/aUser/code/cds/jte-classes/gg/jte/generated/ondemand/index/JteindexGenerated.kt:10:13
Reason: Not nullable value required to call an 'iterator()' method on for-loop range
```

A quick fix is to make the parameter have an empty list by default.

```html linenums="1"
@for(things in (things ?: listOf()))
```
1 change: 1 addition & 0 deletions mkdocs.yml
Expand Up @@ -85,6 +85,7 @@ nav:
- "Precompiling Templates": pre-compiling.md
- "Binary Rendering": binary-rendering.md
- "Localization": localization.md
- "Kotlin Templates": kotlin.md
- "Extensions":
- "jte-models Facade Generator": jte-models.md
- "Extensions API": jte-extension-api.md
Expand Down

0 comments on commit 6a84710

Please sign in to comment.