| /* |
| * Copyright (C) 2022 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import androidx.build.LibraryType |
| import org.jetbrains.kotlin.gradle.tasks.KotlinCompile |
| |
| import java.security.MessageDigest |
| import java.util.stream.Collectors |
| |
| plugins { |
| id("AndroidXPlugin") |
| id("AndroidXComposePlugin") |
| id("com.android.library") |
| id("org.jetbrains.kotlin.android") |
| } |
| |
| dependencies { |
| api(libs.kotlinStdlib) |
| |
| def composeVersion = '1.4.2' |
| |
| implementation(libs.kotlinStdlibCommon) |
| implementation("androidx.profileinstaller:profileinstaller:1.3.0") |
| |
| api("androidx.annotation:annotation:1.5.0") |
| api("androidx.compose.animation:animation:$composeVersion") |
| api("androidx.compose.runtime:runtime:$composeVersion") |
| |
| api(project(":compose:foundation:foundation")) |
| api("androidx.compose.ui:ui:$composeVersion") |
| api("androidx.compose.foundation:foundation-layout:$composeVersion") |
| api("androidx.compose.ui:ui-graphics:$composeVersion") |
| api("androidx.compose.ui:ui-text:$composeVersion") |
| api("androidx.compose.ui:ui-util:$composeVersion") |
| |
| implementation('androidx.media3:media3-exoplayer:1.0.0-beta03') |
| |
| androidTestImplementation(libs.truth) |
| androidTestImplementation(project(":compose:runtime:runtime")) |
| androidTestImplementation(project(":compose:ui:ui-test")) |
| androidTestImplementation(project(":compose:ui:ui-test-junit4")) |
| androidTestImplementation(project(":compose:test-utils")) |
| androidTestImplementation(libs.testRunner) |
| } |
| |
| android { |
| namespace "androidx.tv.foundation" |
| defaultConfig { |
| minSdkVersion 21 |
| } |
| lintOptions { |
| disable 'IllegalExperimentalApiUsage' // TODO (b/233188423): Address before moving to beta |
| } |
| } |
| |
| androidx { |
| name = "androidx.tv:tv-foundation" |
| type = LibraryType.PUBLISHED_LIBRARY |
| inceptionYear = "2022" |
| description = "This library makes it easier for developers" + |
| "to write Jetpack Compose applications for TV devices by providing " + |
| "functionality to support TV specific devices sizes, shapes and d-pad navigation " + |
| "supported components. It builds upon the Jetpack Compose libraries." |
| targetsJavaConsumers = false |
| } |
| |
| // Functions and tasks to monitor changes in copied files. |
| |
| task generateMd5 { |
| ext.genMd5 = { fileNameToHash -> |
| MessageDigest digest = MessageDigest.getInstance("MD5") |
| file(fileNameToHash).withInputStream(){is-> |
| byte[] buffer = new byte[8192] |
| int read = 0 |
| while( (read = is.read(buffer)) > 0) { |
| digest.update(buffer, 0, read); |
| } |
| } |
| byte[] md5sum = digest.digest() |
| BigInteger bigInt = new BigInteger(1, md5sum) |
| bigInt.toString(16).padLeft(32, '0') |
| } |
| |
| doLast { |
| String hashValue = genMd5(file) |
| print "value=" |
| println hashValue |
| } |
| } |
| |
| List<CopiedClass> copiedClasses = new ArrayList<>(); |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt", |
| "src/main/java/androidx/tv/foundation/ScrollableWithPivot.kt", |
| "01908be77830b70de53736dfab57d9db" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/DataIndex.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/DataIndex.kt", |
| "2aa3c6d2dd05057478e723b2247517e1" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScopeImpl.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl.kt", |
| "37cb0caf8a170a4161da346806c7a236" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListHeaders.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListHeaders.kt", |
| "4d71c69f9cb38f741da9cfc4109567dd" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemPlacementAnimator.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt", |
| "b27d616f6e4758d9e5cfd721cd74f696" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListItemProvider.kt", |
| "79d9698efce71af7507adb1f1f13d587" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyList.kt", |
| "9ad614f60b201360f2c276678674a09d" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasure.kt", |
| "a209b6cf2bcd8a0aff71488ab28c215f" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasureResult.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasureResult.kt", |
| "5cc9c72197679de004d98b73ffacf038" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListScopeImpl.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListScopeImpl.kt", |
| "fab951ddba90c5c5426e4d0104bc9929" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListScrollPosition.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListScrollPosition.kt", |
| "08d08515f25eb3032f6efbf9f86be102" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListState.kt", |
| "15ed411b8761387c1c0602b68185e312" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyMeasuredItem.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItem.kt", |
| "a42bc6b7859e14871492ff27ca9bd9a2" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyMeasuredItemProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyMeasuredItemProvider.kt", |
| "0dcde73635efe26203f70351437cb6fa" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListSemantics.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazySemantics.kt", |
| "3a1e86a55ea2282c12745717b5a60cfd" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/ItemIndex.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/ItemIndex.kt", |
| "1031b8b91a81c684b3c4584bc93d3fb0" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridDsl.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridDsl.kt", |
| "6a0b2db56ef38fb1ac004e4fc9847db8" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemInfo.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemInfo.kt", |
| "1f3b13ee45de79bc67ace4133e634600" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator.kt", |
| "bf426a9ae63c2195a88cb382e9e8033e" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemScopeImpl.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemScopeImpl.kt", |
| "b3ff4600791c73028b8661c0e2b49110" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemScope.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemScope.kt", |
| "1a40313cc5e67b5808586c012bbfb058" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemProvider.kt", |
| "838dc7602c43c0210a650340110f5f94" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGrid.kt", |
| "c63daa5bd3a004f08fc14a510765b681" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridLayoutInfo.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfo.kt", |
| "20f7055a2556d1c8ccd12873b1d8af2a" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasure.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridMeasure.kt", |
| "65b541f64ffc6267ebe7852497a4f37f" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasureResult.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult.kt", |
| "1a9f3308a5865beb6b53f547493f8d20" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScopeImpl.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridScopeImpl.kt", |
| "e92ebc01a8b205d304e0b0d3c40636f8" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScopeMarker.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridScopeMarker.kt", |
| "0b7ff258a80e2413f89d56ab0ef41b46" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScrollPosition.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridScrollPosition.kt", |
| "70bac76aeb2617b8f5c706f1867800fd" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridSpan.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridSpan.kt", |
| "cc63cb4f05cc556e8fcf7504ac0ea57c" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider.kt", |
| "2a794820a36acc55a13d95fd65d03f45" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridState.kt", |
| "0e55034861317320888b77f5183b326f" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasuredItem.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItem.kt", |
| "8bbfd4cdd2d1f090f51ffb0f2d625309" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyMeasuredItemProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider.kt", |
| "e36c6adfcd6cef885600d62775de0917" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasuredLine.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLine.kt", |
| "dedf02d724fb6d470f9566dbf6a260f9" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider.kt", |
| "04949bb943c61f7a18358c3e5543318e" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazySemantics.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazySemantics.kt", |
| "bb397307f2cc3fd87bcc7585bf403039" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyDsl.kt", |
| "9d86fad30c0f3de2231fbef3f63db53e" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyScopeMarker.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListScopeMarker.kt", |
| "f7b72b3c6bad88868153300b9fbdd922" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemScope.kt", |
| "6254294540cfadf2d6da1bbbce1611e8" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemInfo.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemInfo.kt", |
| "7571daa18ca079fd6de31d37c3022574" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/TvLazyListLayoutInfo.kt", |
| "1e2ff3f4fcaa528d1011f32c8a87e100" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutSemantics.kt", |
| "src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutSemantics.kt", |
| "8b9e4a03c5097b4ef7377f98da95bbcd" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt", |
| "src/main/java/androidx/tv/foundation/lazy/layout/LazyAnimateScroll.kt", |
| "f9d4a924665f65ac319b6071358431b9" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyGridAnimateScrollScope.kt", |
| "d07400716d6139405135ffbfe042b762" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListAnimateScrollScope.kt", |
| "c769969ce9a74ee6006d1c0b76b47095" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ContentInViewModifier.kt", |
| "src/main/java/androidx/tv/foundation/ContentInViewModifier.kt", |
| "6dec263110d0fe60021cf6fb9c93bd90" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutSemanticState.kt", |
| "src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutSemanticState.kt", |
| "ad" |
| ) |
| ) |
| |
| String generateMd5(String fileNameToHash) { |
| try { |
| MessageDigest digest = MessageDigest.getInstance("MD5") |
| file(fileNameToHash).withInputStream() { is -> |
| byte[] buffer = new byte[8192] |
| int read |
| while ((read = is.read(buffer)) > 0) { |
| digest.update(buffer, 0, read); |
| } |
| } |
| byte[] md5sum = digest.digest() |
| BigInteger bigInt = new BigInteger(1, md5sum) |
| bigInt.toString(16).padLeft(32, '0') |
| } catch (Exception e) { |
| throw new GradleException("Failed for file=$fileNameToHash", e) |
| } |
| } |
| |
| task printCopiedClasses { |
| doLast { |
| copiedClasses.forEach(copiedClass -> { |
| String actualMd5 = generateMd5(copiedClass.originalFilePath) |
| System.out.println(copiedClass.toString(actualMd5)) |
| }) |
| } |
| } |
| |
| task doCopiesNeedUpdate { |
| doLast { |
| List<String> failureFiles = new ArrayList<>() |
| boolean failures = false |
| copiedClasses.forEach(copiedClass -> { |
| assert file(copiedClass.originalFilePath).exists() |
| assert file(copiedClass.copyFilePath).exists() |
| try { |
| String actualMd5 = generateMd5(copiedClass.originalFilePath) |
| if (copiedClass.lastKnownGoodHash != actualMd5) { |
| failureFiles.add(copiedClass.toString()+ "\nactual= " + actualMd5 + "\n") |
| } |
| } catch (Exception e) { |
| logger.error("Failed for file=${copiedClass.originalFilePath}", e) |
| failures = true |
| } |
| }) |
| |
| if (!failureFiles.isEmpty()) { |
| throw new GradleException( |
| "Files that were copied have been updated at the source. " + |
| "Please update the copy and then" + |
| " update the hash in the compose-foundation build.gradle file." + |
| failureFiles.stream().collect(Collectors.joining("\n", "\n", "")) + "\ncount=${failureFiles.size()}") |
| } |
| |
| if (failures) { |
| throw new GradleException("There were errors. Check the logs.") |
| } |
| } |
| } |
| |
| class CopiedClass { |
| String originalFilePath |
| String copyFilePath |
| String lastKnownGoodHash |
| |
| CopiedClass(String originalFilePath, String copyFilePath, String lastKnownGoodHash) { |
| this.originalFilePath = originalFilePath |
| this.copyFilePath = copyFilePath |
| this.lastKnownGoodHash = lastKnownGoodHash |
| } |
| |
| @Override |
| String toString() { |
| return "originalFilePath='" + originalFilePath + '\'\n' + |
| "copyFilePath='" + copyFilePath + '\'\n' + |
| "lastKnownGoodHash='" + lastKnownGoodHash + '\'\n' + |
| "diffCmd='" + "kdiff3 " + originalFilePath + " " + copyFilePath + "\'" |
| } |
| |
| String toString(String actualHash) { |
| return "copiedClasses.add(\n" + |
| " new CopiedClass(\n" + |
| " \"$originalFilePath\",\n" + |
| " \"$copyFilePath\",\n" + |
| " \"$actualHash\"\n" + |
| " )\n" + |
| ")\n" |
| } |
| } |