diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3d1caee0..1cd1bded 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,25 @@ concurrency: cancel-in-progress: true jobs: + python: + name: Python tooling ${{ matrix.python }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python: ['3.9', '3.14'] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} + - name: Run script regressions and source gates + run: | + python3 -B -m unittest discover -s scripts -p '*_test.py' + python3 -B scripts/verify_native_ui_boundaries.py + python3 -B scripts/verify_native_localization.py + python3 -B scripts/verify_ios_release.py + build: if: ${{ inputs.scope != 'ios' }} name: Build & Test @@ -46,15 +65,6 @@ jobs: with: cache-read-only: ${{ github.ref != 'refs/heads/main' }} - - name: Check device runner cleanup - run: python3 -B -m unittest discover -s scripts -p '*_test.py' - - - name: Enforce renderer and locale boundaries - run: | - python3 -B scripts/verify_native_ui_boundaries.py - python3 -B scripts/verify_native_localization.py - python3 -B scripts/verify_ios_release.py - # Runs common and Android host tests across all modules - name: Run host suites run: ./gradlew :core:testAndroidHostTest :shared:testAndroidHostTest :androidApp:testDebugUnitTest --continue @@ -89,6 +99,9 @@ jobs: api: ${{ fromJSON((github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && '[30, 32, 35, 36]' || '[35]') }} steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version-file: '.python-version' - uses: actions/setup-java@v4 with: distribution: temurin @@ -137,6 +150,9 @@ jobs: MAESTRO_CLI_NO_ANALYTICS: '1' steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version-file: '.python-version' - uses: actions/setup-java@v4 with: distribution: temurin diff --git a/.gitignore b/.gitignore index 7760610b..8ad21591 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml -/.kotlin/metadata/ +/.kotlin/ .DS_Store /build /captures @@ -20,3 +20,18 @@ # Argent captures and secrets are local; config and reviewed flows may be tracked. /.argent/recordings/ /.argent/secrets.env + +/.idea/firebender/ +/.idea/ChatHistory_schema_v2.xml +/.idea/ChatHistory_schema_v4.xml +/.idea/cody_history.xml +/.idea/deploymentTargetDropDown.xml +/.idea/deploymentTargetSelector.xml +/.idea/deviceManager.xml +/.idea/studiobot.xml +**/xcuserdata/ +__pycache__/ +*.py[cod] +/release-archives/ +/androidApp/release/*.aab +/androidApp/release/mapping.txt diff --git a/.idea/ChatHistory_schema_v2.xml b/.idea/ChatHistory_schema_v2.xml deleted file mode 100644 index 58efa3a4..00000000 --- a/.idea/ChatHistory_schema_v2.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/ChatHistory_schema_v4.xml b/.idea/ChatHistory_schema_v4.xml deleted file mode 100644 index 7880fd15..00000000 --- a/.idea/ChatHistory_schema_v4.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/cody_history.xml b/.idea/cody_history.xml deleted file mode 100644 index 66446cec..00000000 --- a/.idea/cody_history.xml +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - - - - - - - - - - - - </llm> - </llm> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="e16cbd25-f13a-48d1-8f8c-2327ab245a97" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="196508fb-8e8a-4e70-9ce1-76c25a74d3c1" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="bd0507af-2a69-4b73-9962-d9ebe566567e" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - <messages> - <list> - <message> - <speaker value="HUMAN" /> - <text value="I want to create a ui component in jetpack compose that is essentially an image with a rectange drawn on top of it. I know I can use Box component to achieve this. But I also need to be able to have certain sides of the rectangle behind the image and other sides drawn on top of the image. How would I achieve this?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to create a composable that draws a rectangle on top of an image with some sides behind the image: ```kotlin @Composable fun ImageWithRectangle( image: Painter, rectangleColor: Color, rectangleSize: DpSize, rectangleSides: RectangleSides = RectangleSides.ALL ) { Box { Image( painter = image, contentDescription = null ) Box( modifier = Modifier .size(rectangleSize) .drawBehind { drawRect( color = rectangleColor, size = size, topLeft = Offset(x = 0f, y = 0f), sides = rectangleSides.behindSides ) } ) { DrawScope.drawRect( color = rectangleColor, size = size, topLeft = Offset(x = 0f, y = 0f), sides = rectangleSides.frontSides ) } } } ``` The RectangleSides enum allows you to specify which sides should be drawn behind the image vs on top. And the drawBehind modifier on the inner Box draws the behind sides first before the image is drawn." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="what would the RectangleSides enum look like?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is an example implementation of the RectangleSides enum: ```kotlin enum class RectangleSides( val behindSides: Set<Side>, val frontSides: Set<Side> ) { ALL( behindSides = emptySet(), frontSides = setOf(Top, Bottom, Start, End) ), TOP( behindSides = setOf(Bottom, Start, End), frontSides = setOf(Top) ), BOTTOM( behindSides = setOf(Top, Start, End), frontSides = setOf(Bottom) ), START( behindSides = setOf(Top, Bottom, End), frontSides = setOf(Start) ), END( behindSides = setOf(Top, Bottom, Start), frontSides = setOf(End) ) } ``` It splits the rectangle sides into behind and front based on which sides you want to draw behind the image vs on top. So for example, RectangleSides.TOP would draw the top side on top of the image, and the other 3 sides behind. You could add more combinations if needed." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="there is no sides param for drawRect and drawRect will draw a rectangle with filled color I just need a rectangle with coloured edges but not filled" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, drawRect draws a filled rectangle. To draw just the outline, you can use drawOutline() instead: ```kotlin @Composable fun ImageWithRectangle( //... Box( modifier = Modifier //... ) { DrawScope.drawOutline( color = rectangleColor, shape = RectangleShape(size = size), sides = rectangleSides.frontSides ) } } enum class RectangleSides( //... val frontSides: Set<Side> ) { //... Box( modifier = Modifier //... .drawBehind { drawOutline( color = rectangleColor, shape = RectangleShape(size = size), sides = rectangleSides.behindSides ) } ) //... } ``` So this will draw just the outline of a rectangle on top and behind the image based on the specified sides." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="ok I want to draw a rounded rectangle in jetpack compose canvas but I want to use just drawArc and drawLine to achieve it. How would I do this" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to draw a rounded rectangle outline using drawArc() and drawLine() in Compose Canvas: ```kotlin @Composable fun RoundedRectangle( color: Color, size: Size, cornerRadius: Dp ) { val width = size.width val height = size.height val arcSize = cornerRadius * 2 DrawScope.drawIntoCanvas { // Draw top left arc drawArc( color = color, startAngle = 180f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = 0f, y = 0f), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw top right arc drawArc( color = color, startAngle = 270f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = width - arcSize, y = 0f), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw bottom right arc drawArc( color = color, startAngle = 0f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = width - arcSize, y = height - arcSize), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw bottom left arc drawArc( color = color, startAngle = 90f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = 0f, y = height - arcSize), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw straight lines drawLine( color = color, start = Offset(x = 0f, y = arcSize), end = Offset(x = 0f, y = height - arcSize), strokeWidth = strokeWidth ) drawLine( color = color, start = Offset(x = arcSize, y = 0f), end = Offset(x = width - arcSize, y = 0f), strokeWidth = strokeWidth ) drawLine( color = color, start = Offset(x = width, y = arcSize), end = Offset(x = width, y = height - arcSize), strokeWidth = strokeWidth ) drawLine( color = color, start = Offset(x = arcSize, y = height), end = Offset(x = width - arcSize, y = height), strokeWidth = strokeWidth ) } } ``` This draws each corner arc separately, then connects them with straight lines to create the rounded rectangle outline. You can customize the corner radius, stroke width, size etc." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="the straight lines don't reach the start of the arcs. Can you figure out why?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, there is a small gap between the start/end of the straight lines and the arcs. The reason is that the arcs are drawn with the specified corner radius size, but the lines start at the arcSize offset, not 0. To fix it, we need to adjust the start and end points of the lines to start at 0 and go to the full width/height: ```kotlin // Draw top line drawLine( color = color, start = Offset(x = 0f, y = 0f), end = Offset(x = width, y = 0f), strokeWidth = strokeWidth ) // Draw bottom line drawLine( color = color, start = Offset(x = 0f, y = height), end = Offset(x = width, y = height), strokeWidth = strokeWidth ) // Draw left line drawLine( color = color, start = Offset(x = 0f, y = 0f), end = Offset(x = 0f, y = height), strokeWidth = strokeWidth ) // Draw right line drawLine( color = color, start = Offset(x = width, y = 0f), end = Offset(x = width, y = height), strokeWidth = strokeWidth ) ``` Now the lines will start at the edge of the canvas and connect properly with the arcs." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="now they are too long" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, with those changes the lines now extend past the arcs. We need to adjust the end points to stop at the arc edge: ```kotlin // Draw top line drawLine( start = Offset(x = 0f, y = 0f), end = Offset(x = width - arcSize, y = 0f), strokeWidth = strokeWidth ) // Draw bottom line drawLine( start = Offset(x = 0f, y = height), end = Offset(x = width - arcSize, y = height), strokeWidth = strokeWidth ) // Draw left line drawLine( start = Offset(x = 0f, y = 0f), end = Offset(x = 0f, y = height - arcSize), strokeWidth = strokeWidth ) // Draw right line drawLine( start = Offset(x = width, y = 0f), end = Offset(x = width, y = height - arcSize), strokeWidth = strokeWidth ) ``` By subtracting the arcSize from the width and height, we stop the lines at the edge of the arcs. This should now draw the rounded rectangle outline correctly with smooth connections between the arcs and lines. Let me know if you have any other issues!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="I want to create a ui component in jetpack compose that is essentially an image with a rounded rectange drawn on top of it. I know I can use Box component to achieve this. But I also need to be able to have certain sides of the rectangle behind the image and other sides drawn on top of the image. How would I achieve this?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to create a composable that draws a rounded rectangle on top of an image with some sides behind the image: ```kotlin @Composable fun ImageWithRoundedRectangle( image: Painter, rectangleColor: Color, rectangleSize: DpSize, cornerRadius: Dp = 10.dp, rectangleSides: RectangleSides = RectangleSides.ALL ) { Box { Image( painter = image, contentDescription = null ) Box( modifier = Modifier .size(rectangleSize) .drawBehind { RoundedRectangle( color = rectangleColor, size = size, cornerRadius = cornerRadius, sides = rectangleSides.behindSides ) } ) { RoundedRectangle( color = rectangleColor, size = size, cornerRadius = cornerRadius, sides = rectangleSides.frontSides ) } } } @Composable fun RoundedRectangle( color: Color, size: Size, cornerRadius: Dp, sides: Set<Side> ) { // implementation from previous snippet } enum class RectangleSides { // implementation from previous snippet } ``` The key points: - Use RoundedRectangle composable to draw the shape - Pass sides set to control which sides are drawn - Use drawBehind to draw behind sides first Let me know if you have any other questions!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="can you spot why the progress indicator does not animate in the highlighted code" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here are a few things I would check to troubleshoot why the progress indicator is not animating in the provided code: - Make sure `animateProgress` is actually being set to true when the composable is called. It may be getting defaulted to false somewhere. - Check that `progress` is actually updating and changing value over time. The animation depends on the progress value changing. - The `animateProgress` boolean controls whether the `progress` value is animated, but does not itself animate anything. Make sure `progress` is being updated properly. - Try simplifying by removing the `if` check and unconditionally setting `animateProgress` to true to rule out issues with that condition. - The `progress` value is a `Float` ranging from 0 to 1. Make sure the value is changing within that range to be visible. Very small changes in the float value may not be noticeable. - Check that transitions are enabled on the `ProgressIndicator` using something like `.transition()` modifier. The animation may not be visible without transitions. - Try changing to a deterministic animation like `animateFloatAsState` instead of custom progress logic to isolate the issue. - Use logging or breakpoints to validate the `progress` value is updating as expected over time. Without seeing more of the full code, those are some things I would start investigating to troubleshoot the animation. Let me know if any other details would help narrow down the issue!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="how do I make the highlighted timer function loop indefinitely" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here are a few ways to make the highlighted timer function run indefinitely: 1. Use a while(true) loop: ``` @Composable fun Timer() { var time by remember { mutableStateOf(0) } while(true) { delay(1000) time++ } Text(text = time.toString()) } ``` 2. Use a callback with rememberCoroutineScope: ``` @Composable fun Timer() { val scope = rememberCoroutineScope() var time by remember { mutableStateOf(0) } scope.launch { while(true) { delay(1000) time++ } } Text(text = time.toString()) } ``` 3. Use LaunchedEffect: ``` @Composable fun Timer() { var time by remember { mutableStateOf(0) } LaunchedEffect(Unit) { while(true) { delay(1000) time++ } } Text(text = time.toString()) } ``` The key is to use some kind of looping logic inside a suspendable block that updates the time state. This will make the timer increment indefinitely. Let me know if you need any help implementing this!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="I have this timer function: private fun timer(seconds: Int): Flow&lt;Int&gt; = flow { for (s in 0 until (seconds + 1)) { delay(1000L) emit(s) } } How do I make it loop indefinitely" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" To make the timer function loop indefinitely with Flow, you can use a while(true) loop inside the flow builder instead of a for loop with a set number of iterations: ```kotlin private fun timer(): Flow<Int> = flow { var seconds = 0 while(true) { delay(1000L) emit(seconds++) } } ``` This will increment the seconds counter and emit the current value every 1 second, without any limit on the number of iterations. To use it: ```kotlin lifecycleScope.launchWhenCreated { timer().collect { value -> // update UI } } ``` The flow will run continuously in the coroutine scope and emit values indefinitely that you can collect to update the UI. A few key points: - Use while(true) instead of a fixed iteration loop - Increment and emit a counter value each iteration - Collect the flow in a coroutine scope - Use delay() to pause between iterations This will make the timer loop forever without stopping. Let me know if you need any help with implementing this!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="but I still want to maintain the current behaviour. Basically what I want is count up to &quot;seconds&quot; value (emiting each count). When it reaches seconds value it resets" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" To maintain the current behavior of counting up to a specified seconds value, but resetting and looping indefinitely, you can use a modulo operator (%) to reset the counter: ```kotlin private fun timer(seconds: Int): Flow<Int> = flow { var counter = 0 while(true) { delay(1000L) counter++ emit(counter % (seconds + 1)) } } ``` The key points: - Initialize counter to 0 - Increment counter each iteration - Use counter % (seconds + 1) to get remainder of division by seconds - This will reset counter to 0 once it reaches the seconds value For example: ``` seconds = 5 counter iteration values: 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2... ``` So it will count up to 5, then reset to 0, and repeat indefinitely while emitting each value. The current behavior is maintained where it counts up to the specified seconds, but it will now loop continuously without stopping. Let me know if this helps explain how to make the timer reset and repeat!" /> - </message> - </list> - </messages> - <updatedAt value="2024-03-14T03:10:30.99481" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="233e412b-231c-4570-aa95-46842aa864bf" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - <messages> - <list> - <message> - <speaker value="HUMAN" /> - <text value="the highlighted function is supposed to find the nearest time from the list of Alarm objects passed. Can you spot any bugs in the implementation" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Looking at the highlighted function, a few potential issues come to mind: - It is assuming the alarm list is not empty, but doesn't check for that. It should check `if (alarmList.isEmpty())` and return early if so. - It is force unwrapping `nearestTime` with `!!` after the null check. This is unsafe and can cause a crash if the first alarm is not enabled. It should use a safe call like `nearestTime?.let { ... }` instead. - The logic to calculate `nearestTime` looks suspicious. It gets the time for the first enabled alarm, but doesn't check if that is actually the nearest. The loop after should handle this, but seems redundant. - The time calculations use `Calendar`, which is tricky to work with. Using something like `LocalDateTime` from java.time could make the logic clearer. - There are no tests for this function, which would help catch bugs. Some unit tests validating the expected nearest time is returned would be good. So in summary, the main issues are: - No empty list handling - Potential null pointer exception - Suspicious time calculation logic - Untested complex logic Adding checks, simplifying the logic, using better date types, and adding tests would help improve the quality here." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="now fix it" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to fix up the issues in the findNearestTime function: ```kt private fun buildNearestTime( alarmList: List<Alarm>, calendar: Calendar ): Pair<Long?, Int> { if (alarmList.isEmpty()) { return Pair(null, -1) } var nearestTime: Long? = null var nearestIndex = -1 alarmList .filter { it.isOn } .forEachIndexed { index, alarm -> val alarmTime = LocalDateTime.of( calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), alarm.hour, alarm.minute ) val now = LocalDateTime.now() val timeToAlarm = ChronoUnit.MILLIS.between(now, alarmTime) if (nearestTime == null || timeToAlarm < nearestTime) { nearestTime = timeToAlarm nearestIndex = index } } return Pair(nearestTime, nearestIndex) } ``` The key changes: - Check for empty list - Use LocalDateTime instead of Calendar - Simpler nearest time calculation - No more force unwrapping Adding some unit tests would also help validate it works as expected." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="can you use kotlin time apis instead of the java ones" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, using the Kotlin date/time APIs would be better since this is a Kotlin project. Here is an updated version using kotlinx.datetime: ```kt private fun buildNearestTime( alarmList: List<Alarm>, calendar: Calendar ): Pair<Long?, Int> { if (alarmList.isEmpty()) { return Pair(null, -1) } var nearestTime: Long? = null var nearestIndex = -1 alarmList .filter { it.isOn } .forEachIndexed { index, alarm -> val alarmTime = Clock.System.now() .toLocalDateTime(TimeZone.currentSystemDefault()) .withHour(alarm.hour) .withMinute(alarm.minute) val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) val timeToAlarm = alarmTime.minus(now).inWholeMilliseconds if (nearestTime == null || timeToAlarm < nearestTime) { nearestTime = timeToAlarm nearestIndex = index } } return Pair(nearestTime, nearestIndex) } ``` The main changes: - Use kotlinx.datetime instead of java.time - Get current time using Clock - Calculate diff using inWholeMilliseconds This keeps it consistent with the rest of the Kotlin codebase." /> - </message> - </list> - </messages> - <updatedAt value="2024-03-16T16:46:40.93936" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="4e57c940-ca29-4bbd-83ef-2802d2d4c6cd" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - <messages> - <list> - <message> - <speaker value="HUMAN" /> - <text value="the highlighted function sets datasource for a mediaplayer instance. It sometimes crashes in production with IllegalStateException. How can I handle this?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here are a few ways to handle the IllegalStateException when setting the data source for the MediaPlayer: 1. Wrap the setDataSource call in a try/catch block: ``` try { player?.setDataSource(context, alarmtone) } catch (e: IllegalStateException) { // handle exception } ``` 2. Check if the MediaPlayer is in the right state before calling setDataSource: ``` if (player?.isInitialized == true) { player?.setDataSource(context, alarmtone) } ``` 3. Create a new MediaPlayer instance if the current one is in an illegal state: ``` if (player?.isInitialized == false) { player = MediaPlayer() } player?.setDataSource(context, alarmtone) ``` 4. Reset the MediaPlayer before setting the data source: ``` player?.reset() player?.setDataSource(context, alarmtone) ``` 5. Catch the exception and release the MediaPlayer before re-creating it: ``` try { player?.setDataSource(context, alarmtone) } catch (e: IllegalStateException) { player?.release() player = MediaPlayer() player?.setDataSource(context, alarmtone) } ``` The key is to check the state before calling setDataSource or handle the exception gracefully by resetting or re-creating the MediaPlayer instance." /> - </message> - </list> - </messages> - <updatedAt value="2024-03-16T17:51:38.776112" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="9f379016-11e2-4286-b209-d6995a19c8c6" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - </chat> - <chat> - <internalId value="ef1045be-a337-478f-9b54-8ee4bafbd958" /> - <llm> - <llm> - <model value="anthropic/claude-3-5-sonnet-20240620" /> - <provider value="Anthropic" /> - <title value="Claude 3.5 Sonnet" /> - </llm> - </llm> - </chat> - </list> - </chats> - <defaultLlm> - <llm> - <model value="anthropic/claude-3-5-sonnet-20240620" /> - <provider value="Anthropic" /> - <title value="Claude 3.5 Sonnet" /> - </llm> - </defaultLlm> - </AccountData> - </list> - </accountData> - <chats> - <list> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="e16cbd25-f13a-48d1-8f8c-2327ab245a97" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="196508fb-8e8a-4e70-9ce1-76c25a74d3c1" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="bd0507af-2a69-4b73-9962-d9ebe566567e" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - <messages> - <list> - <message> - <speaker value="HUMAN" /> - <text value="I want to create a ui component in jetpack compose that is essentially an image with a rectange drawn on top of it. I know I can use Box component to achieve this. But I also need to be able to have certain sides of the rectangle behind the image and other sides drawn on top of the image. How would I achieve this?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to create a composable that draws a rectangle on top of an image with some sides behind the image: ```kotlin @Composable fun ImageWithRectangle( image: Painter, rectangleColor: Color, rectangleSize: DpSize, rectangleSides: RectangleSides = RectangleSides.ALL ) { Box { Image( painter = image, contentDescription = null ) Box( modifier = Modifier .size(rectangleSize) .drawBehind { drawRect( color = rectangleColor, size = size, topLeft = Offset(x = 0f, y = 0f), sides = rectangleSides.behindSides ) } ) { DrawScope.drawRect( color = rectangleColor, size = size, topLeft = Offset(x = 0f, y = 0f), sides = rectangleSides.frontSides ) } } } ``` The RectangleSides enum allows you to specify which sides should be drawn behind the image vs on top. And the drawBehind modifier on the inner Box draws the behind sides first before the image is drawn." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="what would the RectangleSides enum look like?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is an example implementation of the RectangleSides enum: ```kotlin enum class RectangleSides( val behindSides: Set<Side>, val frontSides: Set<Side> ) { ALL( behindSides = emptySet(), frontSides = setOf(Top, Bottom, Start, End) ), TOP( behindSides = setOf(Bottom, Start, End), frontSides = setOf(Top) ), BOTTOM( behindSides = setOf(Top, Start, End), frontSides = setOf(Bottom) ), START( behindSides = setOf(Top, Bottom, End), frontSides = setOf(Start) ), END( behindSides = setOf(Top, Bottom, Start), frontSides = setOf(End) ) } ``` It splits the rectangle sides into behind and front based on which sides you want to draw behind the image vs on top. So for example, RectangleSides.TOP would draw the top side on top of the image, and the other 3 sides behind. You could add more combinations if needed." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="there is no sides param for drawRect and drawRect will draw a rectangle with filled color I just need a rectangle with coloured edges but not filled" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, drawRect draws a filled rectangle. To draw just the outline, you can use drawOutline() instead: ```kotlin @Composable fun ImageWithRectangle( //... Box( modifier = Modifier //... ) { DrawScope.drawOutline( color = rectangleColor, shape = RectangleShape(size = size), sides = rectangleSides.frontSides ) } } enum class RectangleSides( //... val frontSides: Set<Side> ) { //... Box( modifier = Modifier //... .drawBehind { drawOutline( color = rectangleColor, shape = RectangleShape(size = size), sides = rectangleSides.behindSides ) } ) //... } ``` So this will draw just the outline of a rectangle on top and behind the image based on the specified sides." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="ok I want to draw a rounded rectangle in jetpack compose canvas but I want to use just drawArc and drawLine to achieve it. How would I do this" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to draw a rounded rectangle outline using drawArc() and drawLine() in Compose Canvas: ```kotlin @Composable fun RoundedRectangle( color: Color, size: Size, cornerRadius: Dp ) { val width = size.width val height = size.height val arcSize = cornerRadius * 2 DrawScope.drawIntoCanvas { // Draw top left arc drawArc( color = color, startAngle = 180f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = 0f, y = 0f), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw top right arc drawArc( color = color, startAngle = 270f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = width - arcSize, y = 0f), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw bottom right arc drawArc( color = color, startAngle = 0f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = width - arcSize, y = height - arcSize), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw bottom left arc drawArc( color = color, startAngle = 90f, sweepAngle = 90f, useCenter = false, topLeft = Offset(x = 0f, y = height - arcSize), size = Size(arcSize, arcSize), style = Stroke(width = strokeWidth) ) // Draw straight lines drawLine( color = color, start = Offset(x = 0f, y = arcSize), end = Offset(x = 0f, y = height - arcSize), strokeWidth = strokeWidth ) drawLine( color = color, start = Offset(x = arcSize, y = 0f), end = Offset(x = width - arcSize, y = 0f), strokeWidth = strokeWidth ) drawLine( color = color, start = Offset(x = width, y = arcSize), end = Offset(x = width, y = height - arcSize), strokeWidth = strokeWidth ) drawLine( color = color, start = Offset(x = arcSize, y = height), end = Offset(x = width - arcSize, y = height), strokeWidth = strokeWidth ) } } ``` This draws each corner arc separately, then connects them with straight lines to create the rounded rectangle outline. You can customize the corner radius, stroke width, size etc." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="the straight lines don't reach the start of the arcs. Can you figure out why?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, there is a small gap between the start/end of the straight lines and the arcs. The reason is that the arcs are drawn with the specified corner radius size, but the lines start at the arcSize offset, not 0. To fix it, we need to adjust the start and end points of the lines to start at 0 and go to the full width/height: ```kotlin // Draw top line drawLine( color = color, start = Offset(x = 0f, y = 0f), end = Offset(x = width, y = 0f), strokeWidth = strokeWidth ) // Draw bottom line drawLine( color = color, start = Offset(x = 0f, y = height), end = Offset(x = width, y = height), strokeWidth = strokeWidth ) // Draw left line drawLine( color = color, start = Offset(x = 0f, y = 0f), end = Offset(x = 0f, y = height), strokeWidth = strokeWidth ) // Draw right line drawLine( color = color, start = Offset(x = width, y = 0f), end = Offset(x = width, y = height), strokeWidth = strokeWidth ) ``` Now the lines will start at the edge of the canvas and connect properly with the arcs." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="now they are too long" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, with those changes the lines now extend past the arcs. We need to adjust the end points to stop at the arc edge: ```kotlin // Draw top line drawLine( start = Offset(x = 0f, y = 0f), end = Offset(x = width - arcSize, y = 0f), strokeWidth = strokeWidth ) // Draw bottom line drawLine( start = Offset(x = 0f, y = height), end = Offset(x = width - arcSize, y = height), strokeWidth = strokeWidth ) // Draw left line drawLine( start = Offset(x = 0f, y = 0f), end = Offset(x = 0f, y = height - arcSize), strokeWidth = strokeWidth ) // Draw right line drawLine( start = Offset(x = width, y = 0f), end = Offset(x = width, y = height - arcSize), strokeWidth = strokeWidth ) ``` By subtracting the arcSize from the width and height, we stop the lines at the edge of the arcs. This should now draw the rounded rectangle outline correctly with smooth connections between the arcs and lines. Let me know if you have any other issues!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="I want to create a ui component in jetpack compose that is essentially an image with a rounded rectange drawn on top of it. I know I can use Box component to achieve this. But I also need to be able to have certain sides of the rectangle behind the image and other sides drawn on top of the image. How would I achieve this?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to create a composable that draws a rounded rectangle on top of an image with some sides behind the image: ```kotlin @Composable fun ImageWithRoundedRectangle( image: Painter, rectangleColor: Color, rectangleSize: DpSize, cornerRadius: Dp = 10.dp, rectangleSides: RectangleSides = RectangleSides.ALL ) { Box { Image( painter = image, contentDescription = null ) Box( modifier = Modifier .size(rectangleSize) .drawBehind { RoundedRectangle( color = rectangleColor, size = size, cornerRadius = cornerRadius, sides = rectangleSides.behindSides ) } ) { RoundedRectangle( color = rectangleColor, size = size, cornerRadius = cornerRadius, sides = rectangleSides.frontSides ) } } } @Composable fun RoundedRectangle( color: Color, size: Size, cornerRadius: Dp, sides: Set<Side> ) { // implementation from previous snippet } enum class RectangleSides { // implementation from previous snippet } ``` The key points: - Use RoundedRectangle composable to draw the shape - Pass sides set to control which sides are drawn - Use drawBehind to draw behind sides first Let me know if you have any other questions!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="can you spot why the progress indicator does not animate in the highlighted code" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here are a few things I would check to troubleshoot why the progress indicator is not animating in the provided code: - Make sure `animateProgress` is actually being set to true when the composable is called. It may be getting defaulted to false somewhere. - Check that `progress` is actually updating and changing value over time. The animation depends on the progress value changing. - The `animateProgress` boolean controls whether the `progress` value is animated, but does not itself animate anything. Make sure `progress` is being updated properly. - Try simplifying by removing the `if` check and unconditionally setting `animateProgress` to true to rule out issues with that condition. - The `progress` value is a `Float` ranging from 0 to 1. Make sure the value is changing within that range to be visible. Very small changes in the float value may not be noticeable. - Check that transitions are enabled on the `ProgressIndicator` using something like `.transition()` modifier. The animation may not be visible without transitions. - Try changing to a deterministic animation like `animateFloatAsState` instead of custom progress logic to isolate the issue. - Use logging or breakpoints to validate the `progress` value is updating as expected over time. Without seeing more of the full code, those are some things I would start investigating to troubleshoot the animation. Let me know if any other details would help narrow down the issue!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="how do I make the highlighted timer function loop indefinitely" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here are a few ways to make the highlighted timer function run indefinitely: 1. Use a while(true) loop: ``` @Composable fun Timer() { var time by remember { mutableStateOf(0) } while(true) { delay(1000) time++ } Text(text = time.toString()) } ``` 2. Use a callback with rememberCoroutineScope: ``` @Composable fun Timer() { val scope = rememberCoroutineScope() var time by remember { mutableStateOf(0) } scope.launch { while(true) { delay(1000) time++ } } Text(text = time.toString()) } ``` 3. Use LaunchedEffect: ``` @Composable fun Timer() { var time by remember { mutableStateOf(0) } LaunchedEffect(Unit) { while(true) { delay(1000) time++ } } Text(text = time.toString()) } ``` The key is to use some kind of looping logic inside a suspendable block that updates the time state. This will make the timer increment indefinitely. Let me know if you need any help implementing this!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="I have this timer function: private fun timer(seconds: Int): Flow&lt;Int&gt; = flow { for (s in 0 until (seconds + 1)) { delay(1000L) emit(s) } } How do I make it loop indefinitely" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" To make the timer function loop indefinitely with Flow, you can use a while(true) loop inside the flow builder instead of a for loop with a set number of iterations: ```kotlin private fun timer(): Flow<Int> = flow { var seconds = 0 while(true) { delay(1000L) emit(seconds++) } } ``` This will increment the seconds counter and emit the current value every 1 second, without any limit on the number of iterations. To use it: ```kotlin lifecycleScope.launchWhenCreated { timer().collect { value -> // update UI } } ``` The flow will run continuously in the coroutine scope and emit values indefinitely that you can collect to update the UI. A few key points: - Use while(true) instead of a fixed iteration loop - Increment and emit a counter value each iteration - Collect the flow in a coroutine scope - Use delay() to pause between iterations This will make the timer loop forever without stopping. Let me know if you need any help with implementing this!" /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="but I still want to maintain the current behaviour. Basically what I want is count up to &quot;seconds&quot; value (emiting each count). When it reaches seconds value it resets" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" To maintain the current behavior of counting up to a specified seconds value, but resetting and looping indefinitely, you can use a modulo operator (%) to reset the counter: ```kotlin private fun timer(seconds: Int): Flow<Int> = flow { var counter = 0 while(true) { delay(1000L) counter++ emit(counter % (seconds + 1)) } } ``` The key points: - Initialize counter to 0 - Increment counter each iteration - Use counter % (seconds + 1) to get remainder of division by seconds - This will reset counter to 0 once it reaches the seconds value For example: ``` seconds = 5 counter iteration values: 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2... ``` So it will count up to 5, then reset to 0, and repeat indefinitely while emitting each value. The current behavior is maintained where it counts up to the specified seconds, but it will now loop continuously without stopping. Let me know if this helps explain how to make the timer reset and repeat!" /> - </message> - </list> - </messages> - <updatedAt value="2024-03-14T03:10:30.99481" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="233e412b-231c-4570-aa95-46842aa864bf" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - <messages> - <list> - <message> - <speaker value="HUMAN" /> - <text value="the highlighted function is supposed to find the nearest time from the list of Alarm objects passed. Can you spot any bugs in the implementation" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Looking at the highlighted function, a few potential issues come to mind: - It is assuming the alarm list is not empty, but doesn't check for that. It should check `if (alarmList.isEmpty())` and return early if so. - It is force unwrapping `nearestTime` with `!!` after the null check. This is unsafe and can cause a crash if the first alarm is not enabled. It should use a safe call like `nearestTime?.let { ... }` instead. - The logic to calculate `nearestTime` looks suspicious. It gets the time for the first enabled alarm, but doesn't check if that is actually the nearest. The loop after should handle this, but seems redundant. - The time calculations use `Calendar`, which is tricky to work with. Using something like `LocalDateTime` from java.time could make the logic clearer. - There are no tests for this function, which would help catch bugs. Some unit tests validating the expected nearest time is returned would be good. So in summary, the main issues are: - No empty list handling - Potential null pointer exception - Suspicious time calculation logic - Untested complex logic Adding checks, simplifying the logic, using better date types, and adding tests would help improve the quality here." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="now fix it" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here is one way to fix up the issues in the findNearestTime function: ```kt private fun buildNearestTime( alarmList: List<Alarm>, calendar: Calendar ): Pair<Long?, Int> { if (alarmList.isEmpty()) { return Pair(null, -1) } var nearestTime: Long? = null var nearestIndex = -1 alarmList .filter { it.isOn } .forEachIndexed { index, alarm -> val alarmTime = LocalDateTime.of( calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), alarm.hour, alarm.minute ) val now = LocalDateTime.now() val timeToAlarm = ChronoUnit.MILLIS.between(now, alarmTime) if (nearestTime == null || timeToAlarm < nearestTime) { nearestTime = timeToAlarm nearestIndex = index } } return Pair(nearestTime, nearestIndex) } ``` The key changes: - Check for empty list - Use LocalDateTime instead of Calendar - Simpler nearest time calculation - No more force unwrapping Adding some unit tests would also help validate it works as expected." /> - </message> - <message> - <speaker value="HUMAN" /> - <text value="can you use kotlin time apis instead of the java ones" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" You're right, using the Kotlin date/time APIs would be better since this is a Kotlin project. Here is an updated version using kotlinx.datetime: ```kt private fun buildNearestTime( alarmList: List<Alarm>, calendar: Calendar ): Pair<Long?, Int> { if (alarmList.isEmpty()) { return Pair(null, -1) } var nearestTime: Long? = null var nearestIndex = -1 alarmList .filter { it.isOn } .forEachIndexed { index, alarm -> val alarmTime = Clock.System.now() .toLocalDateTime(TimeZone.currentSystemDefault()) .withHour(alarm.hour) .withMinute(alarm.minute) val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) val timeToAlarm = alarmTime.minus(now).inWholeMilliseconds if (nearestTime == null || timeToAlarm < nearestTime) { nearestTime = timeToAlarm nearestIndex = index } } return Pair(nearestTime, nearestIndex) } ``` The main changes: - Use kotlinx.datetime instead of java.time - Get current time using Clock - Calculate diff using inWholeMilliseconds This keeps it consistent with the rest of the Kotlin codebase." /> - </message> - </list> - </messages> - <updatedAt value="2024-03-16T16:46:40.93936" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="4e57c940-ca29-4bbd-83ef-2802d2d4c6cd" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - <messages> - <list> - <message> - <speaker value="HUMAN" /> - <text value="the highlighted function sets datasource for a mediaplayer instance. It sometimes crashes in production with IllegalStateException. How can I handle this?" /> - </message> - <message> - <speaker value="ASSISTANT" /> - <text value=" Here are a few ways to handle the IllegalStateException when setting the data source for the MediaPlayer: 1. Wrap the setDataSource call in a try/catch block: ``` try { player?.setDataSource(context, alarmtone) } catch (e: IllegalStateException) { // handle exception } ``` 2. Check if the MediaPlayer is in the right state before calling setDataSource: ``` if (player?.isInitialized == true) { player?.setDataSource(context, alarmtone) } ``` 3. Create a new MediaPlayer instance if the current one is in an illegal state: ``` if (player?.isInitialized == false) { player = MediaPlayer() } player?.setDataSource(context, alarmtone) ``` 4. Reset the MediaPlayer before setting the data source: ``` player?.reset() player?.setDataSource(context, alarmtone) ``` 5. Catch the exception and release the MediaPlayer before re-creating it: ``` try { player?.setDataSource(context, alarmtone) } catch (e: IllegalStateException) { player?.release() player = MediaPlayer() player?.setDataSource(context, alarmtone) } ``` The key is to check the state before calling setDataSource or handle the exception gracefully by resetting or re-creating the MediaPlayer instance." /> - </message> - </list> - </messages> - <updatedAt value="2024-03-16T17:51:38.776112" /> - </chat> - <chat> - <accountId value="VXNlcjoxMzI0OTc=" /> - <internalId value="9f379016-11e2-4286-b209-d6995a19c8c6" /> - <llm> - <llm> - <model value="anthropic/claude-3-sonnet-20240229" /> - <provider value="Anthropic" /> - <title value="Claude 3 Sonnet" /> - </llm> - </llm> - </chat> - </list> - </chats> - </component> -</project> \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 51c9dac3..00000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="deploymentTargetDropDown"> - <value> - <entry key="app"> - <State> - <targetSelectedWithDropDown> - <Target> - <type value="QUICK_BOOT_TARGET" /> - <deviceKey> - <Key> - <type value="VIRTUAL_DEVICE_PATH" /> - <value value="$USER_HOME$/.android/avd/Resizable_Experimental_API_34.avd" /> - </Key> - </deviceKey> - </Target> - </targetSelectedWithDropDown> - <timeTargetWasSelectedWithDropDown value="2024-03-07T17:41:46.207492Z" /> - </State> - </entry> - </value> - </component> -</project> \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml deleted file mode 100644 index f745bb20..00000000 --- a/.idea/deploymentTargetSelector.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="deploymentTargetSelector"> - <selectionStates> - <SelectionState runConfigName="app"> - <option name="selectionMode" value="DROPDOWN" /> - <DropdownSelection timestamp="2025-12-26T23:47:30.009826Z"> - <Target type="DEFAULT_BOOT"> - <handle> - <DeviceId pluginId="LocalEmulator" identifier="path=/Users/timilehin/.android/avd/Resizable.avd" /> - </handle> - </Target> - </DropdownSelection> - <DialogSelection /> - </SelectionState> - <SelectionState runConfigName="androidApp"> - <option name="selectionMode" value="DROPDOWN" /> - <DropdownSelection timestamp="2025-12-26T23:47:30.009826Z"> - <Target type="DEFAULT_BOOT"> - <handle> - <DeviceId pluginId="LocalEmulator" identifier="path=/Users/timilehin/.android/avd/Resizable.avd" /> - </handle> - </Target> - </DropdownSelection> - <DialogSelection /> - </SelectionState> - </selectionStates> - </component> -</project> \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml deleted file mode 100644 index 91f95584..00000000 --- a/.idea/deviceManager.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="DeviceTable"> - <option name="columnSorters"> - <list> - <ColumnSorterState> - <option name="column" value="Name" /> - <option name="order" value="ASCENDING" /> - </ColumnSorterState> - </list> - </option> - </component> -</project> \ No newline at end of file diff --git a/.idea/firebender/chat_history.db b/.idea/firebender/chat_history.db deleted file mode 100644 index 41b6ccbc..00000000 Binary files a/.idea/firebender/chat_history.db and /dev/null differ diff --git a/.idea/firebender/chat_history.db-shm b/.idea/firebender/chat_history.db-shm deleted file mode 100644 index 0c00072f..00000000 Binary files a/.idea/firebender/chat_history.db-shm and /dev/null differ diff --git a/.idea/firebender/chat_history.db-wal b/.idea/firebender/chat_history.db-wal deleted file mode 100644 index 2b29b9c6..00000000 Binary files a/.idea/firebender/chat_history.db-wal and /dev/null differ diff --git a/.idea/studiobot.xml b/.idea/studiobot.xml deleted file mode 100644 index 539e3b80..00000000 --- a/.idea/studiobot.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="StudioBotProjectSettings"> - <option name="shareContext" value="OptedIn" /> - </component> -</project> \ No newline at end of file diff --git a/.kotlin/errors/errors-1776470266732.log b/.kotlin/errors/errors-1776470266732.log deleted file mode 100644 index 2b7154d5..00000000 --- a/.kotlin/errors/errors-1776470266732.log +++ /dev/null @@ -1,199 +0,0 @@ -kotlin version: 2.3.0 -error message: Incremental compilation failed: null -java.io.EOFException - at java.base/java.io.DataInputStream.readFully(DataInputStream.java:210) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMapValueStorage$ReaderOverCompressedFile.get(PersistentHashMapValueStorage.java:815) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMapValueStorage.readBytes(PersistentHashMapValueStorage.java:588) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.doGet(PersistentMapImpl.java:684) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.get(PersistentMapImpl.java:621) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.get(PersistentHashMap.java:197) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.get(LazyStorage.kt:76) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.get(InMemoryStorage.kt:68) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.get(InMemoryStorage.kt:155) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.get(InMemoryStorage.kt:147) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.get(BasicMap.kt:137) - at org.jetbrains.kotlin.incremental.TrackedLookupMap.get(LookupStorage.kt:308) - at org.jetbrains.kotlin.incremental.LookupStorage.get(LookupStorage.kt:94) - at org.jetbrains.kotlin.incremental.BuildUtilKt.mapLookupSymbolsToFiles(buildUtil.kt:221) - at org.jetbrains.kotlin.incremental.BuildUtilKt.mapLookupSymbolsToFiles$default(buildUtil.kt:212) - at org.jetbrains.kotlin.incremental.dirtyFiles.DirtyFilesContainer.addByDirtySymbols(DirtyFilesContainer.kt:38) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateSourcesToCompileWithKnownChanges(JvmSourcesToCompileCalculator.kt:63) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateSourcesToCompileImpl(JvmSourcesToCompileCalculator.kt:49) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateWithClasspathSnapshot(JvmSourcesToCompileCalculator.kt:97) - at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompile(IncrementalJvmCompilerRunner.kt:60) - at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompile(IncrementalJvmCompilerRunner.kt:23) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally$lambda$0$compile(IncrementalCompilerRunner.kt:225) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:267) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:119) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) - - -error message: Daemon compilation failed: null -java.lang.Exception - at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69) - at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:224) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:143) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:107) - at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:75) - at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62) - at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62) - at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) - at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) - at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) - at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) - at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) - at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) - at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) - at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) - at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) - at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59) - at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) - at org.gradle.internal.Factories$1.create(Factories.java:31) - at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263) - at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) - at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) - at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: java.lang.AssertionError: java.lang.Exception: Could not close incremental caches in /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin: subtypes.tab, class-fq-name-to-source.tab - at org.jetbrains.kotlin.com.google.common.io.Closer.close(Closer.java:218) - at org.jetbrains.kotlin.incremental.IncrementalCachesManager.close(IncrementalCachesManager.kt:57) - at kotlin.io.CloseableKt.closeFinally(Closeable.kt:47) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:293) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:147) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - ... 3 more -Caused by: java.lang.Exception: Could not close incremental caches in /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin: subtypes.tab, class-fq-name-to-source.tab - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:95) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.close(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.com.google.common.io.Closer.close(Closer.java:205) - ... 22 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/subtypes.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.applyChanges(InMemoryStorage.kt:179) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.close(BasicMap.kt:157) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 24 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/subtypes.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 44 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.PersistentStorageWrapper.close(PersistentStorage.kt:124) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 24 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 43 more - Suppressed: java.lang.Exception: Could not close incremental caches in /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups: file-to-id.tab - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:95) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.close(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.LookupStorage.close(LookupStorage.kt:155) - ... 23 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/file-to-id.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.PersistentStorageWrapper.close(PersistentStorage.kt:124) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 25 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/file-to-id.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 44 more - - diff --git a/.kotlin/errors/errors-1776470266744.log b/.kotlin/errors/errors-1776470266744.log deleted file mode 100644 index 0c97baac..00000000 --- a/.kotlin/errors/errors-1776470266744.log +++ /dev/null @@ -1,121 +0,0 @@ -kotlin version: 2.3.0 -error message: Incremental compilation failed: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab] is already registered -java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageIfExists(LazyStorage.kt:53) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.get(LazyStorage.kt:76) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.get(InMemoryStorage.kt:68) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.get(InMemoryStorage.kt:155) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.get(InMemoryStorage.kt:147) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.get(BasicMap.kt:137) - at org.jetbrains.kotlin.incremental.storage.AbstractSourceToOutputMap.getFqNames(SourceToOutputMaps.kt:50) - at org.jetbrains.kotlin.incremental.AbstractIncrementalCache.classesFqNamesBySources(AbstractIncrementalCache.kt:115) - at org.jetbrains.kotlin.incremental.dirtyFiles.ChangesDetectionUtilsKt.getRemovedClassesChanges(changesDetectionUtils.kt:142) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateSourcesToCompileWithKnownChanges(JvmSourcesToCompileCalculator.kt:77) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateSourcesToCompileImpl(JvmSourcesToCompileCalculator.kt:49) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateWithClasspathSnapshot(JvmSourcesToCompileCalculator.kt:97) - at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompile(IncrementalJvmCompilerRunner.kt:60) - at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompile(IncrementalJvmCompilerRunner.kt:23) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally$lambda$0$compile(IncrementalCompilerRunner.kt:225) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:267) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:119) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 46 more - - -error message: Daemon compilation failed: null -java.lang.Exception - at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69) - at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:224) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:143) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:107) - at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:75) - at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62) - at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62) - at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) - at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) - at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) - at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) - at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) - at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) - at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) - at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) - at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) - at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59) - at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) - at org.gradle.internal.Factories$1.create(Factories.java:31) - at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263) - at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) - at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) - at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: java.io.IOException: Could not delete '/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm' - at org.jetbrains.kotlin.incremental.FileUtilsKt.deleteRecursivelyOrThrow(fileUtils.kt:47) - at org.jetbrains.kotlin.incremental.FileUtilsKt.deleteDirectoryContents(fileUtils.kt:38) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.cleanOrCreateDirectories(IncrementalCompilerRunner.kt:321) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:290) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:147) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - ... 3 more - - diff --git a/.kotlin/errors/errors-1776470276603.log b/.kotlin/errors/errors-1776470276603.log deleted file mode 100644 index 38ac502e..00000000 --- a/.kotlin/errors/errors-1776470276603.log +++ /dev/null @@ -1,235 +0,0 @@ -kotlin version: 2.3.0 -error message: Incremental compilation failed: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/lookups.tab] is already registered -java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/lookups.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageIfExists(LazyStorage.kt:53) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getKeys(LazyStorage.kt:67) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.getKeys(InMemoryStorage.kt:50) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.getKeys(BasicMap.kt:126) - at org.jetbrains.kotlin.incremental.TrackedLookupMap.getKeys(LookupStorage.kt:306) - at org.jetbrains.kotlin.incremental.LookupStorage.getLookupSymbols(LookupStorage.kt:89) - at org.jetbrains.kotlin.incremental.classpathDiff.ClasspathSnapshotShrinker.shrinkClasspath$lambda$0(ClasspathSnapshotShrinker.kt:37) - at org.jetbrains.kotlin.incremental.classpathDiff.ClasspathSnapshotShrinker$MetricsReporter.getLookupSymbols(ClasspathSnapshotShrinker.kt:324) - at org.jetbrains.kotlin.incremental.classpathDiff.ClasspathSnapshotShrinker.shrinkClasspath(ClasspathSnapshotShrinker.kt:36) - at org.jetbrains.kotlin.incremental.snapshots.LazyClasspathSnapshot.getComputedShrunkClasspathAgainstPreviousLookups(LazyClasspathSnapshot.kt:69) - at org.jetbrains.kotlin.incremental.classpathDiff.ClasspathChangesComputer.computeClasspathChanges(ClasspathChangesComputer.kt:42) - at org.jetbrains.kotlin.incremental.dirtyFiles.ClasspathSnapshotBasedImpactDeterminer.determineChangedAndImpactedSymbols(ClasspathSnapshotBasedImpactDeterminer.kt:42) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateSourcesToCompileImpl(JvmSourcesToCompileCalculator.kt:41) - at org.jetbrains.kotlin.incremental.dirtyFiles.JvmSourcesToCompileCalculator.calculateWithClasspathSnapshot(JvmSourcesToCompileCalculator.kt:97) - at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompile(IncrementalJvmCompilerRunner.kt:60) - at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompile(IncrementalJvmCompilerRunner.kt:23) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally$lambda$0$compile(IncrementalCompilerRunner.kt:225) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:267) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:119) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/lookups.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 48 more - - -error message: Daemon compilation failed: null -java.lang.Exception - at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69) - at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:224) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:143) - at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:107) - at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:75) - at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62) - at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62) - at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) - at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) - at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) - at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) - at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) - at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) - at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) - at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) - at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) - at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41) - at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59) - at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) - at org.gradle.internal.Factories$1.create(Factories.java:31) - at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263) - at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) - at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164) - at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133) - at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) - at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) - at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: java.lang.AssertionError: java.lang.Exception: Could not close incremental caches in /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin: class-attributes.tab, supertypes.tab - at org.jetbrains.kotlin.com.google.common.io.Closer.close(Closer.java:218) - at org.jetbrains.kotlin.incremental.IncrementalCachesManager.close(IncrementalCachesManager.kt:57) - at kotlin.io.CloseableKt.closeFinally(Closeable.kt:47) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:293) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:147) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - ... 3 more -Caused by: java.lang.Exception: Could not close incremental caches in /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin: class-attributes.tab, supertypes.tab - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:95) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.close(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.com.google.common.io.Closer.close(Closer.java:205) - ... 22 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.PersistentStorageWrapper.close(PersistentStorage.kt:124) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 24 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 43 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/supertypes.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.applyChanges(InMemoryStorage.kt:179) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.close(BasicMap.kt:157) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 24 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/supertypes.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 44 more - Suppressed: java.lang.Exception: Could not close incremental caches in /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups: id-to-file.tab, lookups.tab - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:95) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.close(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.LookupStorage.close(LookupStorage.kt:155) - ... 23 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/id-to-file.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.PersistentStorageWrapper.close(PersistentStorage.kt:124) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 25 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/id-to-file.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 44 more - Suppressed: java.lang.IllegalStateException: Storage for [/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/lookups.tab] is already registered - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:410) - at org.jetbrains.kotlin.com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:72) - at org.jetbrains.kotlin.com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:68) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:128) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:52) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:165) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:140) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:88) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:71) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:46) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:72) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.createMap(LazyStorage.kt:62) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.getStorageOrCreateNew(LazyStorage.kt:59) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.set(LazyStorage.kt:80) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.applyChanges(InMemoryStorage.kt:108) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.applyChanges(InMemoryStorage.kt:179) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.close(InMemoryStorage.kt:136) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.close(BasicMap.kt:157) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner$close$1.invoke(BasicMapsOwner.kt:53) - at org.jetbrains.kotlin.incremental.storage.BasicMapsOwner.forEachMapSafe(BasicMapsOwner.kt:87) - ... 25 more - Suppressed: java.lang.Exception: Storage[/Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugUnitTestKotlinAndroid/cacheable/caches-jvm/lookups/lookups.tab] registration stack trace - at org.jetbrains.kotlin.com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:437) - ... 45 more - - diff --git a/.kotlin/errors/errors-1776470276634.log b/.kotlin/errors/errors-1776470276634.log deleted file mode 100644 index 7112bcd8..00000000 --- a/.kotlin/errors/errors-1776470276634.log +++ /dev/null @@ -1,52 +0,0 @@ -kotlin version: 2.3.0 -error message: Incremental compilation failed: Storage corrupted /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i -java.lang.AssertionError: Storage corrupted /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i - at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:83) - at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.error(Logger.java:436) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumeratorBase.catchCorruption(PersistentEnumeratorBase.java:689) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumeratorBase.doEnumerate(PersistentEnumeratorBase.java:265) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumeratorBase.tryEnumerate(PersistentEnumeratorBase.java:256) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.doGet(PersistentMapImpl.java:663) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentMapImpl.get(PersistentMapImpl.java:621) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentHashMap.get(PersistentHashMap.java:197) - at org.jetbrains.kotlin.incremental.storage.LazyStorage.get(LazyStorage.kt:76) - at org.jetbrains.kotlin.incremental.storage.InMemoryStorage.get(InMemoryStorage.kt:68) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.get(InMemoryStorage.kt:155) - at org.jetbrains.kotlin.incremental.storage.AppendableInMemoryStorage.get(InMemoryStorage.kt:147) - at org.jetbrains.kotlin.incremental.storage.AppendableSetBasicMap.get(BasicMap.kt:137) - at org.jetbrains.kotlin.incremental.AbstractIncrementalCache.getSupertypesOf(AbstractIncrementalCache.kt:121) - at org.jetbrains.kotlin.incremental.BuildUtilKt.findSealedSupertypes(buildUtil.kt:270) - at org.jetbrains.kotlin.incremental.AbstractIncrementalCache.getComplementaryFilesRecursive(AbstractIncrementalCache.kt:331) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:473) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:418) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally$lambda$0$compile(IncrementalCompilerRunner.kt:249) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:267) - at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:119) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:684) - at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:94) - at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1810) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) - at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) - at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) - at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) - at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) - at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) - at java.base/java.lang.Thread.run(Thread.java:1583) -Caused by: org.jetbrains.kotlin.com.intellij.util.io.CorruptedException: Storage corrupted /Users/timilehin/AndroidStudioProjects/MathAlarm/app/build/kotlin/compileDebugKotlinAndroid/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i - at org.jetbrains.kotlin.com.intellij.util.io.IntToIntBtree$BtreeIndexNodeView.locate(IntToIntBtree.java:911) - at org.jetbrains.kotlin.com.intellij.util.io.IntToIntBtree$BtreeIndexNodeView.access$100(IntToIntBtree.java:308) - at org.jetbrains.kotlin.com.intellij.util.io.IntToIntBtree.get(IntToIntBtree.java:177) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentBTreeEnumerator.enumerateImpl(PersistentBTreeEnumerator.java:584) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumeratorBase.lambda$doEnumerate$0(PersistentEnumeratorBase.java:266) - at org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumeratorBase.catchCorruption(PersistentEnumeratorBase.java:671) - ... 36 more - - diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..6324d401 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.14 diff --git a/androidApp/release/androidApp-release.aab b/androidApp/release/androidApp-release.aab deleted file mode 100644 index 4c0a6fa1..00000000 Binary files a/androidApp/release/androidApp-release.aab and /dev/null differ diff --git a/core/build.gradle.kts b/core/build.gradle.kts index bbbdbb26..a899d8da 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -5,10 +5,6 @@ plugins { } kotlin { - - // Target declarations - add or remove as needed below. These define - // which platforms this KMP module supports. - // See: https://kotlinlang.org/docs/multiplatform-discover-project.html#targets android { namespace = "com.timilehinaregbesola.mathalarm.core" compileSdk = libs.versions.android.compile.sdk.get().toInt() @@ -24,38 +20,9 @@ kotlin { } } - // For iOS targets, this is also where you should - // configure native binary output. For more information, see: - // https://kotlinlang.org/docs/multiplatform-build-native-binaries.html#build-xcframeworks - - // A step-by-step guide on how to include this library in an XCode - // project can be found here: - // https://developer.android.com/kotlin/multiplatform/migrate - val xcfName = "appcoreKit" - - iosX64 { - binaries.framework { - baseName = xcfName - } - } - - iosArm64 { - binaries.framework { - baseName = xcfName - } - } - - iosSimulatorArm64 { - binaries.framework { - baseName = xcfName - } - } + iosArm64() + iosSimulatorArm64() - // Source set declarations. - // Declaring a target automatically creates a source set with the same name. By default, the - // Kotlin Gradle Plugin creates additional source sets that depend on each other, since it is - // common to share sources between related targets. - // See: https://kotlinlang.org/docs/multiplatform-hierarchy.html sourceSets { commonMain { dependencies { @@ -72,14 +39,6 @@ kotlin { } } - androidMain { - dependencies { - // Add Android-specific dependencies here. Note that this source set depends on - // commonMain by default and will correctly pull the Android artifacts of any KMP - // dependencies declared in commonMain. - } - } - getByName("androidDeviceTest") { dependencies { implementation(libs.androidx.runner) @@ -87,16 +46,5 @@ kotlin { implementation(libs.androidx.test.ext.junit) } } - - iosMain { - dependencies { - // Add iOS-specific dependencies here. This a source set created by Kotlin Gradle - // Plugin (KGP) that each specific iOS target (e.g., iosX64) depends on as - // part of KMP’s default source set hierarchy. Note that this source set depends - // on common by default and will correctly pull the iOS artifacts of any - // KMP dependencies declared in commonMain. - } - } } - } diff --git a/docs/release-artifacts.md b/docs/release-artifacts.md new file mode 100644 index 00000000..50cdfa81 --- /dev/null +++ b/docs/release-artifacts.md @@ -0,0 +1,31 @@ +# Preserved Android release artifact + +The cleanup on 2026-11-06 removes `androidApp/release/androidApp-release.aab` +from the Git index. The original file remains on disk. An identical local copy is +under `release-archives/android/3a7fe59491b8e0ab9019040cbb01cff57b745291e83f199b73bc52b65fb20361/androidApp-release.aab`. +That ignored directory also contains `manifest.json` and `SHA256SUMS`. + +The archive records the existing binary, without rebuilding or changing it. +Its signing and distribution acceptance have not been revalidated. + +- Source commit: `d081490e0be83e0ca3b4f561fa4d3bf22115a147`. +- Git blob: `4c0a6fa19c046ab46f618032f7b1b11b03131126`. +- Size: 11904346 bytes. +- SHA-256: `3a7fe59491b8e0ab9019040cbb01cff57b745291e83f199b73bc52b65fb20361`. + +Verify the preserved local copy from its archive directory: + +```sh +shasum -a 256 -c SHA256SUMS +``` + +The local archive is not distributed with a fresh clone. The original binary +remains in Git history and can be recovered without changing the working tree: + +```sh +git show d081490:androidApp/release/androidApp-release.aab > /tmp/androidApp-release.aab +shasum -a 256 /tmp/androidApp-release.aab +``` + +Future release bundles and mappings belong in release storage or ignored local +archives. Shared IDE code styles and Xcode schemes remain versioned. diff --git a/docs/testing.md b/docs/testing.md index a46eb956..e93a0194 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -116,8 +116,24 @@ telemetry success cannot close those gates. Preserve the evidence root before cleaning build artifacts; remove only task-owned fixtures/devices after recording their results. +## Supported native build targets + +The iOS app links the `app` framework from `shared`, which exports `core`. +Both modules build Kotlin libraries for `iosArm64` and `iosSimulatorArm64`. +The Xcode project excludes Intel simulator builds. There is no standalone +`appcoreKit` framework or published core library in this repository. + ## Fast checks (every PR) +Repository verification scripts support Python 3.9 or newer. Python 3.14 is the +recommended interpreter in `.python-version`; CI tests both 3.9 and 3.14. Asset +generation scripts document their separate third-party dependencies. +Confirm the interpreter before running the checks: + +```sh +python3 -c 'import sys; sys.exit("Python 3.9 or newer is required" if sys.version_info < (3, 9) else 0)' +``` + ```sh ./gradlew :core:testAndroidHostTest :shared:testAndroidHostTest :androidApp:testDebugUnitTest --continue python3 -B -m unittest discover -s scripts -p '*_test.py' diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/UserInterfaceState.xcuserstate b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index e5eae231..00000000 Binary files a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/WorkspaceSettings.xcsettings b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/WorkspaceSettings.xcsettings deleted file mode 100644 index 723a561c..00000000 --- a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>BuildLocationStyle</key> - <string>UseAppPreferences</string> - <key>CompilationCachingSetting</key> - <string>Default</string> - <key>CustomBuildLocationType</key> - <string>RelativeToDerivedData</string> - <key>DerivedDataLocationStyle</key> - <string>Default</string> - <key>ShowSharedSchemesAutomaticallyEnabled</key> - <true/> -</dict> -</plist> diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/xcschemes/xcschememanagement.plist b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index ee3458dd..00000000 --- a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcuserdata/timilehin.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict /> -</plist> diff --git a/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 8a11e749..00000000 --- a/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,72 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Bucket - uuid = "3AF95D99-FEFA-4315-BCBF-8112E642E1E5" - type = "1" - version = "2.0"> - <Breakpoints> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - uuid = "8D31FD86-810D-4547-A46E-ECF19241E8A9" - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "iosApp/AlarmKitWrapper.swift" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "115" - endingLineNumber = "115" - landmarkName = "unknown" - landmarkType = "0"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - uuid = "A68095DB-2952-4922-B1F4-143807F54EA3" - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "iosApp/AlarmKitWrapper.swift" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "578" - endingLineNumber = "578" - landmarkName = "scheduleWithAlarmKit(alarmId:hour:minute:title:soundName:repeatDays:snoozeMinutes:vibrate:difficulty:repeats:)" - landmarkType = "7"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - uuid = "BE5D18CA-C876-456C-8D58-D20208F937CA" - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "iosApp/AlarmKitWrapper.swift" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "579" - endingLineNumber = "579" - landmarkName = "scheduleWithAlarmKit(alarmId:hour:minute:title:soundName:repeatDays:snoozeMinutes:vibrate:difficulty:repeats:)" - landmarkType = "7"> - </BreakpointContent> - </BreakpointProxy> - <BreakpointProxy - BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> - <BreakpointContent - uuid = "E7F800A1-EC4A-4737-9063-ABACEAC8B753" - shouldBeEnabled = "No" - ignoreCount = "0" - continueAfterRunningActions = "No" - filePath = "iosApp/AlarmKitWrapper.swift" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "580" - endingLineNumber = "580" - landmarkName = "scheduleWithAlarmKit(alarmId:hour:minute:title:soundName:repeatDays:snoozeMinutes:vibrate:difficulty:repeats:)" - landmarkType = "7"> - </BreakpointContent> - </BreakpointProxy> - </Breakpoints> -</Bucket> diff --git a/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcschemes/iosApp.xcscheme b/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcschemes/iosApp.xcscheme deleted file mode 100644 index d8c91039..00000000 --- a/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcschemes/iosApp.xcscheme +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Scheme - version = "1.7"> - <BuildAction - parallelizeBuildables = "YES" - buildImplicitDependencies = "YES"> - <BuildActionEntries> - <BuildActionEntry - buildForTesting = "YES" - buildForRunning = "YES" - buildForProfiling = "YES" - buildForArchiving = "YES" - buildForAnalyzing = "YES"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7555FF7A242A565900829871" - BuildableName = "MathAlarm.app" - BlueprintName = "iosApp" - ReferencedContainer = "container:iosApp.xcodeproj"> - </BuildableReference> - </BuildActionEntry> - </BuildActionEntries> - </BuildAction> - <TestAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - shouldAutocreateTestPlan = "YES"> - </TestAction> - <LaunchAction - buildConfiguration = "Debug" - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" - useCustomWorkingDirectory = "NO" - ignoresPersistentStateOnLaunch = "NO" - debugDocumentVersioning = "YES" - debugServiceExtension = "internal" - allowLocationSimulation = "YES"> - <BuildableProductRunnable - runnableDebuggingMode = "0"> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "7555FF7A242A565900829871" - BuildableName = "MathAlarm.app" - BlueprintName = "iosApp" - ReferencedContainer = "container:iosApp.xcodeproj"> - </BuildableReference> - </BuildableProductRunnable> - </LaunchAction> - <ProfileAction - buildConfiguration = "Release" - shouldUseLaunchSchemeArgsEnv = "YES" - savedToolIdentifier = "" - useCustomWorkingDirectory = "NO" - debugDocumentVersioning = "YES"> - </ProfileAction> - <AnalyzeAction - buildConfiguration = "Debug"> - </AnalyzeAction> - <ArchiveAction - buildConfiguration = "Release" - revealArchiveInOrganizer = "YES"> - </ArchiveAction> -</Scheme> diff --git a/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcschemes/xcschememanagement.plist b/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index fa59f97d..00000000 --- a/iosApp/iosApp.xcodeproj/xcuserdata/timilehin.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>SchemeUserState</key> - <dict> - <key>iosApp.xcscheme</key> - <dict> - <key>orderHint</key> - <integer>0</integer> - </dict> - </dict> -</dict> -</plist> diff --git a/scripts/verify_native_ui_boundaries.py b/scripts/verify_native_ui_boundaries.py index bfd5b6e7..76478caf 100644 --- a/scripts/verify_native_ui_boundaries.py +++ b/scripts/verify_native_ui_boundaries.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 """Check the approved native renderer boundaries in production source and framework exports.""" +from __future__ import annotations + import argparse import pathlib import re diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 1884c26f..d0d59588 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -9,7 +9,6 @@ plugins { alias(libs.plugins.native.coroutines) } -// Room KMP configuration room { schemaDirectory("$projectDir/schemas") } @@ -85,7 +84,6 @@ kotlin { } dependencies { - // Room KMP - compiler for each platform add("kspAndroid", libs.androidx.room.compiler) add("kspIosArm64", libs.androidx.room.compiler) add("kspIosSimulatorArm64", libs.androidx.room.compiler)