sealed-enum icon indicating copy to clipboard operation
sealed-enum copied to clipboard

Add multiplatform support via ksp

Open alexvanyo opened this issue 4 years ago • 4 comments

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 runtime to multiplatform project
    • [X] Convert Class to KClass for return type of enumClass to remove Java dependency #128
    • [X] Make runtime tests multiplatform to run on all platforms
  • [X] Move sealed classes of processing-tests to common code
  • [x] Enable all platforms for ksp-tests
    • [x] JS IR: blocked by https://github.com/google/ksp/issues/33
  • [x] Configure ksp to generate commonMain code
  • [x] Make basic tests multiplatform to run on all platforms (not compilation tests)
  • [ ] Configure publishing to support multiplatform: #104

alexvanyo avatar Aug 21 '21 21:08 alexvanyo

🧛 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

github-actions[bot] avatar Aug 21 '21 22:08 github-actions[bot]

An initial exploration of converting sealed-enum into 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.

cdflynn avatar Aug 21 '21 23:08 cdflynn

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).

alexvanyo avatar Aug 22 '21 00:08 alexvanyo

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.

alexvanyo avatar Apr 07 '23 20:04 alexvanyo