From e651073a688fbfe9430fead970ef9bce9ebb172b Mon Sep 17 00:00:00 2001 From: hsyed Date: Tue, 13 Feb 2018 16:32:49 +0000 Subject: [PATCH 1/5] #4549 kotlin ijar test cases --- third_party/ijar/test/kotlin/InlineCases.kt | 15 +++++++++++++++ third_party/ijar/test/kotlin/inline-cases.jar | Bin 0 -> 4135 bytes third_party/ijar/test/kotlin/regen.sh | 3 +++ 3 files changed, 18 insertions(+) create mode 100644 third_party/ijar/test/kotlin/InlineCases.kt create mode 100644 third_party/ijar/test/kotlin/inline-cases.jar create mode 100755 third_party/ijar/test/kotlin/regen.sh diff --git a/third_party/ijar/test/kotlin/InlineCases.kt b/third_party/ijar/test/kotlin/InlineCases.kt new file mode 100644 index 00000000000000..b2a164c875e4e4 --- /dev/null +++ b/third_party/ijar/test/kotlin/InlineCases.kt @@ -0,0 +1,15 @@ +fun freeInlineFun(op: () -> Unit) { op() } + +class ClassWithInline { + inline fun classInlineFun(op: () -> Unit) { op() } +} + +object ObjectWithInline { + inline fun objectInlineFun(op: () -> Unit) { op() } +} + +abstract class AbstractClassWithInline { + inline fun inheritedInlineFun(op: () -> Unit) { op() } +} + +object ObjectInheritingInline: AbstractClassWithInline() \ No newline at end of file diff --git a/third_party/ijar/test/kotlin/inline-cases.jar b/third_party/ijar/test/kotlin/inline-cases.jar new file mode 100644 index 0000000000000000000000000000000000000000..ac289f7f13a99e4e89a7e6936869d1a504035a44 GIT binary patch literal 4135 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 literal 0 HcmV?d00001 diff --git a/third_party/ijar/test/kotlin/regen.sh b/third_party/ijar/test/kotlin/regen.sh new file mode 100755 index 00000000000000..bfc26f08b2c1fb --- /dev/null +++ b/third_party/ijar/test/kotlin/regen.sh @@ -0,0 +1,3 @@ +#!/bin/bash -eu + +kotlinc -module-name inline-cases -d inline-cases.jar InlineCases.kt \ No newline at end of file From b0af820b30ddfa57dcf209bdadac545a4ca12726 Mon Sep 17 00:00:00 2001 From: hsyed Date: Tue, 13 Feb 2018 19:47:12 +0000 Subject: [PATCH 2/5] test logic, !!NOT FAILING!! ijar step is currently just doing a cp. --- third_party/ijar/test/BUILD | 1 + third_party/ijar/test/ijar_test.sh | 41 +++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/third_party/ijar/test/BUILD b/third_party/ijar/test/BUILD index d9ab5f788e6a94..93662a5855874e 100644 --- a/third_party/ijar/test/BUILD +++ b/third_party/ijar/test/BUILD @@ -41,6 +41,7 @@ sh_test( # Intentionally bad test JAR: file count in central directory # wrong. "libwrongcentraldir.jar", + "kotlin/inline-cases.jar", "//tools/defaults:jdk", "//tools/jdk:langtools", ], diff --git a/third_party/ijar/test/ijar_test.sh b/third_party/ijar/test/ijar_test.sh index 1a4959da2472ac..1d4e3bb5bb0c2d 100755 --- a/third_party/ijar/test/ijar_test.sh +++ b/third_party/ijar/test/ijar_test.sh @@ -80,7 +80,9 @@ SOURCEDEBUGEXT_IJAR=$TEST_TMPDIR/source_debug_extension.jar CENTRAL_DIR_LARGEST_REGULAR=$IJAR_SRCDIR/test/largest_regular.jar CENTRAL_DIR_SMALLEST_ZIP64=$IJAR_SRCDIR/test/smallest_zip64.jar CENTRAL_DIR_ZIP64=$IJAR_SRCDIR/test/definitely_zip64.jar - +KOTLIN_INLINE_JAR=$IJAR_SRCDIR/test/kotlin/inline-cases.jar +KOTLIN_INLINE_INTERFACE_JAR=$TEST_TMPDIR/kotlin/inline-cases.jar +KOTLIN_INLINE_OUTPUT_DIR=$TEST_TMPDIR/kotlin/inline #### Setup # set_file_length FILE SIZE @@ -114,13 +116,50 @@ function check_consistent_file_contents() { function set_up() { mkdir -p $TEST_TMPDIR/classes + mkdir -p $TEST_TMPDIR/kotlin } function tear_down() { rm -fr $TEST_TMPDIR/classes + rm -fr $TEST_TMPDIR/kotlin +} + +function run_ijar_and_extract_to() { + mkdir -p $3 || fail "could not ensure output dir" +# ${IJAR} $1 $2 || fail "ijar failed" + cp $1 $2 # TODO replace with previous line + pushd $3 + ${JAR} xf $2 || fail "could not extract jar contents" + popd +} + +function javap_decompile_and_assert_contains() { + local output=$(${JAVAP} -c $1) + [[ "${output}" =~ "${2}" ]] || fail "javap output missing expected substring: ${2}" } #### Tests +function test_kotlin_metadata_retention() { + run_ijar_and_extract_to $KOTLIN_INLINE_JAR $KOTLIN_INLINE_INTERFACE_JAR $KOTLIN_INLINE_OUTPUT_DIR + [[ -f "${KOTLIN_INLINE_OUTPUT_DIR}/META-INF/inline-cases.kotlin_module" ]] || fail "kotlin metadata not retained" +} + +function test_kotlin_inline_retention() { + run_ijar_and_extract_to $KOTLIN_INLINE_JAR $KOTLIN_INLINE_INTERFACE_JAR $KOTLIN_INLINE_OUTPUT_DIR + javap_decompile_and_assert_contains "${KOTLIN_INLINE_OUTPUT_DIR}/ClassWithInline.class" \ + " public final void classInlineFun(kotlin.jvm.functions.Function0); + Code:" + javap_decompile_and_assert_contains "${KOTLIN_INLINE_OUTPUT_DIR}/InlineCasesKt.class" \ + " public static final void freeInlineFun(kotlin.jvm.functions.Function0); + Code:" + javap_decompile_and_assert_contains "${KOTLIN_INLINE_OUTPUT_DIR}/ObjectWithInline.class" \ + " public final void objectInlineFun(kotlin.jvm.functions.Function0); + Code:" + javap_decompile_and_assert_contains "${KOTLIN_INLINE_OUTPUT_DIR}/AbstractClassWithInline.class" \ + " public final void inheritedInlineFun(kotlin.jvm.functions.Function0); + Code:" +} + function test_output_bigger_than_input() { # Tests that ijar does not crash when output ijar is bigger than the input jar $JAVAC -g -d $TEST_TMPDIR/classes \ From 1f1b539a22ee8ca36b8bac385b85e6f6665fa144 Mon Sep 17 00:00:00 2001 From: Hassan Syed Date: Thu, 15 Feb 2018 09:40:21 +0000 Subject: [PATCH 3/5] Update ijar_test.sh updated so the test correctly fails. --- third_party/ijar/test/ijar_test.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/third_party/ijar/test/ijar_test.sh b/third_party/ijar/test/ijar_test.sh index 1d4e3bb5bb0c2d..045e59823c612a 100755 --- a/third_party/ijar/test/ijar_test.sh +++ b/third_party/ijar/test/ijar_test.sh @@ -126,8 +126,7 @@ function tear_down() { function run_ijar_and_extract_to() { mkdir -p $3 || fail "could not ensure output dir" -# ${IJAR} $1 $2 || fail "ijar failed" - cp $1 $2 # TODO replace with previous line + ${IJAR} $1 $2 || fail "ijar failed" pushd $3 ${JAR} xf $2 || fail "could not extract jar contents" popd From 70d453c9c173cc95aeea97fa7bfe313590302498 Mon Sep 17 00:00:00 2001 From: hsyed Date: Thu, 15 Feb 2018 21:26:13 +0000 Subject: [PATCH 4/5] formating fixes --- third_party/ijar/test/kotlin/InlineCases.kt | 2 +- third_party/ijar/test/kotlin/regen.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/ijar/test/kotlin/InlineCases.kt b/third_party/ijar/test/kotlin/InlineCases.kt index b2a164c875e4e4..1204bdc50ec9e8 100644 --- a/third_party/ijar/test/kotlin/InlineCases.kt +++ b/third_party/ijar/test/kotlin/InlineCases.kt @@ -12,4 +12,4 @@ abstract class AbstractClassWithInline { inline fun inheritedInlineFun(op: () -> Unit) { op() } } -object ObjectInheritingInline: AbstractClassWithInline() \ No newline at end of file +object ObjectInheritingInline: AbstractClassWithInline() diff --git a/third_party/ijar/test/kotlin/regen.sh b/third_party/ijar/test/kotlin/regen.sh index bfc26f08b2c1fb..4d37729e693ea9 100755 --- a/third_party/ijar/test/kotlin/regen.sh +++ b/third_party/ijar/test/kotlin/regen.sh @@ -1,3 +1,3 @@ #!/bin/bash -eu -kotlinc -module-name inline-cases -d inline-cases.jar InlineCases.kt \ No newline at end of file +kotlinc -module-name inline-cases -d inline-cases.jar InlineCases.kt From 85a13fa004b45c4a008321127da45c3310811079 Mon Sep 17 00:00:00 2001 From: hsyed Date: Fri, 16 Feb 2018 01:26:37 +0000 Subject: [PATCH 5/5] add missing inline modifier and regen --- third_party/ijar/test/kotlin/InlineCases.kt | 2 +- third_party/ijar/test/kotlin/inline-cases.jar | Bin 4135 -> 4150 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/ijar/test/kotlin/InlineCases.kt b/third_party/ijar/test/kotlin/InlineCases.kt index 1204bdc50ec9e8..ece7117c1ebf58 100644 --- a/third_party/ijar/test/kotlin/InlineCases.kt +++ b/third_party/ijar/test/kotlin/InlineCases.kt @@ -1,4 +1,4 @@ -fun freeInlineFun(op: () -> Unit) { op() } +inline fun freeInlineFun(op: () -> Unit) { op() } class ClassWithInline { inline fun classInlineFun(op: () -> Unit) { op() } diff --git a/third_party/ijar/test/kotlin/inline-cases.jar b/third_party/ijar/test/kotlin/inline-cases.jar index ac289f7f13a99e4e89a7e6936869d1a504035a44..5f68c9a7769c528c4fd8029d9eccd36c46790f66 100644 GIT binary patch delta 739 zcmZ3kuuXwCz?+#xgn@&DgQ0;dU?Oh~GmzTYbBPH=Z%$<9W(G6z*?uvC895v;!BUeW zxYg=?^MxEG>e3cEXf735{WlZ3mfYXKW94E2Yt($x?ys-B*I)bW@5j%#%NasLB&NMSHPuVzqXWzNQlTD2^9RX! zyJNn-oqo5mKtoFTL8tx^mKqtYw!2BmFEWeX9;`^2U*B@-;-%omTAQs}TZ3i?@ScBv zn|a}GyXhsTr+zY-uP}RFUfa6pfRv~~TC?CVp%X@*)k3T3vHKHpo= zwtmNX_a=d_2~ll{>u>C^sLa*7WR&{LB$Q23XZgmKH}_@#f9CgmA|VviyLVwig!Z(5 zZznj)g-_eiW!g5k{KHVoU>-&ypZPPDWxbYwDiBQ=tz0=^( zqBV-GRqZ_d=lwRn+T3y2yy|oAme^H5Veaio%?r~y=f3m4S9(-hSt6`niY2#g@wyMo zCmx;lMthy}{5P*st3PLy{SWhut(I9E_^@=v78$|xWJ!-zKY#z7|0hzTt>iR!t-Fl( z<&xrAm*=INVJzg}E0|C$>v>xLQS@)2}<|^;3JD(VpKqFWfqxY(1$P zl%lxl+D1pyQz_~mv)|XX)HT#z^7OA#QCWPzQRREWWV>10?!Hn8JO1^>odaiQZjU{# z`$nR0H?!CSzB20wjx(Ap9;`d0AKcRq@Mh=um;U~n0TTnm5oQJkl+-tQ7jHf&kxka& za|Y8zd=6lGE1x5n{>kSKrk(jcc!BDC;3iF;!EXYVInOW6xM%Wfels>5J_aBF0P{9W AasU7T delta 724 zcmdm{uv~#Rz?+#xgn@&DgJD^-??m1jW+1h(=Moc$-kiwH%?xJbv;ATOGjcdyf~6)$ zaI4kd&lhqO`1ftWAFZV#7sakb@V{OT?d1{yCeAVl}Rj!cHwH3Xw_UFqLfo}y@ zKmO@lt@7o-^GSI-gXTRme%86%-|2d;LBze^B0)U2y#<$EIuw3q>us;!PqgMLbn+Zt z_Sw(k@$@^-g&lj!4EPUkh=2L#@26uzmrN7ezO2&O6mdF1bf>-Xzvuj(Pb7tceD`il z&mONtc^R`m z%VeI;yZag|rTrIs-mDhY(p5J}3YPTf`nme(`MUEw&dXl6?o*Dsq@sJaw#v9)RjDsg zF>jT}ef>mMPOaz6o8*N3OdZ#SdDI`OdTYGSc+cMquin~8H*e|&?Qq=XWbN2-^J+)% zVdqPpS=^HZKWI$)Ug)sP^M#t~?N<)U*W5ItQt!k>Y`?XmH&^-HmxD}i9^}buH%5ME zTEg^(?Z$7;0B?2<;rRNUicAa)bD0?!P?Fo^lf3z$R5jU}&lyZN@;QL%BYcivnuFgR kOb79M@B-EOz)hOGoZkd2bB|w|aqZ+^{AO&jd<;MU0J}>{z5oCK