From d98b3433eb35156f541377015f908faed7b7f07c Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 15 Sep 2015 15:53:43 +0300 Subject: [PATCH] Fix ABI version diagnostic for old package facades Restore the test data that was erroneously replaced in 84649e4 --- compiler/testData/cli/jvm/wrongAbiVersion.out | 2 +- .../bin/ClassWithWrongAbiVersion.class | Bin 781 -> 795 bytes .../bin/META-INF/main.kotlin_module | Bin 34 -> 0 bytes .../wrong/ClassWithInnerLambda$other$1.class | Bin 1008 -> 951 bytes .../bin/wrong/ClassWithInnerLambda.class | Bin 1820 -> 1780 bytes .../bin/wrong/TraitWithDefault$$TImpl.class | Bin 484 -> 605 bytes .../bin/wrong/TraitWithDefault.class | Bin 714 -> 693 bytes .../WrongPackage$wrong-package$0984b5e5.class | Bin 0 -> 396 bytes .../bin/wrong/WrongPackage.class | Bin 669 -> 733 bytes .../bin/wrong/Wrong_packageKt.class | Bin 398 -> 0 bytes .../lazy/descriptors/LazyJavaPackageScope.kt | 11 ++++++++++- .../DeserializedDescriptorResolver.java | 11 +++++------ 12 files changed, 16 insertions(+), 8 deletions(-) delete mode 100644 compiler/testData/cli/jvm/wrongAbiVersionLib/bin/META-INF/main.kotlin_module create mode 100644 compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage$wrong-package$0984b5e5.class delete mode 100644 compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class diff --git a/compiler/testData/cli/jvm/wrongAbiVersion.out b/compiler/testData/cli/jvm/wrongAbiVersion.out index f3655702809..552859abfe0 100644 --- a/compiler/testData/cli/jvm/wrongAbiVersion.out +++ b/compiler/testData/cli/jvm/wrongAbiVersion.out @@ -1,5 +1,5 @@ compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class: error: class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is unknown, expected ABI version is $ABI_VERSION$ -compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class: error: class 'wrong/Wrong_packageKt' was compiled with an incompatible version of Kotlin. Its ABI version is unknown, expected ABI version is $ABI_VERSION$ +compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class: error: class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is unknown, expected ABI version is $ABI_VERSION$ compiler/testData/cli/jvm/wrongAbiVersion.kt:4:3: error: unresolved reference: bar bar() ^ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class index ff9873566e4154e33fed7b57020756753697599a..8e0d4bc08c8d2f307d24e258a8b221babf75ac2e 100644 GIT binary patch delta 415 zcmaJ-%TB^j6r59p+FBG;6ojaSh2X2f1sezpj3xvU#jSC1!AeR?G0?E}1B{ENE8|zV zGI8Mt_%(ci@lf4rZgOVs%uUYBeTu!r)X%T?4*(~~`)Y-<{w$?kbO&b7lMy9k{dhWZ zY^;hF*ffUeqaoyL&I`CbLaMd|yr@%;z(fv0pzcL~0@YH@ptRTTR3A^Exp);ESnZfT~8xvK=)LF&+@C^mzz^^#tKh*)%kMOi`j(5+w4VcBE< zA?Orz=m+!{`X?QtQG+h;&Ad0m%zKtkQv3XQ{{V1+TBIFDkJY_GcQgsde$bkF_hWAm zww(6Zoz0F2^4Jgj@I*%%QiB35`npYx{9s7f?M8OqTI?;R>kiAjqPDwszfVwxZs-yo z;#2B1idQD7Vqa~XTW3M+Kt%dS zT)=>WM-QI-6u&^Mju{dAQ1z<%)vMS2snxa6``7a;fH}+%hGd&a%5~CjvwkYcE9$&h zJ$3e7yXq7wC*{Spo$Quly9-MTUg>dW{}TuU&55J4O4fEvHMCqKm4MMBN;C;E^>7!eT0xQcNm&U)qv9S`WfV+=%@5p6OixmFCi z=O8f7(fny3*$|xIPN2~VFk3{P@H4|ONTn!(h?Z*QM;UeF!p6jym=K98TjR=rOyejF35;EI_ZBi0Vya0DzfQjBgufX`tf#}AwIN#5C-uFA_^p*cg?C$yc7QhOY33<;D8FxNL z+wS97wpMR9n)S8XNylkfwsHKkZTvX34;`yx_uO`tGVW7yaR4a@5_0c>#@0}>q#*1a zQz5NF(;yHfM2CWJw&f^@dA}*A#_=J75sZ5Gw3;OZ3)SLx9b*{R5JHNeem&&NSkAip zaN$+N)b0!+)Nzi?u8ur3AC>mAI^sx1c+eL@YO_`E_4X|1sA}70cW~#*iNpSzou)~M z*DTxIIc+!0?ry!&@(#p=cP`2?UGh?G_Pi@mJWKnw{9i$AKt%+EB3CmUiKANj2mK0( zKb#XvyoY5!fKjG3&V9NpPno#nM95N?7~!Kde-nn8;1>;r3H%Zg43`3ZO!#u1iS#Rw zVmp6DZy@&jnEQ+Q0TjXlw*>-Nl(B#c#~?o8GYroB2?J>wOI#r>lC5Z{$7jEs25j*~hev;v1x;)Ix3p zfD5M~!f>fYnohWeAkXC*2wJuW7HJ^N)%w^zKWvk|D>fpjYUf4ULWqStAjH{$%0}01 zg^uSwuyW@pZ%7C;HP1gXPk7k$nd1f~b6qcFLLo5gURdw81?pUlBuu~ShE9i@;dd{% z;~skEV;(kGyUU+2pLIB0SvcU*Cjzoz&=IDt3rf`ueX`}Wf;gloF0EtUIvrqCgT7sa z`(*b@sI3c>T>*1sN2)c{>A!J1Bk`vE0T{)Zk4$N>u(VtOyVompS_dNnj>v%?Fi6>szL zL3)02iC6Nums{Vicw705Ufq8rw;9Tkt}rypk|G-!TM~T5t_r@Q zle{EjMy^g9WmIFuIw^iBSJa$NYCG{!BWF}l!Q%5W(PLJ@K$PXNQL?jRE3s5hZaa=@ zOXv^X%jjjB?5XOqAyr~2#a=YNKsEmK`L->~2NKiub-|a_W%5f-DTIemcvovtrAB@H zgtboD5s!l@5*NjK!}mIyQRoq@i*?$|#Gu*!uVpn@grx*LfR8jtz=%rOFH+Jf-T`${ zvgWl|yTN>iHQRhoEC}N@$K~~Ir^)?3Mcs9dTo!hH;;#R<^Gk*E!g)$V##*~(5|pk; z&^X)ab$iu4a{`A9+ixZVwMd`a=4dr2sJ72(?9lds{u!jJSV z!3wQ6dvwUa?MRE}7u+GhPw7M^>5ai^ByB;dPaC8CA-x(6JQ$~UA|S0bqQnJ7uyvRm z__sW_!sE#vwZ*n literal 1820 zcmah}ZByGu5Z;w63)$jD5SNMoMZqE16daR433h0OOBff|6il6DLO-1C!wB2bAj{-S z`=9zU(`Ndi)6e};ZTD>B03}5;y1TvId-mmSpTGY8{SN?Gg)b1M-uj+fPvx4d-G1o= zr+L@qeu1?rHKqb0jGeIymTEGx*{_`OYM_FQFqEw}9oGrA5ah)~89|RXynwd4I0%!4 zo|y9aNs|tx_PUA;LMY(v0AYLa(&Fr*l{)FT)xh!GcIric^*EEb%K%}%;Q95`84oHx zbLcR0T`yogprRKPJIy9}L^cFE!fZbx;m>gc?z^m+%DaJ2C!K0rg%Jw7ddjPfZyHv=OEYA1*P4H+OfQiWi)6AK}4= zf#O}0cv^*z5wv`Yza+0usz2gtOge zpu+|2!z^2&*_{?zidA<$vg-Vl^DMhOltg;rJfe5rUE{*rgJk ztFeF~?$lxj=FZCN%^W$6m z-PD^6uYPuD;SNTJEkqfIF{a_FEr&G4HZX)?)zGkls?ZxaFO%M|EmXo$%}Qfc4lBkC zj!QC{a(>m?MlHmK56ZHP>8SQZ$OoAq9^kumWivR2b6eAw8kiyN!WX8blSL zoLA!r;{~tEnq}rYtkUF1Vn7%zI4&=CS{3g1ceIjIcUjQ!Nz3jcne5W#bNiOaEVFed z>11!%BiujixPjB+dH2F;I~0`to`k6TZfXbIa?LDK@;ZK%zi>oOdY6K`<={jgW*?&b zA9zSp=|V*0IA)4U(keuw0%1T{Cn-j=__T599jyKWPk-u)hUi~16((7NkZ2xS8XtZK z6H7nRT7u7L{HV7N_XtLOM545Zut96#AWR6)Xf44eWcqtinzQt)#JV5^111O2Y?7&n zM^F9?Gk?M-zk>Br1k`h<_jG-C!iiuQ;VMeG5%&#n=1CGbO7b^|3jplK+XGPg05Uu$ njRb43MRSB~Oqzkl&uN?@`60-#kcUUG$RPnqSb784hEM+mf0egc diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault$$TImpl.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault$$TImpl.class index 3ddf539b800bcdaaccdbc3c75cdbdb92d53cfe7b..8e4640ad252ee3b4a9d160973787c34b352b7a10 100644 GIT binary patch delta 259 zcmaFDe3ymy)W2Q(7#J9g7^D~(WGDKGO;lEzEXXJ}(N)D+!zU}XM8BvsuOu@!RllUN zAT={DEnnX&wInPtr!+Mnu_!S&wIsF3nvsDe56EO>U{xu}$SekOL5dj}80{zKFPf~* zsHdzH1TiHnvp6#;2cgw5FE76&u_QA;uXu7WqeTH513Lo~g9y+;It)PlK$?kV4TxkA z1(G}v5e6;>ULa2lh}pm*EDYj6wjf9Y2T&Sx<~sVPjP($;d38cxaJ`a7a;NW=VKvNrp>mT4HHV ziC%Wez{Xoy5psJ^3!9vJMUxS@ST6GKg_8h%kurFmNz%axyS6NKQ6nvJC}tfF5T8 z3bHYih-;!exKdSq#QE`znJ~@3 zRTyh?cR+-l|CooTN8685FOEcLU(7T8Nu;AnFh{W`Qmx4&PzEZ)KE9D zfz1+hEOIDlW~cSMtvEN5S6ot<;wbfW{?XLSSte_FGP;nK4ilk_0OI*q%9qQy~B9lqQ$8zh!2k@cP z+u+8Xv$(_g&YZ(=Kfm5T0Gy%EFnZC2S~(A!8SpseD>1Cm@$;`by_lRwV=-=nG4v9? z=1#^bavvokHf>l$|0GUQ!(c^R(>xr73`f(nFqu?Nvd$f;jL?c_j$gC+t1?f*$k@wx zSza>OJd&Z%r7V>7O^2bGO0{Hg{@pV4DL_@7!1a9h=ISwUXAA1_ilt!aPNfoeRUQew z;88}zo)?vl#kJgs!K_k7<|34(B-d4{Fx=2@N*thpCM^!2XJ~;of_+khnh|}gtuD9^DOWQ5fhG-6pkj3mdxv9qj!8fU{`U literal 0 HcmV?d00001 diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class index af5f5018642a6b6337efdd17c62003d641baf676..816be83a03e4fe707d5165475473f340fc7dee11 100644 GIT binary patch literal 733 zcma)4U2oE06n+jAI#^*8L@aK8AQ!6(t5avh>5_%Sg^A2egBM2uEWo{y*R_a9%s0l1G_gyJmly`l9sK3|FcSPZ2KA{0jA zL|Cri+@U>^{YXWUqjPrS_>8zYjtEOn`>x|T(JmpmZuSWI`q+;+w5Ue7+c^tZf&Acd zC2Mptu^cawfhSz+#e&zK9J@P&jel|5i%S=SX1V|PqS3SU&hM#Pt_Z^&^Z$Em(2&bw z8F>v$$YhW}fp@Y+KrsJSseVa{`n~4khxWGIR#DPWgqp<_lnHmv`(NJqPl0&ptgxM) z3_{2El0Vr9%0NVd;5N%Sz4CG`o!WTP**{Dw?)#%brMsH0TL+(pUe&bsH?>)#TKXt= zqgg|1p5v`h)as4ygGYv`Q;X87PE;h7mK(Q;T`g74P;t*xIIh|@Im6Q@}D0{!zG8nI#vN=%DQImOjDOIYJGJ-fgc5Pjo>CUw#_O(?}s%149L9>5aUph_qb5=vB1i^72e8aqq0iM>Yly8JH0 zrQ*O3;70+oi4lzuBkj)4o1L9`Py6HNx9+hc)kN-|KOt>fp*MJL~Ycm_1{C9{pwy^D^ zjh!|cXl}y8E}_*=vuT;AGftIA^6!H}H{zVIcTKGipH^~>M4DS|>|w*lK5i3^{&Zhs zx5h)n@Hx^Gl@~&{_Df9UnX+Z+L}KVHJ3Xm-JY87A)-W@LWn(9tlrm?1m`%m)jI~i` zWg4mcEk}tU{zX>iv3jXp5S*9B>Qqg1p(Xpmn9Q=3t_605eO*3+*9n{$fcPG6g7Cnh z@MSe|0~>-o6l7mwXRWT+^{>$Ritd*s5IFYLrGq5`)UOb@Ea8#tF6+)7j>LPokG}Yx RAa^9X`w9oR_a0Q>@HeNurGfwe diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class deleted file mode 100644 index 62816038963087cb9c324e37fd92bf443d71dd3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmXX?O;5r=6nwAcLyHv}LkLk1#AqZ&t9a8BA!3vY5e+10LbmOOEVNr~7rgkVyn65l z_@mU<#y!krX7*+0?f1{;7XY-tLa4sQk(}A%6sIrDTd*1LsUjdkWzJU24j9D)cg{U> zbp+jIG2vlzgmB<2A{7W}&sU)>q~ft;f!)izt_XOSdCcdR2nKV-h{uVDr2b0>A?Gv2 z5XSpe)2iL=7V<|I&h+cjQ_U-#jPEKDto6ogya_)%MeFO7a$!s9*p@~)2 zMxu_{v`E*rtL-z?(9kW!fTiuT#g6}1I$0=svlICoq3j6B`^(Vf@gs8sa*T&)8GAgf zj8Gpgr4k_@i9}G^mNHUIQS$^W&>%-Y2SC>#4+UbAR6X;^{m7zC!ZZTVX`oE3!3I=_ Sx5zD$TDyUDFrEMtDE$Gtomm9{ diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index b8d73eadf9d..a6aefe8857b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.lazy.resolveKotlinBinaryClass import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaPackage +import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.name.ClassId @@ -76,8 +77,16 @@ public class LazyJavaPackageScope( partToFacade()[partName] private val deserializedPackageScope = c.storageManager.createLazyValue { - if (kotlinBinaryClasses().isEmpty()) + if (kotlinBinaryClasses().isEmpty()) { + // If the scope is queried but no package parts are found, there's a possibility that we're trying to load symbols + // from an old package with the binary-incompatible facade. + // We try to read the old package facade if there is one, to report the "incompatible ABI version" message. + packageFragment.oldPackageFacade?.let { binaryClass -> + c.components.deserializedDescriptorResolver.readData(binaryClass, DeserializedDescriptorResolver.KOTLIN_PACKAGE_FACADE) + } + JetScope.Empty + } else { c.components.deserializedDescriptorResolver.createKotlinPackageScope(packageFragment, kotlinBinaryClasses()) } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java index 804b8577fcc..993fc8c23f3 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.load.kotlin; -import kotlin.KotlinPackage; import kotlin.jvm.functions.Function0; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,16 +36,16 @@ import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil; import javax.inject.Inject; import java.util.*; -import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.CLASS; -import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.MULTIFILE_CLASS_PART; +import static kotlin.KotlinPackage.setOf; +import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.*; public final class DeserializedDescriptorResolver { private final ErrorReporter errorReporter; private DeserializationComponents components; - public static final Set KOTLIN_CLASS = KotlinPackage.setOf(CLASS); - public static final Set KOTLIN_FILE_FACADE_OR_MULTIFILE_CLASS_PART = - KotlinPackage.setOf(KotlinClassHeader.Kind.FILE_FACADE, MULTIFILE_CLASS_PART); + public static final Set KOTLIN_CLASS = setOf(CLASS); + public static final Set KOTLIN_FILE_FACADE_OR_MULTIFILE_CLASS_PART = setOf(FILE_FACADE, MULTIFILE_CLASS_PART); + public static final Set KOTLIN_PACKAGE_FACADE = setOf(PACKAGE_FACADE); public DeserializedDescriptorResolver(@NotNull ErrorReporter errorReporter) { this.errorReporter = errorReporter;