| /* |
| * 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. |
| */ |
| |
| /** |
| * This file was created using the `create_project.py` script located in the |
| * `<AndroidX root>/development/project-creator` directory. |
| * |
| * Please use that script when creating a new project, rather than copying an existing project and |
| * modifying its settings. |
| */ |
| 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) |
| |
| implementation("androidx.profileinstaller:profileinstaller:1.3.1") |
| |
| def composeVersion = "1.6.4" |
| api("androidx.annotation:annotation:$composeVersion") |
| api("androidx.compose.animation:animation:$composeVersion") |
| api("androidx.compose.foundation:foundation:$composeVersion") |
| api("androidx.compose.foundation:foundation-layout:$composeVersion") |
| api("androidx.compose.runtime:runtime:$composeVersion") |
| api("androidx.compose.ui:ui-util:$composeVersion") |
| api("androidx.compose.ui:ui:$composeVersion") |
| api("androidx.compose.ui:ui-graphics:$composeVersion") |
| api("androidx.compose.ui:ui-text:$composeVersion") |
| |
| 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 |
| } |
| } |
| |
| androidx { |
| name = "TV Foundation" |
| type = LibraryType.PUBLISHED_LIBRARY_ONLY_USED_BY_KOTLIN_CONSUMERS |
| mavenVersion = LibraryVersions.TV |
| 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." |
| legacyDisableKotlinStrictApiMode = true |
| } |
| |
| // 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", |
| "4aa8f903a2cba4d46b6c4cc586c32a2a" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItemProvider.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasuredItemProvider.kt", |
| "4aa8f903a2cba4d46b6c4cc586c32a2a" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier.kt", |
| "src/main/java/androidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier.kt", |
| "blah" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo.kt", |
| "src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo.kt", |
| "blah" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState.kt", |
| "src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState.kt", |
| "blah" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Scroll.kt", |
| "/src/main/java/androidx/tv/foundation/Scroll.kt", |
| "blah" |
| ) |
| ) |
| |
| 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", |
| "blah" |
| ) |
| ) |
| |
| 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", |
| "8196242113087ee01151552389745b14" |
| ) |
| ) |
| |
| 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", |
| "5b7d3ccdb09f41ec7790991ca313b734" |
| ) |
| ) |
| |
| 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", |
| "77cfe176fc4cc7b23b6d68a565882ef6" |
| ) |
| ) |
| |
| 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", |
| "e1be5cb2c26c41e37693fc8ba0c82816" |
| ) |
| ) |
| |
| 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", |
| "50a01ef362751d7636de8cb125c25c24" |
| ) |
| ) |
| |
| 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", |
| "2d303e4008b8f691d2fba800f2cff10b" |
| ) |
| ) |
| |
| 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", |
| "f6a82da105a11e3037353ddf71a06bd8" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt", |
| "src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasuredItem.kt", |
| "5cc9c72197679de004d98b73ffacf038" |
| ) |
| ) |
| |
| 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", |
| "a3578c4eadde6e9b2d65ac8dda25a1bb" |
| ) |
| ) |
| |
| 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", |
| "7272cbf1f7ad406ecebbaedff50eea88" |
| ) |
| ) |
| |
| 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", |
| "f644c8b799080ef0a96cdcbea698603d" |
| ) |
| ) |
| |
| 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", |
| "fbaec87a3693a10268a5bf03638adb03" |
| ) |
| ) |
| |
| 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", |
| "b64314b3d025d726c18016c2159fcaf0" |
| ) |
| ) |
| |
| 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", |
| "7411fe66a22073f328aa307c8db7182d" |
| ) |
| ) |
| |
| 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", |
| "9ffacf5b72b88f881c0e85bdd00c6d43" |
| ) |
| ) |
| |
| 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", |
| "62be340f3ab25e3e2c43462c20ff78f9" |
| ) |
| ) |
| |
| 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", |
| "faedb2916edafbf33b179c173a6e7e99" |
| ) |
| ) |
| |
| 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", |
| "cb67c9a501885e713eab9fc2fbc53ac5" |
| ) |
| ) |
| |
| 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", |
| "629d06f069b9c74f0dd06d7103f518ab" |
| ) |
| ) |
| |
| 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/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", |
| "adf5c0b390dd6d7080868ddd2c59d749" |
| ) |
| ) |
| |
| 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", |
| "b4f4d678cac8199c55d4b4768e5066e3" |
| ) |
| ) |
| |
| 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", |
| "80892e49be3d89d1bb94f2fab5e8db25" |
| ) |
| ) |
| |
| 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/LazyGridMeasuredItem.kt", |
| "f22dc4d4899dd7f53d7adeef4dabfd87" |
| ) |
| ) |
| |
| copiedClasses.add( |
| new CopiedClass( |
| "../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode.kt", |
| "src/main/java/androidx/tv/foundation/lazy/grid/LazyLayoutAnimateItemModifierNode.kt", |
| "blah" |
| ) |
| ) |
| |
| 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/LazyGridMeasuredLine.kt", |
| "98e45dc10e1f9cbc649b191dc243bbf7" |
| ) |
| ) |
| |
| 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", |
| "1525d43e14f6893ae7ba5290907b6908" |
| ) |
| ) |
| |
| 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", |
| "1dcc195229055f46fb24983ffca58d4e" |
| ) |
| ) |
| |
| 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", |
| "c9ca74cfa34be20b61f89bf926a17acf" |
| ) |
| ) |
| |
| 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", |
| "060b1374487b4b78c60409fdea1cd75f" |
| ) |
| ) |
| |
| 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", |
| "d43923910ef811c75522ad36c0c9e700" |
| ) |
| ) |
| |
| 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", |
| "9a0f877f05d2e5a69c7b6a1eb8ef2b73" |
| ) |
| ) |
| |
| 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", |
| "dfedfe292e3bfe5c3d0bd4d63856a650" |
| ) |
| ) |
| |
| 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", |
| "b79f7582feddf8fce22bfaf9ac5178d8" |
| ) |
| ) |
| |
| 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" |
| } |
| } |