Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
kitakkun committed Jan 14, 2025
1 parent 10dcecb commit 54a38c3
Show file tree
Hide file tree
Showing 96 changed files with 2,766 additions and 60 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ plugins {
alias(libs.plugins.backintimeLint) apply false
alias(libs.plugins.backintimePublication) apply false
alias(libs.plugins.backintimeCompilerModule) apply false
alias(libs.plugins.intelliJComposeFeature) apply false
}

allprojects {
Expand Down
2 changes: 1 addition & 1 deletion compiler-test/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ kotlin {
implementation(projects.core.annotations)
implementation(projects.core.websocket.server)
implementation(projects.core.websocket.event)
implementation(projects.tooling.model)
implementation(projects.tooling.core.model)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)
}
Expand Down
2 changes: 1 addition & 1 deletion core/runtime/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ kotlin {
commonMain.dependencies {
implementation(projects.core.websocket.client)
implementation(projects.core.websocket.event)
implementation(projects.tooling.model)
implementation(projects.tooling.core.model)
implementation(libs.ktor.client.core)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)
Expand Down
2 changes: 1 addition & 1 deletion demo/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ dependencies {
implementation(projects.core.runtime)
implementation(projects.core.annotations)
implementation(projects.core.websocket.event)
implementation(projects.tooling.model)
implementation(projects.tooling.core.model)
implementation(libs.core.ktx)
implementation(libs.lifecycle.runtime.ktx)
implementation(libs.activity.compose)
Expand Down
6 changes: 5 additions & 1 deletion gradle-conventions-settings/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
plugins {
`kotlin-dsl`
}
}

dependencies {
compileOnly(libs.jetbrains.compose.gradle.plugin)
}
3 changes: 3 additions & 0 deletions gradle-conventions-settings/src/main/kotlin/util/Project.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@ package util
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
import org.jetbrains.compose.ComposeExtension

val Project.libs get() = extensions.getByType<VersionCatalogsExtension>().named("libs")

val Project.compose get() = extensions.getByType<ComposeExtension>().dependencies
2 changes: 2 additions & 0 deletions gradle-conventions/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ dependencies {
implementation(libs.kotlin.gradle.plugin)
compileOnly(libs.ktlint.gradle)
compileOnly(libs.maven.publish)
implementation(libs.jetbrains.compose.gradle.plugin)
implementation(libs.compose.compiler.gradle.plugin)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import util.libs

plugins {
id("org.jetbrains.kotlin.jvm")
id("org.jetbrains.compose")
id("org.jetbrains.kotlin.plugin.compose")
}

configure<KotlinJvmProjectExtension> {
jvmToolchain(17)
}

repositories {
mavenCentral()
google()
maven("https://packages.jetbrains.team/maven/p/kpm/public/")
}

dependencies {
implementation(project(":tooling:core:ui"))
implementation(project(":tooling:core:model"))
implementation(project(":tooling:core:usecase"))
implementation(libs.findLibrary("jewel").get())
implementation(compose.desktop.currentOs) {
exclude(group = "org.jetbrains.compose.material")
}
}
12 changes: 9 additions & 3 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,15 @@ include(
":core:websocket:server",
":core:websocket:client",
":core:websocket:event",
":tooling:model",
":tooling:flipper-lib",
":tooling:idea-plugin",
":tooling:database",
":tooling:shared",
":tooling:core:model",
":tooling:core:database",
":tooling:core:ui",
":tooling:core:usecase",
":tooling:core:shared",
":tooling:app",
":tooling:feature:inspector",
":tooling:feature:settings",
":tooling:feature:log",
)
11 changes: 11 additions & 0 deletions tooling/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
plugins {
alias(libs.plugins.intelliJComposeFeature)
}

dependencies {
implementation(projects.tooling.core.shared)
implementation(projects.tooling.core.database)
implementation(projects.tooling.feature.log)
implementation(projects.tooling.feature.inspector)
implementation(projects.tooling.feature.settings)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.kitakkun.backintime.tooling.app

import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.kitakkun.backintime.feature.settings.SettingsScreen
import com.kitakkun.backintime.tooling.core.shared.BackInTimeDebuggerService
import com.kitakkun.backintime.tooling.core.shared.BackInTimeDebuggerSettings
import com.kitakkun.backintime.tooling.core.shared.IDENavigator
import com.kitakkun.backintime.tooling.core.shared.PluginStateService
import com.kitakkun.backintime.tooling.core.ui.component.HorizontalDivider
import com.kitakkun.backintime.tooling.core.ui.compositionlocal.LocalIDENavigator
import com.kitakkun.backintime.tooling.core.ui.compositionlocal.LocalPluginStateService
import com.kitakkun.backintime.tooling.core.ui.compositionlocal.LocalServer
import com.kitakkun.backintime.tooling.core.ui.compositionlocal.LocalSettings
import com.kitakkun.backintime.tooling.core.ui.preview.PreviewContainer
import com.kitakkun.backintime.tooling.core.ui.theme.BackInTimeTheme
import com.kitakkun.backintime.tooling.feature.log.LogScreen
import com.kitakkun.backintime.tooling.model.Tab
import com.kitakkunl.backintime.feature.inspector.InspectorScreen

@Composable
fun BackInTimeDebuggerApp() {
val server = LocalServer.current
val serverState = server.state
val settings = LocalSettings.current

val pluginStateService = LocalPluginStateService.current
val pluginState by pluginStateService.stateFlow.collectAsState()

LaunchedEffect(Unit) {
if (!serverState.serverIsRunning) {
server.restartServer(settings.getState().serverPort)
}
}

BackInTimeTheme {
Column(
modifier = Modifier.fillMaxSize()
) {
HorizontalDivider()
BackInTimeTopBar(
currentTab = pluginState.globalState.activeTab,
onClickInstances = { pluginStateService.updateTab(Tab.Inspector) },
onClickLog = { pluginStateService.updateTab(Tab.Log) },
onClickSettings = { pluginStateService.updateTab(Tab.Settings) },
)
HorizontalDivider()
when (pluginState.globalState.activeTab) {
Tab.Inspector -> InspectorScreen()
Tab.Log -> LogScreen()
Tab.Settings -> SettingsScreen()
}
}
}
}

@Preview
@Composable
private fun BackInTimeDebuggerAppPreview() {
PreviewContainer {
CompositionLocalProvider(
LocalSettings provides BackInTimeDebuggerSettings.Dummy,
LocalServer provides BackInTimeDebuggerService.Dummy,
LocalPluginStateService provides PluginStateService.Dummy,
LocalIDENavigator provides IDENavigator.Noop,
) {
BackInTimeDebuggerApp()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.kitakkun.backintime.tooling.app

import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.kitakkun.backintime.tooling.core.ui.preview.PreviewContainer
import com.kitakkun.backintime.tooling.model.Tab
import org.jetbrains.jewel.ui.component.SelectableIconActionButton
import org.jetbrains.jewel.ui.icons.AllIconsKeys

@Composable
fun BackInTimeTopBar(
onClickSettings: () -> Unit,
onClickInstances: () -> Unit,
onClickLog: () -> Unit,
currentTab: Tab,
modifier: Modifier = Modifier,
) {
Row(modifier = modifier) {
SelectableIconActionButton(
selected = currentTab == Tab.Inspector,
onClick = onClickInstances,
key = AllIconsKeys.Nodes.Class,
contentDescription = null,
)
SelectableIconActionButton(
selected = currentTab == Tab.Log,
onClick = onClickLog,
key = AllIconsKeys.Toolwindows.InfoEvents,
contentDescription = null,
)
Spacer(Modifier.weight(1f))
SelectableIconActionButton(
selected = currentTab == Tab.Settings,
onClick = onClickSettings,
key = AllIconsKeys.General.Settings,
contentDescription = null,
)
}
}

@Preview
@Composable
private fun BackInTimeTopBarPreview() {
PreviewContainer {
BackInTimeTopBar(
currentTab = Tab.Inspector,
onClickInstances = {},
onClickLog = {},
onClickSettings = {},
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ kotlin {
sqldelight {
databases {
create("Database") {
packageName.set("com.kitakkun.backintime.tooling.database")
packageName.set("com.kitakkun.backintime.tooling.core.database")
}
}
}

dependencies {
implementation(projects.core.websocket.event)
implementation(projects.tooling.model)
implementation(projects.tooling.shared)
implementation(projects.tooling.core.model)
implementation(projects.tooling.core.shared)
implementation(libs.sqldelight.sqlite.driver)
implementation(libs.sqldelight.coroutines.extensions)
implementation(libs.kotlinx.serialization.json)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.kitakkun.backintime.tooling.database
package com.kitakkun.backintime.tooling.core.database

import app.cash.sqldelight.coroutines.asFlow
import app.cash.sqldelight.coroutines.mapToList
import com.kitakkun.backintime.tooling.core.shared.BackInTimeDatabase
import com.kitakkun.backintime.tooling.model.InstanceEventData
import com.kitakkun.backintime.tooling.shared.BackInTimeDatabase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.kitakkun.backintime.tooling.database
package com.kitakkun.backintime.tooling.core.database

import app.cash.sqldelight.ColumnAdapter
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import com.kitakkun.backintime.tooling.model.InstanceEventData
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

private val instanceEventAdapter = object : ColumnAdapter<InstanceEventData, String> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.kitakkun.backintime.tooling.database
package com.kitakkun.backintime.tooling.core.database

import com.kitakkun.backintime.tooling.model.InstanceEventData
import kotlin.test.Test
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.kitakkun.backintime.tooling.model

data class Instance(
val id: String,
val className: String,
val superClassName: String,
val properties: List<Property>,
val events: List<InstanceEventData>,
) {
val totalEvents: Int get() = events.size
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.kitakkun.backintime.tooling.model

import com.benasher44.uuid.uuid4
import kotlinx.serialization.Serializable
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid

@Serializable
sealed class InstanceEventData {
@OptIn(ExperimentalUuidApi::class)
val eventId: String = Uuid.random().toString()
val eventId: String = uuid4().toString()

abstract val instanceId: String
abstract val time: Long
Expand Down
Loading

0 comments on commit 54a38c3

Please sign in to comment.