From e5b08cc0a93e986d4e8dec42a2f215a1abbf482b Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 24 Sep 2018 11:18:29 +0200 Subject: [PATCH] [tests] improves not-null/pattern instrumenters' enclosing class tests --- .../notNullVerification/EnclosingClass.java | 13 +++++++++++-- .../NotNullVerifyingInstrumenterTest.java | 12 +++++++----- .../PatternInstrumenterTest.kt | 6 ++++-- .../patternInstrumenter/TestClass$1.class | Bin 495 -> 496 bytes .../TestClass$1Local.class | Bin 1022 -> 1022 bytes .../patternInstrumenter/TestClass$2.class | Bin 0 -> 689 bytes .../patternInstrumenter/TestClass$A.class | Bin 423 -> 423 bytes .../patternInstrumenter/TestClass$B.class | Bin 662 -> 662 bytes .../patternInstrumenter/TestClass$Inner.class | Bin 466 -> 466 bytes .../TestClass$Nested.class | Bin 411 -> 411 bytes .../patternInstrumenter/TestClass.class | Bin 2189 -> 2309 bytes .../patternInstrumenter/TestClass.java | 12 ++++++++++-- 12 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$2.class diff --git a/java/java-tests/testData/compiler/notNullVerification/EnclosingClass.java b/java/java-tests/testData/compiler/notNullVerification/EnclosingClass.java index 385117b893b3..4df0d7f90b9f 100644 --- a/java/java-tests/testData/compiler/notNullVerification/EnclosingClass.java +++ b/java/java-tests/testData/compiler/notNullVerification/EnclosingClass.java @@ -1,9 +1,18 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. import org.jetbrains.annotations.NotNull; public class EnclosingClass { - public static Object main() { + public static Object fromStatic() { return new Object() { - void foo(@NotNull String s) {} + void foo(@NotNull String s) { } + }; + } + + public Object fromInstance() { + return new Object() { + boolean foo(@NotNull String s) { + return s.contains(EnclosingClass.this.toString()); + } }; } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java b/java/java-tests/testSrc/com/intellij/java/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java index d805b37fb18a..34b532194825 100644 --- a/java/java-tests/testSrc/com/intellij/java/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java +++ b/java/java-tests/testSrc/com/intellij/java/compiler/notNullVerification/NotNullVerifyingInstrumenterTest.java @@ -199,7 +199,7 @@ public class NotNullVerifyingInstrumenterTest { Object instance = test.newInstance(); verifyCallThrowsException("@FooAnno method TypeUseOnlyAnnotations.foo1 must not return null", instance, test.getMethod("foo1")); verifyCallThrowsException("Argument 0 for @FooAnno parameter of TypeUseOnlyAnnotations.foo2 must not be null", instance, test.getMethod("foo2", String.class), (String)null); - test.getMethod("foo3", List.class).invoke(instance, (List)null); + test.getMethod("foo3", List.class).invoke(instance, new Object[]{null}); } @Test @@ -231,8 +231,10 @@ public class NotNullVerifyingInstrumenterTest { @Test public void testEnclosingClass() throws Exception { Class testClass = prepareTest(); - Object obj = testClass.getMethod("main").invoke(null); - assertEquals(testClass, obj.getClass().getEnclosingClass()); + Object obj1 = testClass.getMethod("fromStatic").invoke(null); + assertEquals(testClass, obj1.getClass().getEnclosingClass()); + Object obj2 = testClass.getMethod("fromInstance").invoke(testClass.newInstance()); + assertEquals(testClass, obj2.getClass().getEnclosingClass()); } @Test @@ -270,7 +272,7 @@ public class NotNullVerifyingInstrumenterTest { return prepareTest(false, AnnotationUtil.NOT_NULL); } - private Class prepareTest(boolean withDebugInfo, String... notNullAnnos) throws IOException { + private Class prepareTest(boolean withDebugInfo, String... notNullAnnotations) throws IOException { String base = JavaTestUtil.getJavaTestDataPath() + "/compiler/notNullVerification/"; String baseClassName = PlatformTestUtil.getTestName(testName.getMethodName(), false); String javaPath = (base + baseClassName) + ".java"; @@ -296,7 +298,7 @@ public class NotNullVerifyingInstrumenterTest { FailSafeClassReader reader = new FailSafeClassReader(content, 0, content.length); ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES); - modified |= NotNullVerifyingInstrumenter.processClassFile(reader, writer, notNullAnnos); + modified |= NotNullVerifyingInstrumenter.processClassFile(reader, writer, notNullAnnotations); byte[] instrumented = writer.toByteArray(); String className = FileUtil.getNameWithoutExtension(fileName); diff --git a/plugins/IntelliLang/intellilang-jps-plugin/test/org/jetbrains/jps/intellilang/instrumentation/PatternInstrumenterTest.kt b/plugins/IntelliLang/intellilang-jps-plugin/test/org/jetbrains/jps/intellilang/instrumentation/PatternInstrumenterTest.kt index b7be87daae4f..e642847dce78 100644 --- a/plugins/IntelliLang/intellilang-jps-plugin/test/org/jetbrains/jps/intellilang/instrumentation/PatternInstrumenterTest.kt +++ b/plugins/IntelliLang/intellilang-jps-plugin/test/org/jetbrains/jps/intellilang/instrumentation/PatternInstrumenterTest.kt @@ -95,8 +95,10 @@ class PatternInstrumenterTest { @Test fun enclosingClass() { val testClass = loadClass() - val obj = testClass.getMethod("enclosingClass").invoke(null) - assertEquals(testClass, obj::class.java.enclosingClass) + val obj1 = testClass.getMethod("enclosingStatic").invoke(null) + assertEquals(testClass, obj1::class.java.enclosingClass) + val obj2 = testClass.getMethod("enclosingInstance").invoke(testClass.newInstance()) + assertEquals(testClass, obj2::class.java.enclosingClass) } @Test fun capturedParam() { diff --git a/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$1.class b/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$1.class index 628caec78b8afac4f0c96fa2bfbe0f67e54ff1b8..eb4329aa683faa1bf2df5b0247bbdfe466608303 100644 GIT binary patch delta 42 ycmaFQ{DFCcDWd>?YF=_qesN}AdT>c%NoMk77e-%ZT?WR$$p@J208dy3HUIzs delta 21 ccmeyz{*Qgbc4kgX1}O$B21f?#$p@J208V8F8vpVUcZ{SR?R+F)@uMO{x+~d@#IBw?jM4b|&u3_E-60 zqL}#L5Aa73?pP?5O=j+$n{(%$b9Vlo|NaAD5A_O)xbLHc2X1@lV;zq?JofOEp=3wW zgfAIxb&rLy?Svb1K;_p`N&AMO8ZFf8pBV~mJrE2_U8%&!Y|R%YbqfA*j5gj#^MpDBePx(Yxk-k+*TW+ORhGD0x(_u?0E0RQx zXSeWcKjz=qM%9f7S@%Si2VZsXrF6WvI;Y49ntbSVtMl zRZNUlqWXd@vo6w*kDQ}rt7k^t#9i9=-^43qIo8T@={#Fsw7fmyX-|C3h=d^Hu|fa7 zM9+ZLYECR=Ia(F?AeEGD(%Dt~M)N0F;}>$@=|q}oFHr<`X}^ssp&UNE#0SmB53n=j q&rtYwqhlXSR0$Y0)@Uso+(909sg}bERw)*64{LZrnd4EUNZ$o_WShqT literal 0 HcmV?d00001 diff --git a/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$A.class b/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$A.class index a8c842390297df9668eab035a2a0cde58e4eaff7..0324320063e055d43a3445bf5cf1e8e0953f26ba 100644 GIT binary patch delta 25 fcmZ3^yqtN1AtPhdWFtm(#^}jWj9Nf;E29zsT2BUv delta 25 fcmZ3^yqtN1AtPhpWFtm(#-Pbjj9Nf;E29zsStbT< diff --git a/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$B.class b/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$B.class index a8290c41121bf4096a974e0f2a97f9925b83fbf4..2dcc840a159e83d4324753814a5ccdf31e1147d0 100644 GIT binary patch delta 35 ocmbQnI*oP12}Z`a$tM}r851UdWV8jcKQanWc4E>5vT~TT0NGOuHvj+t delta 35 ocmbQnI*oP12}Z`y$tM}r8N(-kWV8jcKQanWc4E>5vT~TT0M_pd6951J diff --git a/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$Inner.class b/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$Inner.class index 8df09983fbf07f882116053f87d6be1a58f3a422..4f12f231a2987b9934c7d518d4ab282484bfc11b 100644 GIT binary patch delta 13 Ucmcb_e2IC(Vn)XB$x9gZ03~k(y#N3J delta 13 Ucmcb_e2IC(Vn#;4$x9gZ03|{Mv;Y7A diff --git a/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$Nested.class b/plugins/IntelliLang/intellilang-jps-plugin/testData/patternInstrumenter/TestClass$Nested.class index b1641edc57bb9e397c8c33fce0899e01c84caf3a..c8fb345dc8b57e8fbfb66e8d050b21a02a49fbd9 100644 GIT binary patch delta 13 UcmbQuJezq#4kKgm7B#sj2VUW6%A;X9ojrg9t z=f!!6s-miVKt3v!)1$H0p%SX5uln{q_ny1-Fn|B^=U)IG;U^ulD8#TA!_yd^X?U(9 ziWeI8b!aGRc&Q_fS2}K^q~SnE5(N#1I#M{&aI9kz1+~1^aH3-xry9-#L_r`~v~B6^ zSw^EF8ydc)c2^+kX$8g(Wy6(K4c`ew4y0@Fs8p{Q7LRsJ+jO4@gmbIvbgy2O0uv?E zmWR#DbLpHJ=N2_9xzdGkZR9P(uH{c%$FytPqZ;KRd(yOB^HLV=YqMbzd~7(zrF5mU zYuk0#aLu~ipua}4tNg@2Uy3R}+=H-L?9?%rJ?8*on)g<(ltZ%;t)LKE_X7qw>pvapjjF(TVJ(BampQR4V>1Zq@CY z|9dX?a+H#)OrlzEzORSCT<&SGS+e3t!Q+GK85SkUo`am6ais!x12pvQ{$^nl&Iw63Hh@HoJFG@;_C zO1VsNAdFs51SU&ooKbIpvuZ*~SwF2eor-*Js`*QGj~}QxOyVOfa>zIMa45uA^w71) zc1ovgK4yt}das5`{f1@jsS8T=eG+B-FreQY*lj7R9|huFU=lkR47};xDrNYVgnAdI z(}n?eyq>+Byp#pDa=j`9+^*nKPWFMao7<|o;hJ;>mIE5pKj_`rNcDN}@Xz`cqftjS zfnCNDUsbbw@qtpXCW~B`xLcqUl+m>o#P9qeaF^>?N6D3aL#S&SzR6TWmPe_O=iwf4 z%MGkhDK*LuXcwi-aDRt#VOf2a03Y&6@lk(C HZ;ky6HomsU literal 2189 zcma)8+fv(B6kW#`WXr}jc5p)+0!bV&x44k>1_=a6Xh;kpK$>BuFTy_KiVB&LWxl8H zeMw*HnKIK4=tp(Bj;#2C#WW8-TW6oW_GRs@BmeX7Uw;F5ijO*S*ofgp44W}*Y1q~g z#Y+vZbZFSo@S~16UhBwXSHl|}No;6%t0RRCwNy0h=@`SlhIayDOCY&x+tS&#jAm0d zH5^d8DG>Fv0wepf>B^dh_X3eU=^8w$G^&Qhqi3dVy6Xbr(%erx-EP#RK)Pbua=&$c zDxG8F)S_m#R5>#)jk0Cf_41MHn09?_SfgAN4_mftp37bP(rlUp9~h2tE?wzt+IGV= zT(e;}>9Epp>Sfb*rDd6C9lu7;pnPDsgxG6L_0q6fOd2_n-5n zH^V6@W)ihV>oXq$`O?c^vt-qghATTgBdW9YTbVp{%vxQtiN7>z0x4-%twxjG@Opop zk9VhMvg(q<(W-Gl!eq_QaXg@%D#hG@-D_!GNJn5bzn-nPTsa9{mED$}z{$ z%eSb8k?HA2jh0iDJEj`7RQLF?8o4AUagX!7#2@=Fp3_6uqS#?c+1%&Y_VgZIN_|KM zd+IHvI!fXg9|rWx0`aa@58O-|d0(UA>I2-!pSxs~8#L-dW zbArcx$T`gW$oG`W@q}Qc5z^C0&TP8-eYwQZ~6VZnLc0L>W6Nx@(%5ytQSc!d`qx=Tn`k799$pEn{Bv0BH zy*@;XwEhm?`_@ZL(GQlQb(*0#cx_~^SGU4IPw1Mrg%4fe=R3+g(^nW%)lE)B+Q{~0 z*`Z}!eaHz}`;rOY@g`19`!jkD;kmc2W1Mo8@#1uLi#+EkzoOJAZ__SHIl=uM%EFBL Ny8w