[kpm] kgp-idea: Implement IdeaKpmProjectContainer
This container serves the purpose of transferring a already serialized binary form of IdeaKpmProject to the IDE. ^KT-52568 In Progress
This commit is contained in:
committed by
Space
parent
486c18bc21
commit
9a8832a241
+58
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import java.io.Serializable
|
||||
|
||||
fun IdeaKpmProjectContainer(project: ByteArray): IdeaKpmProjectBinaryContainer {
|
||||
return IdeaKpmProjectBinaryContainerImpl(project)
|
||||
}
|
||||
|
||||
fun IdeaKpmProjectContainer(project: IdeaKpmProject): IdeaKpmProjectInstanceContainer {
|
||||
return IdeaKpmProjectInstanceContainerImpl(project)
|
||||
}
|
||||
|
||||
sealed interface IdeaKpmProjectContainer<T : Any> : Serializable {
|
||||
val project: T
|
||||
val binaryOrNull: ByteArray?
|
||||
val instanceOrNull: IdeaKpmProject?
|
||||
}
|
||||
|
||||
interface IdeaKpmProjectBinaryContainer : IdeaKpmProjectContainer<ByteArray> {
|
||||
override val instanceOrNull: Nothing? get() = null
|
||||
override val binaryOrNull: ByteArray get() = project
|
||||
}
|
||||
|
||||
interface IdeaKpmProjectInstanceContainer : IdeaKpmProjectContainer<IdeaKpmProject> {
|
||||
override val instanceOrNull: IdeaKpmProject get() = project
|
||||
override val binaryOrNull: Nothing? get() = null
|
||||
}
|
||||
|
||||
private data class IdeaKpmProjectBinaryContainerImpl(override val project: ByteArray) : IdeaKpmProjectBinaryContainer {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (other === this) return true
|
||||
if (other !is IdeaKpmProjectBinaryContainer) return false
|
||||
return other.project.contentEquals(this.project)
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return project.contentHashCode()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val serialVersionUID = 0L
|
||||
}
|
||||
}
|
||||
|
||||
private data class IdeaKpmProjectInstanceContainerImpl(
|
||||
override val project: IdeaKpmProject
|
||||
) : IdeaKpmProjectInstanceContainer {
|
||||
companion object {
|
||||
const val serialVersionUID = 0L
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm.idea
|
||||
|
||||
import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.TestIdeaKpmInstances
|
||||
import kotlin.test.*
|
||||
|
||||
class IdeaKpmProjectContainerTest {
|
||||
|
||||
@Test
|
||||
fun `test - binary container - equality`() {
|
||||
val container1 = IdeaKpmProjectContainer(byteArrayOf(1))
|
||||
val container2 = IdeaKpmProjectContainer(byteArrayOf(1))
|
||||
val container3 = IdeaKpmProjectContainer(byteArrayOf(1, 2))
|
||||
|
||||
assertEquals(container1, container2)
|
||||
assertNotEquals(container2, container3)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - instance container - equality`() {
|
||||
val container1 = IdeaKpmProjectContainer(TestIdeaKpmInstances.simpleProject)
|
||||
val container2 = IdeaKpmProjectContainer(TestIdeaKpmInstances.simpleProject.copy())
|
||||
val container3 = IdeaKpmProjectContainer(TestIdeaKpmInstances.simpleProject.copy(gradlePluginVersion = "some.other.version"))
|
||||
|
||||
assertEquals(container1, container2)
|
||||
assertNotEquals(container2, container3)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - binary container - instanceOrNull`() {
|
||||
assertNull(IdeaKpmProjectContainer(byteArrayOf()).instanceOrNull)
|
||||
assertNotNull(IdeaKpmProjectBinaryContainer::class.java.getMethod("getInstanceOrNull"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - instance container - instanceOrNull`() {
|
||||
assertSame(TestIdeaKpmInstances.simpleProject, IdeaKpmProjectContainer(TestIdeaKpmInstances.simpleProject).instanceOrNull)
|
||||
assertNotNull(IdeaKpmProjectInstanceContainer::class.java.getMethod("getInstanceOrNull"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - binary container - binaryOrNull`() {
|
||||
val binary = byteArrayOf()
|
||||
assertEquals(binary, IdeaKpmProjectContainer(binary).binaryOrNull)
|
||||
assertNotNull(IdeaKpmProjectBinaryContainer::class.java.getMethod("getBinaryOrNull"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - instance container - binaryOrNull`() {
|
||||
assertNull(IdeaKpmProjectContainer(TestIdeaKpmInstances.simpleProject).binaryOrNull)
|
||||
assertNotNull(IdeaKpmProjectInstanceContainer::class.java.getMethod("getBinaryOrNull"))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user