Add multiplatform support via ksp
Adds multiplatform support for converting sealed-enum into a multiplatform library using ksp to generate code.
Current progress:
- [X] Convert project to use
kotlin("multiplatform")plugin globally - [X] Convert
runtimeto multiplatform project- [X] Convert
ClasstoKClassfor return type ofenumClassto remove Java dependency #128 - [X] Make
runtimetests multiplatform to run on all platforms
- [X] Convert
- [X] Move sealed classes of
processing-teststo common code - [x] Enable all platforms for
ksp-tests- [x] JS IR: blocked by https://github.com/google/ksp/issues/33
- [x] Configure
kspto generatecommonMaincode - [x] Make basic tests multiplatform to run on all platforms (not compilation tests)
- [ ] Configure publishing to support multiplatform: #104
🧛 Project Code Coverage: 97.57%
Coverage of Modified Files:
| File | Coverage |
|---|---|
CamelCase.kt |
100.00% |
ClassInspectorUtil.kt |
92.59% |
EnumForSealedEnumTypeSpec.kt |
100.00% |
EnumSealedObjectPropertySpec.kt |
100.00% |
GenSealedEnumHolder.kt |
91.27% |
InvalidSubclassVisibilityException.kt |
100.00% |
KotlinPoetKsp.kt |
86.76% |
KspUtils.kt |
100.00% |
MaybeAddOriginatingElement.kt |
100.00% |
NonObjectSealedSubclassException.kt |
100.00% |
SealedClassExtensions.kt |
100.00% |
SealedClassNode.kt |
100.00% |
SealedEnum.kt |
100.00% |
SealedEnumEnumPropertySpec.kt |
100.00% |
SealedEnumFileSpec.kt |
100.00% |
SealedEnumNamePropertySpec.kt |
100.00% |
SealedEnumOrdinalPropertySpec.kt |
100.00% |
SealedEnumProcessor.kt |
97.49% |
SealedEnumSealedEnumPropertySpec.kt |
100.00% |
SealedEnumTypeSpec.kt |
100.00% |
SealedEnumValueOfFunSpec.kt |
100.00% |
SealedEnumValuesPropertySpec.kt |
100.00% |
SealedEnumWithEnumProvider.kt |
100.00% |
SuperInterfaces.kt |
93.36% |
TreeTraversalOrder.kt |
100.00% |
TreeUtils.kt |
100.00% |
Unique.kt |
100.00% |
Visibility.kt |
100.00% |
WildcardedTypeParameters.kt |
89.13% |
Modified Files Not Found In Coverage Report:
AnnotationErrors.kt Compilation.kt Compilation.kt CompilationAssertions.kt CreateSealedEnumFromEnumTests.kt CurrentProcessingType.kt CurrentProcessingType.kt Dangerfile EmptySealedClass.kt EmptySealedClassCompilationTests.kt EmptySealedClassTests.kt EmptySealedInterface.kt EmptySealedInterfaceCompilationTests.kt EmptySealedInterfaceTests.kt EnumForSealedEnumProvider.kt EnvironmentsSealedEnum.kt EnvironmentsSealedEnumCompilationTests.kt EnvironmentsSealedEnumTests.kt Flag.kt FlagCompilationTests.kt FlagTests.kt GenSealedEnum.kt GenericSealedClass.kt GenericSealedClassCompilationTests.kt GenericSealedClassTests.kt JavaBaseClasses.kt JavaBaseClassesTests.kt JavaFirstBaseClass.java JavaInterface1.java JavaInterface2.java JavaInterface3.java JavaInterface4.java JavaInterface5.java JavaPrivateInterfaceOuterClass.java JavaPrivateInterfaceSubclass.java JavaProtectedInterfaceBaseClass.java JavaProtectedInterfaceBaseClass.java JavaProtectedInterfaceSubclass.java JavaProtectedInterfaceSubclass.java JavaSecondBaseClass.java MultiInterfaceFlag.kt MultiInterfaceFlagCompilationTests.kt MultiInterfaceFlagTests.kt NestedClass.kt NestedClassCompilationTests.kt NestedClassTests.kt NestedObjectsWithSameName.kt NestedObjectsWithSameNameCompilationTests.kt NestedObjectsWithSameNameTests.kt NonObjectErrors.kt OneObjectSealedClass.kt OneObjectSealedClassCompilationTests.kt OneObjectSealedClassTests.kt OneObjectSealedInterface.kt OneObjectSealedInterfaceCompilationTests.kt OneObjectSealedInterfaceTests.kt OutsideSealedClass.kt OutsideSealedClassCompilationTests.kt OutsideSealedClassTests.kt PathsUtils.kt PrivateInterfaceSealedClass.kt PrivateInterfaceSealedClassTests.kt ProcessingType.kt ProtectedInterfaceSealedClass.kt ProtectedInterfaceSealedClassTests.kt ProtectedInterfaceSealedClassWithDifferentPackageBaseClass.kt ProtectedInterfaceSealedClassWithDifferentPackageBaseClassTests.kt README.md README.md README.md RepeatableContainer.jvm.kt RepeatableContainer.kt SealedClassHierarchy.kt SealedClassHierarchyCompilationTests.kt SealedClassHierarchyTests.kt SealedEnumWithAbstractBaseClasses.kt SealedEnumWithAbstractBaseClassesCompilationTests.kt SealedEnumWithAbstractBaseClassesTests.kt SealedEnumWithInterfaces.kt SealedEnumWithInterfacesCompilationTests.kt SealedEnumWithInterfacesTests.kt SealedInterfaceHierarchy.kt SealedInterfaceHierarchyCompilationTests.kt SealedInterfaceHierarchyTests.kt SplitAcrossFilesSealedClass.kt SplitAcrossFilesSealedClassCompilationTests.kt SplitAcrossFilesSealedClassTests.kt SplitAcrossFilesSubclassA.kt SplitAcrossFilesSubclassB.kt SplitAcrossFilesSubclassC.kt TraversalOrder.kt TraversalOrderCompilationTests.kt TraversalOrderTests.kt TreeUtilsTests.kt TwoObjectSealedClass.kt TwoObjectSealedClassCompilationTests.kt TwoObjectSealedClassTests.kt TwoObjectSealedInterface.kt TwoObjectSealedInterfaceCompilationTests.kt TwoObjectSealedInterfaceTests.kt VisibilitySealedClass.kt VisibilitySealedClassCompilationTests.kt VisibilitySealedClassTests.kt VisibilitySealedClassVisibilityTests.kt build.gradle.kts build.gradle.kts build.gradle.kts build.gradle.kts build.gradle.kts build.gradle.kts build.gradle.kts build.gradle.kts ci.yml com.livefront.sealedenum.detekt.gradle.kts com.livefront.sealedenum.kotlin.gradle.kts com.livefront.sealedenum.publish.gradle.kts detekt.yml gradle.properties libs.versions.toml settings.gradle.kts yarn.lock
Codebase cunningly covered by count Shroud 🧛
Generated by :no_entry_sign: Danger
An initial exploration of converting
sealed-enuminto a multiplatform library (based on #76).
excellent, multiplatform++
Every other module was still impacted however, with the only target being
jvm
So this will be interesting, I see ubuntu has no issues and our familiar platform problems have taken their new flavors, ala
\D:\a\sealed-enum\sealed-enum\runtime\src\jvmMain\kotlin\com\livefront\sealedenum\RepeatableContainer.jvm.kt:8:8: error: the feature "multi platform projects" is experimental and should be enabled explicitly
Feels like progress =) Really curious to watch what comes out of the kotlin compiler issue.
Yep, this exploration is roughly tangential to the kotlin-compile-testing + KSP + KotlinPoet issue that's causing the tests to fail on macOS and Windows on #76 , but those same tests are also causing the failures here :smile:. Another options is disabling those tests on the offending platforms, since the logic and code coverage is still maintained by the Linux build.
The key bit is that for runtime, the additional targets require testing on all three platforms, since there are targets that can only be run on each platform (fun fact, it is literally impossible to fully this project in one go, since there are both macOS and Windows specific targets). So the good news is the tests and macOS and Windows are passing for those targets, before failing on the same tests again.
The next step here is reworking the test suite, so that it can be run on more than just jvm (which mostly will consist of removing a direct dependency on JUnit and anything else Java).
This is ready to review, but if merged will be blocked on switching to mavenCentral publishing (#104) since Jitpack won't be building on macOS.