Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@boiler23
Copy link
Collaborator

@boiler23 boiler23 commented May 20, 2025

This is required for the preview parameters to be correctly picked up by the preview adapter in IDE, which expects the provider to be a subclass of AndroidX's interface, and fails with the ClassCastException otherwise.

Fixes https://youtrack.jetbrains.com/issue/CMP-8220

Release Notes

Fixes - Multiple Platforms

  • Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported.

Example usage:

import androidx.compose.runtime.Composable
import org.jetbrains.compose.ui.tooling.preview.Preview
import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider

class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
}

/**
 * This function will generate two preview images with different texts.
 */
@Preview
@Composable
fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
}

Testing

Once https://youtrack.jetbrains.com/issue/KMT-879 is merged in IJ, this change can be tested on Nightly Builds (ETA tomorrow)

…terProvider` an actual implementation of `androidx.compose.ui.tooling.preview.PreviewParameterProvider` on Android (#5319)

This is required for the preview parameters to be correctly picked up by
the preview adapter in IDE, which expects the provider to be a subclass
of AndroidX's interface, and fails with the `ClassCastException`
otherwise.

## Release Notes
### Fixes - Multiple Platforms
- Support Preview parameters for Previews in common source sets in IJ
and AS. Note: IDEs also need to implement support on their end. Please
check the respective IDE release notes to confirm this is supported.

Example usage:

```
import androidx.compose.runtime.Composable
import org.jetbrains.compose.ui.tooling.preview.Preview
import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider

class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
}

/**
 * This function will generate two preview images with different texts.
 */
@Preview
@composable
fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
}
```
@boiler23 boiler23 requested a review from Kpotko May 20, 2025 12:24
@Kpotko Kpotko merged commit 03fe09d into release/1.8 May 20, 2025
1 check passed
@Kpotko Kpotko deleted the ilia.bogdanovich/KMT-879-preview-parameters-1.8 branch May 20, 2025 13:17
igordmn added a commit that referenced this pull request Jul 2, 2025
When the 1.8.2 release was prepared, the release notes from #5323 were malformed by stripping empty lines:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [#5323](#5323)
  Example usage:
  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }
  /**
   * This function will generate two preview images with different texts
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
  }
  \\\
```

The correct release notes are:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [#5323](#5323)

  Example usage:

  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider

  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
      override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }

  /**
   * This function will generate two preview images with different texts.
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
      Text(text)
  }
  \\\
```

To fix this issue, the parsing is changed. Previously `ChangelogEntry` represented a single line, even if it is part of a single change. Now it represents the change as a whole.

## Testing
These commands give the same result, with the exception that multiline release notes are handled correctly now:
```
kotlin changelog.main.kts v1.8.1..v1.9.0-alpha02
kotlin changelog.main.kts v1.8.1..v1.8.2
kotlin changelog.main.kts v1.8.0..v1.8.1
kotlin changelog.main.kts v1.8.0-beta02..v1.8.0-rc01
```

## Release Notes
N/A
igordmn added a commit that referenced this pull request Jul 2, 2025
When the 1.8.2 release was prepared, the release notes from #5323 were malformed by stripping empty lines:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [#5323](#5323)
  Example usage:
  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }
  /**
   * This function will generate two preview images with different texts
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
  }
  \\\
```

The correct release notes are:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [#5323](#5323)

  Example usage:

  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider

  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
      override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }

  /**
   * This function will generate two preview images with different texts.
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
      Text(text)
  }
  \\\
```

To fix this issue, the parsing is changed. Previously `ChangelogEntry` represented a single line, even if it is part of a single change. Now it represents the change as a whole.

## Testing
These commands give the same result, with the exception that multiline release notes are handled correctly now:
```
kotlin changelog.main.kts v1.8.1..v1.9.0-alpha02
kotlin changelog.main.kts v1.8.1..v1.8.2
kotlin changelog.main.kts v1.8.0..v1.8.1
kotlin changelog.main.kts v1.8.0-beta02..v1.8.0-rc01
```

## Release Notes
N/A
terrakok pushed a commit that referenced this pull request Jul 2, 2025
When the 1.8.2 release was prepared, the release notes from
#5323 were
malformed by stripping empty lines:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [#5323](#5323)
  Example usage:
  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }
  /**
   * This function will generate two preview images with different texts
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
  }
  \\\
```

The correct release notes are:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [#5323](#5323)

  Example usage:
  
  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
  
  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
      override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }
  
  /**
   * This function will generate two preview images with different texts.
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
      Text(text)
  }
  \\\
```

To fix this issue, the parsing is changed. Previously `ChangelogEntry`
represented a single line, even if it is part of a single change. Now it
represents the change as a whole.

## Testing
These commands give the same result, with the exception that multiline
release notes are handled correctly now:
```
kotlin changelog.main.kts v1.8.1..v1.9.0-alpha02
kotlin changelog.main.kts v1.8.1..v1.8.2
kotlin changelog.main.kts v1.8.0..v1.8.1
kotlin changelog.main.kts v1.8.0-beta02..v1.8.0-rc01
```

## Release Notes
N/A
henryqwe pushed a commit to henryqwe/compose-multiplatform that referenced this pull request Oct 1, 2025
When the 1.8.2 release was prepared, the release notes from
JetBrains#5323 were
malformed by stripping empty lines:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [JetBrains#5323](JetBrains#5323)
  Example usage:
  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
    override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }
  /**
   * This function will generate two preview images with different texts
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
    Text(text)
  }
  \\\
```

The correct release notes are:
```
- Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported [JetBrains#5323](JetBrains#5323)

  Example usage:
  
  \\\
  import androidx.compose.runtime.Composable
  import org.jetbrains.compose.ui.tooling.preview.Preview
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
  import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
  
  class MyPreviewParameterProvider : PreviewParameterProvider<String> {
      override val values = sequenceOf("Hello, Compose!", "Hello, World!")
  }
  
  /**
   * This function will generate two preview images with different texts.
   */
  @Preview
  @composable
  fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) {
      Text(text)
  }
  \\\
```

To fix this issue, the parsing is changed. Previously `ChangelogEntry`
represented a single line, even if it is part of a single change. Now it
represents the change as a whole.

## Testing
These commands give the same result, with the exception that multiline
release notes are handled correctly now:
```
kotlin changelog.main.kts v1.8.1..v1.9.0-alpha02
kotlin changelog.main.kts v1.8.1..v1.8.2
kotlin changelog.main.kts v1.8.0..v1.8.1
kotlin changelog.main.kts v1.8.0-beta02..v1.8.0-rc01
```

## Release Notes
N/A
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants