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