Name Date Size #Lines LOC

..--

java/com/google/H25-Apr-2025-501396

README.mdH A D25-Apr-20253.2 KiB7959

README.md

1# Refaster templates for Tink
2
3In this directory, we store [Refaster](https://errorprone.info/%64ocs/refaster)
4templates for usage with Tink. These help users modernize the code and move to
5preferred APIs. They can be used with
6[Error Prone](https://errorprone.info/index), to automatically generated
7patches for your codebase. The templates can be found in
8`java/com/google/tink1_templates/`.
9
10In order to use them on your project, we refer to the [Refaster
11documentation](https://errorprone.info/%64ocs/refaster).
12
13We sometimes test these templates using the script below. This script
14applies the templates to the code in `java/com/google/tinkuser/*.java`
15and compares the result to the code in
16`java/com/google/tinkuser/*.java_expected`
17
18NOTE: We run the following tests manually, not as part of our continuous
19integration tests.
20
21
22```bash
23errorprone_version="2.18.0"
24
25## STEP 0: Switch to a directory so the remainder of the script can be run
26## without modifying the working directory.
27code_path=$(pwd)
28cd $(mktemp -d)
29
30## STEP 1: We get the 3 jar files:
31## tink-{version}-jar, error_prone_refaster-{version}.jar, and error_prone_core-{version}.jar
32## (For good measure, we verify the 3 sha256sums.)
33mkdir jars
34pushd jars
35maven_base="repo1.maven.org/maven2/com/google"
36
37# We download Tink from Head because Tink 1.9 does not have all key templates
38# This URL is found by going to https://oss.sonatype.org/ and browsing.
39tink_jar="tink-HEAD-20230426.095746-3687.jar"
40tink_url="https://oss.sonatype.org/service/local/repositories/snapshots/content/com/google/crypto/tink/tink/HEAD-SNAPSHOT/tink-HEAD-20230426.095746-3687.jar"
41tink_sha256="d88bbb07f02d3c55f9edc2a3450a1d6c8ff59c2cbe00d2d8b5628bdc67c0638f"
42
43refaster_jar="error_prone_refaster-${errorprone_version}.jar"
44refaster_sha256="0cde0a3db5c2f748fae4633ccd8c66a9ba9c5a0f7a380c9104b99372fd0c4959"
45errorprone_jar="error_prone_core-${errorprone_version}-with-dependencies.jar"
46errorprone_sha256="2b3f2d21e7754bece946cf8f7b0e2b2f805c46f58b4839eb302c3d2498a3a55e"
47
48wget "${tink_url}"
49echo "${tink_sha256} ${tink_jar}" | sha256sum -c
50
51wget "https://${maven_base}/errorprone/error_prone_refaster/${errorprone_version}/${refaster_jar}"
52echo "${refaster_sha256} ${refaster_jar}" | sha256sum -c
53
54wget "https://${maven_base}/errorprone/error_prone_core/${errorprone_version}/${errorprone_jar}"
55echo "${errorprone_sha256} ${errorprone_jar}" | sha256sum -c
56
57popd
58
59## STEP 2: Use the current file in tink1to2 to create a "tinkrule.refaster":
60## First we delete the results of previous copy operations.
61rm -rf refaster/ ; cp -r "${code_path}" .
62
63javac -cp "jars/${tink_jar}:jars/${refaster_jar}" \
64  "-Xplugin:RefasterRuleCompiler --out ${PWD}/tinkrule.refaster" \
65  refaster/java/com/google/tink1_templates/AllChanges.java
66
67## STEP 3: Use error prone to create a patch:
68javac -cp "jars/${tink_jar}:jars/${errorprone_jar}" \
69  -XDcompilePolicy=byfile  \
70  -processorpath "jars/${errorprone_jar}" \
71  "-Xplugin:ErrorProne -XepPatchChecks:refaster:${PWD}/tinkrule.refaster -XepPatchLocation:${PWD}" \
72  refaster/java/com/google/tinkuser/TinkUser.java
73
74patch refaster/java/com/google/tinkuser/TinkUser.java error-prone.patch
75
76diff refaster/java/com/google/tinkuser/TinkUser.java \
77  refaster/java/com/google/tinkuser/TinkUser.java_expected
78```
79