From 668afd0260ebfd3b14fd926d70ade8adc417e17f Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Sun, 12 Feb 2012 23:49:34 +0100 Subject: [PATCH] IDEA-81171 (Surround AutoCloseable - initial implementation) --- .../impl/SurroundAutoCloseableAction.java | 95 ++++++++++++++++++ .../surroundAutoCloseable/Simple.java | 24 +++++ .../surroundAutoCloseable/Simple_after.java | 25 +++++ .../SurroundAutoCloseableActionTest.java | 47 +++++++++ java/mockJDK-1.7/jre/lib/rt.jar | Bin 758639 -> 759683 bytes java/mockJDK-1.7/src.zip | Bin 805994 -> 820450 bytes .../src/messages/CodeInsightBundle.properties | 1 + .../after.java.template | 2 + .../before.java.template | 1 + .../description.html | 5 + resources/src/META-INF/IdeaPlugin.xml | 6 ++ 11 files changed, 206 insertions(+) create mode 100644 java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java create mode 100644 java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java create mode 100644 java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java create mode 100644 java/java-tests/testSrc/com/intellij/codeInsight/intention/SurroundAutoCloseableActionTest.java create mode 100644 resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/after.java.template create mode 100644 resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/before.java.template create mode 100644 resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/description.html diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java new file mode 100644 index 000000000000..ac5df759aeb2 --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java @@ -0,0 +1,95 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.intention.impl; + +import com.intellij.codeInsight.CodeInsightBundle; +import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; +import com.intellij.lang.java.JavaLanguage; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.*; +import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.search.ProjectScope; +import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiUtil; +import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NotNull; + +public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction { + @Override + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { + if (!element.getLanguage().isKindOf(JavaLanguage.INSTANCE)) return false; + if (!PsiUtil.getLanguageLevel(element).isAtLeast(LanguageLevel.JDK_1_7)) return false; + + final PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class); + if (variable == null) return false; + final PsiExpression initializer = variable.getInitializer(); + if (initializer == null) return false; + final PsiElement declaration = variable.getParent(); + if (!(declaration instanceof PsiDeclarationStatement)) return false; + final PsiElement codeBlock = declaration.getParent(); + if (!(codeBlock instanceof PsiCodeBlock)) return false; + + final PsiType type = variable.getType(); + if (!(type instanceof PsiClassType)) return false; + final PsiClass aClass = ((PsiClassType)type).resolve(); + final JavaPsiFacade facade = JavaPsiFacade.getInstance(project); + final PsiClass autoCloseable = facade.findClass(CommonClassNames.JAVA_LANG_AUTO_CLOSEABLE, ProjectScope.getLibrariesScope(project)); + if (!InheritanceUtil.isInheritorOrSelf(aClass, autoCloseable, true)) return false; + + return true; + } + + @Override + public void invoke(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) throws IncorrectOperationException { + final PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class); + if (variable == null) return; + final PsiExpression initializer = variable.getInitializer(); + if (initializer == null) return; + final PsiElement declaration = variable.getParent(); + if (!(declaration instanceof PsiDeclarationStatement)) return; + final PsiElement codeBlock = declaration.getParent(); + if (!(codeBlock instanceof PsiCodeBlock)) return; + + final String text = "try (" + variable.getTypeElement().getText() + " " + variable.getName() + " = " + initializer.getText() + ") {}"; + final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); + final PsiStatement armStatement = factory.createStatementFromText(text, codeBlock); + final PsiElement newElement = declaration.replace(armStatement); + + final PsiElement formattedElement = CodeStyleManager.getInstance(project).reformat(newElement); + final PsiCodeBlock tryBlock = ((PsiTryStatement)formattedElement).getTryBlock(); + if (tryBlock != null) { + final PsiJavaToken brace = tryBlock.getLBrace(); + if (brace != null) { + editor.getCaretModel().moveToOffset(brace.getTextOffset() + 1); + } + } + } + + @NotNull + @Override + public String getFamilyName() { + return CodeInsightBundle.message("intention.surround.resource.with.ARM.block"); + } + + @NotNull + @Override + public String getText() { + return getFamilyName(); + } +} diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java new file mode 100644 index 000000000000..33075092f604 --- /dev/null +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple.java @@ -0,0 +1,24 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.*; +import java.net.*; + +class C { + public void read(URLConnection connection) { + InputStream stream = connection.getInputStream(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java new file mode 100644 index 000000000000..4dcdcfb58267 --- /dev/null +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Simple_after.java @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.*; +import java.net.*; + +class C { + public void read(URLConnection connection) { + try (InputStream stream = connection.getInputStream()) { + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/SurroundAutoCloseableActionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SurroundAutoCloseableActionTest.java new file mode 100644 index 000000000000..70bf1d5b8461 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SurroundAutoCloseableActionTest.java @@ -0,0 +1,47 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.intention; + +import com.intellij.JavaTestUtil; +import com.intellij.codeInsight.CodeInsightBundle; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; +import com.intellij.testFramework.fixtures.CodeInsightTestUtil; +import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase; + +public class SurroundAutoCloseableActionTest extends JavaCodeInsightFixtureTestCase { + private String myIntention; + + @Override + public void setUp() throws Exception { + super.setUp(); + myIntention = CodeInsightBundle.message("intention.surround.resource.with.ARM.block"); + } + + @Override + protected void tuneFixture(final JavaModuleFixtureBuilder moduleBuilder) throws Exception { + moduleBuilder.setLanguageLevel(LanguageLevel.JDK_1_7); + } + + public void testSimple() throws Exception { + CodeInsightTestUtil.doIntentionTest(myFixture, myIntention, "Simple.java", "Simple_after.java"); + } + + @Override + protected String getTestDataPath() { + return JavaTestUtil.getJavaTestDataPath() + "/codeInsight/surroundAutoCloseable/"; + } +} diff --git a/java/mockJDK-1.7/jre/lib/rt.jar b/java/mockJDK-1.7/jre/lib/rt.jar index f3b8e7677cd207a1332040862732b453a71592c9..092cc248e10cf9e10a51ac9ea892398ea797db0b 100644 GIT binary patch delta 14430 zcmZ{L2RzkZ_`iFvc|T_M&R&_>d+(9#Rkmy*nO$45sZK&jDIp^xRFpC@GSVi524$o| z;dgGgZ(rZv@BjCDT_5lF^PJ~A&pFTMoab{s*K(yqQk_J6GO7v9QA6K?*3l5VFJE~H zLqya|LPW$$!~rC0&}=vxYYHOF#=FzzoHB|QCn6Cd6!8bB^ZQraVV7WfJ6g5p9nbxP zi&+v|1**&%W398PLJxPPXy%2SwWdzqZ(5vY3-n=CHV@cm7zC3_q3sDs^hq>}YwoO$ z!;|6Y@4QJIPtIs&TTq!vuWX!s-@Nfr?;RhXjqH+1Rk2gUl1Z;FTh0?NU6Pboc`@^y zcjp7!gswlhZ6(Fp-pkqXiLFJ&pTVD@n%-{B`(-n^m#Z#$X-mLY)7mCi+hKM@&p6$* zG#00RQZyz){VQ&2Zth{*rt|k%V(BpR+I$5e@x1Ypu&iHWO_o!08w)a&T7ILV@~BIa z$~J4S@7@y^l9QNSn9RmCEDcr%y|V0Z4l}yqdzR&UQ@GFP#3--Ih2hu>p?(qNuX;ZF zdYQ3*@k(_OpEj+vS6#Gk@wa`&^4gK&Ad=xdbv6B5=Hq?cIP;mqjJN#SlUm+U+xpKp zT7?dwtC;NCY!93}ASz&WjUgmQ+wDZZsEH;K$CM-y2^~qD*o&$%3$4yX1qNNlhuSZw zj*`3NYLAqkKE&vzsfSLp=9lIj)MET8ePfnr>ag?ybCJyaw3GWa zo#0zD&W(B+(GuK8o<<&R_c_+6OZGhtbssh7`?l0p;sL#gfz;WU-E`d%} zlZ}ewK2S`kyS}0j$^6!x?JZB*vUG;mAiejjwAuzAQ$wQ{Q;e_nkb`Qu5pkadwI^xf z^WX$BZvB-?+zuxDRQ`AW9iaqiJ(?q(S#jy=dSk!r?y_HO9@(kNWgn9}H8J>9;S$Y< z1)XIvB$O}rdHG|>N4<8mZ@VNm82P;l(`jFn*%c98jK3ChAp*0J?)S^|N9PE0jCsMv zxt0$Kl(Q!@XGuQpU<_7;WH$UW1heeT%(jc1<_nbN6OFW-Sn5W(WLe{maBZtZrVw*-gf9(668y&A-hikfM&1y?J^~^M9|7sKGq>8?_`@CMa<$27`hDO>z z9U6Wx@IwqgB&`E=q-VClycCK%?Ncuq{E)*BMeCp`;vMXdG2goe+;6~!vt#W|63sSFfs6Mf zCoT)WRa(C5P2bTc5rjQiN@-4oSnFyb%Jhorh(@O z>^Gbr8eG0C$SFoczg)kzu>MYz>OkOF)RnaYdm)7k`{}%;nqvXV(derF_Y^6HE4R6) zGaPbl=~$)Isnpc2S>H=$zZ&c7aqA1E<-MkK5qp!)Z%uu^F6wn}*)L`9w>YTcKqW4I zt@+8tx3Auej;hvC@m#yl{8V+4-M9mdJJtD&@magkajP;XoxT9|0`nB+1a6XcYS4baU>v|XWpm2nwqzg9 z`vmb;qRXoQNt4G*j?qnlkLF;^>l-y=0gS;i8FcIuhdKe+dIUYa^GWKpno z{oU7yj}gxrS}vYYBlp->wJoPyq8q8EzKmmaJZa|oh^;Y)qu}AQcRGD5>nCC`C&W~F zg6)>7I=%1uaE6|&eb)Xg;@HefPrdzyJyptHUcnk(DXivaZohQWyh*uEcmF)Cuh6&d ziyF=qn;q!Mxsyppg*Ih(Z>;#8aXm{rH8Q{@$Neq0g{=A9)Tx$7`&(ijRKIkXyDni| zU5|U_Ir2X8*QC0*Vbz40Zt{bmz^m7uFb5efnq5;e#+Y$A(vvuUq?Y{|^D?$sMXFA+ z<|OB2!uPV1oFu0hCG|(QV(w~{#CSawAn~qy>QSkbUb)2gCG(tY-OzZ2W#fpvVWb~L zWcxP;q2Zu|KhB*?*iU11yk^Ys1j;S?oei6>BknUr>YzkN`dpZT0BuB4&kj#(54ZOt z_dI%`9##8r;@Y^+qI}eM!hK?IKcaL!C0Zp=My70jq|88Gs8C8p^A*G8p{F|X`7v*q zdkg4GC^9( zim-fK`q0uxhF8vk-E;+1WL`q_W=T}WeHX^>G@jFL9;-faGIHDHqTBg<`$au2UhAbD zo25vph)p%gvYwUpxNjMBB%*_9X*E^5!Rv`oN<(q~bBgq-Z+?~H28t!=oQ`%!N7$!E zKCQ;shHllzXH%8eKdbPmytJr$KHc1-0fQd z-uoU8{PhzVe2U#JMNzlY2Vtr<7ftVq91=Gdkoz8mi<_((j2<>9+;+Sz(OjR+;m#j% zXQ7uRUv#vdMd{;Btr(&0t_$hu?Mz$Gw=j#_RXt}bWx|i$KQVRlAvvpzc4gA1OkG!{ z`|%dQZO-H9i^U2?x~hRYs$P#i>Yp3TpkIj8uI}!c=;yq~7BrzC9@2 z>00hs#1&i(_4DVieh#p<>-*%hif2F>o>ANPbw?0N;T6?24db0JS%dMs#V~G#8TtZQt zuCaH%kz!^v?Yit((mbX3iFSZcSks%&Dh#R<3@$d)bSdZDeR4L}sOjmab zyCnVcN|aVB<2^I`69>qtPF(Aw;Eal4;WEBU_Hf?`&kt$YpGJOgOq4enoDg2UPA$MS z;ZT0ILP_E57gx%w#hz{DvIgh*&W3LpmN!owd1gT6)e~)zOS47m<*|I{oY-qMt;4L( zXjq-D2kZ6K;K-uN)p6p1C9l3MJ~u$r>e`;v1q)w();wlg9_?N{-(;2F)2DsVqE|+( zrJHhjqU8D`${?w2CFS%dFJu<1);Z4vQd;#qtEK+>=$=%-MtRe~JISleMPrPPRi&Ro zUUX!ydnaSW6TUSGs76z#VMY%NS(@k_NGpidDk~WSwr;p7lb?zF&z~{>;JPG2U8I4| zzad(VT?SK5QkO0(iO}QX`f)g@S?7(0{hE0;jPF@3<;OjbUZpo zY^4xgDz<`4LGP9~UR*I}!L82ycyOKvE0=YSTF(1RR+V&{h*vRbqvO6sIl41WheZ!? z9&PAg?R?OBrK-qkb6ehAL6^COvM^TGk#_q{UhJc?yqS4lvJK2>mF?Ue@rwFb->|T) z!l47QHziiT8*QyU9*-Lj;Wm=HDQ{(^F~LHn*deir;LO)})So`jDcDFF$_w9qt>2Cc zt7Uv!KvOY*6Xw}S>R-`i?Khf{u+VrgUYtIjdA47~qEgDq@~rrILnDW?^ql5>Aavd& z=d_NahEQCPOqDNdbpchzTm7+H+%A{=jxVWo%*0gMQ0CQrR9}AjEB>RAU7Pg|PiM`x z@J>^ej3BQ6eLwv^?SpZK20MMZoWOfhL+12QRh3NO_23j`oeTvA^KR*q9i?gOV&K2Hnh6^9!GwNTWIz3;+3n@)&U%9%IHxqt6tc#l^@x@I1x7%GP z|B!MVCfY3#Gwi-W(%nn>R?0M?f+IwxTZ4sZ+C9~ZVEw*1|_IX~s157ORBU?cy1%O7;S4#i~r|QR#q|cPzhBID2QsDLY%n_i0mV z_$a2$IH!JPk#N6#Va73ak>#e(?F60&A?)3sDSy0ZNNl!gxH=J8&FQ}?s`5;_mO9w` zg?lfK;>D8{lT?)@#XJL{S^ZQM)-Ue2pJyA)WJMGwpY)toyrY8YeJ5CzdG_oWi3l_Q z6j^N5tawH1k-N=by~j#b2H)E(d~NkMiLnUAUDj}lwEOhA8X}`ogCetFjB@E?l|#5n z7lY5__NZH^naDVEX|@v>{p`dWVnmY^f97t;5KbHE1`JwZtPOb0kqHKL^ws}V* z5l`HgZn}~-fsWOW2BOHxnP;EVnS2C;-#h59kXRoe z(ss;bP(+4I&B=IWpm+ZYecwY19(D~rqj3ETYx&nw6-P*ySMylBukqG<8y$wg`bZTtC*hf++nb&v|JFA=@$Ilm1d>He4oSRLDhP=^suym zr2NsfMls*&Q%`Mgk(Ev!mShYpcPqSMLQ1WmqnL@?zJ$t8oX6T6-y%tzSyfDB;&xXe<+}0&m8+VuSqe3QrnSVikpH@}GL@PZ;_>Ev7m%&v7_Z z!qaKEVv{+p?&9vR;E6YyenGr)m@5n37jYD4cU`5vJWKlC9ZR$CX0L<57`FP+fV#KxfOCJaL|XmMuU-CXCBS z`gwHt7)N_%VVHhsgU838^*0W-hA5ocF?>8oU*LTtE6dl1>1tuye&2=rFGw%BD^~|_ zXIJWcvTMjOJB^E-~6_2tOm5vyXAR@GU(51eeWoKCuOi$o!jV!I{?@hc|EXoI7g#SdwoZ z6s(CEKHKy?w`^>quDP+5V|_2saK4jwzQ|~E^2#r+d`9EySf?9nWFPuA?M$N_&YpN^ z{)SGYJQKJ6h9>`;rTcD_>G8bb8lm}Y>-$gWPOb3SHOKVX+%>9>&anL^U;BwOUoJPo zro-wS&U{1SDZg-QrQH#2pS9e_G)dZK)Gm>!M#U4L*F4Sr;DE#CwunK}S*^&R{G7q8 zj)RX(t8!O{_}|~k(Va1WQ#c#z%V9VcdHD{FLE(}Q?n3p&=!Z9MaJ|2lKm2B(YV}nby{`@zyg8(=-iW59>9v#Sx>(>_6UX3!(zpWY%f!*RGDry`Nkv%6-`+p1sfILyGCa}_m9I1m zyKppVHtvf_%r7m-4>RnKx-u6loG+1C@=Jb0VRPb!SlHrM5v1js=aBe%OP7Wa8-r@9 zBYUwR)DJ7FVBcEzf=myfSPyP*c9B!xt4Dw3IK+@ih3p*-37&&#pq@lB#vF2E-D~Mi4ew{}-o}>hH#jxE8|##{$IUq(f^5lGn3ewMqSp~b96?1+To11uvsWTAZCsVNXNp9GInrN_ zU_Y<7IBG3N`aI;7raHS^rkO*$T^hoYjhVQ;_2}5Bx%yG!w0Z7ij_eoDQv?Z4YQGI0Ve(7HkqPWOAT}I~f`N5D>|I6upC*w={Oui&Hm|LuW%v34wQsUW? zoj0#vJv+{H2`4$T(Ea+y%=O`mlN-lXxv?+&gN~;aOif{>4<7vLPrH8fWS?btDd{M& z_8@V`1ri5$c}jYre5-{n`%%h?S$;+R!IW`bcBL6zd$HS(OXxcKNZJA{RXn)OKMjia zJ(^@1;QHmRk?mLY_)$k$muZ3MaQl+jT&RQ_42S`H-q+^No)w&~DVT-pBaU(^4|62`&a5;be_u{-c!KV_XhbSsu1>?3 z^bh4f0u!konGcmkQ9Aw*963`g#(U_{5+w`YWKUnJnN(|^k^#8Y#o{Zc?+LVq_s)-!9qV7ndSg4M%7ga8JsRF2XJ8YYzhyMYr(#lQ zFe4Yok$`m^zek>VSx&=U%HrS!3#kh~JqG6rDIUgNSYV*(vQG-TVnP{Tv~gPP`Blmh z4mr1BH;>_ys%b9`IF_ zY>_KT$(-|zRGPS~0d=DJo0+Km&#n!6HwRJqC65|!z2x#~RJ+FVz1YcDue$k6LI{IrdW0pzNwW?&72DxRTzmme3zmGKqqR&!1yk z4IAIO%W+u6>EeB^(`%<5jvsee3Y(MP_cMU_Q$~pro#Lyrj-U4_g*XxS+@9ljG0Za> zc)ZQp#mal0EA}f+a9_T~K;483{g}%;1?TZ0tTh{S`PY_xA4_#s_K?Qd zeryb{sJl~gD_prMe-SD6F0@TX1r2=oWK?i3;p%#4ef{k1e9@l@Qn%{sbF0s;8reEi zpSg_=m=*0~veUVDoAk}BBa6t*BkJBA#G!nqObYj9amG*eLk|wpwQ3gKW@I{@ zRj(V6IM0g~dlWcL->Or0n_hzc$$!Ia{F`Kh-Cz7p`;mNGlYT_f2BTa+Ml1@x#?8MbqFV3s4wtIDK zw9bpHR?hpbX3yiqS8vX{tR_r|s5dU8ThtECBK{d0k3Z4vHb+0wssO34Gi<04=@h!T|L}pdXYEhTxI_|dUcK$n>qUW+b!xw zHfl-5oelXCiq@@PEeEe3c$pL|?th@|JJa;#U)N7$jBn=NJ%YQPQl=WIqJIMM|Loaz zfO~ZOf^tukZcN1O;fmV~t+{?Be!FY^;c21Ld0dyndD*nrEJen>Uu4@*A=x(cro!x% zjZ6Y1=PBBmItIALFaOXJXWVy7^0{(a81CTH53kaG^lp?;{PHUd&VnaNKJ#B^7&p<87CR)d68J4ILt5t^@z;5i(BxRw?6Y-U6l)WT4);iN z3WD#GM)3`wQ`Ye!$vWm;#=Gn4(Xr1utmnx^4U1lE$cs_;QjJ9OCgF)TdkyD8asvu>JY)Afz~ zHRC$n(avpwSgY4X$KR#Ie4vgi-f2}>DE8YqSKrl6f6`DT^qQf~?rT@h$*#^f=|5*n zsn)CI@0f1zT(?K4KT66rI~;xJd~6IP*q0+#yJUw<_P)*H%ic-|MiCKdqlt*P2ye5P zas1K}9szD)VZYyU|9{?U1zP%>ptTs(>}n@Y3>bKSuO~CQuEiF2Ah9vA3){G*elw}| zL(S4nt=$`CA6Cn`M{>@5*|?uu?B)GM?MHE#_x8Ho5OooqjE-S{nM}`MHg39MIQh+-wi|eRU1*Ecn{trN zkj1dkBrad2)8eN6Md!v`?PuC7p7$Rnl9+IZCc9rS7}jOW5R|b$<3TNUUFHI5s42Ox z!0t`jU|3bnT<=p_4LtX@-tkoLE3vgF#q^ZwW;j*1=M_k-cI);5=UW(BmWHHp#yehyPka?@soqLikd01b&#|i%37W z2scUJU`d^T;4m*Y_W-XwQ;7efLKA#3dENrUic$w`78oHM;w^Aq;FHh7qDs<6y3u|m zw+k1pX*g@}B`Mm=3Q0@4ylrUW=Qg@aq}`(-A|}_CT#|6EBq6ILp`;`sDKCNMrZvr# z+^oEWf`qh$yae_Sw)#x^q)hvZ@)9WeFb%ikFR=D`yHAr49Wp_ou|!z>%TuC(_$gKB z?eCw~Wi;}QMuZCkU#yao6aC*WTCn`1Nz|0EuLk}5YZnwY)+B_lT>u_ogdWX61fJBP z*{J@i5@G7m;6ojHKNzG&C_y|u!i6dUrSynCrlJWA?l+?uz%P143iGD&4z}*tr2g+y>VsH)554`@(^AJ>zeMi$G|Mr&;Xc>`1s0QH1h!~){ zKouimhPl3t23gx^HgJj&I>F6^aG|l3K!XV}MqLMIm=G+m+NfRpg$3lWAXuQ!f=Hn`6hR&LRsO!ya2hZh!uKAgCPCIikP9LwF%&WHim|v z8pj6R56~gdK01)@pobQo;ORPD0)0al!wA^f5mEFveFC$hkD&y9kijS#VgRQhh94Z| zhMo4?sUBqK~o#v|NZ0N((r0!GW9xC0vLF zY6pDgLJZL~oj`#bj`9pR!wpq~!6-LkhdK*H_QPp(1EKJOX@7_Tr4KR8_(`G!Q~RM$ znS&S*ItYVpC56H8^B`0Iv#203HTA#u)s+Nm zL4ux%ATbMY6+|@A%)$hQT9}v(>=*c_WxpsfHPzmhUjeNU;*XXP$E)*zOG1bRnpXxS zh{6_h!iW)iN)`|J08SW=cAWwNEa4>@Y6RdY0s)H-0dVUOQ-E|aL=dnT{VylAjR-38 zqA=VR5HAV?JZVedPT9g{>|)UIG#3IBF9xm7c@n@EJje_n0Otb`6oeDNV>}p$#RFcT zAPz0hfCO=9+4nSo3qFmvECDU|XAl^i1Z)zO^9SVo<1f1;OoG$`0-ag#4}BU>F9HJH zBMCc50JKs_06Myyz?Dfsb8VG`@w-<^Oi2h|T^hEFy@99qgZLZ7$qA6hK-TVFcV1B)?N%5CA3Eii{mk za|0|p2`5-qg1!MDrHmXy0|Ahyg7AY<0TL#{P;V(i{eCF|t*ioXNp3AXh(?IigH9SIGAj>glcn(#C$sMA19(V_hW5Y$hI`OoccstFZK zU*cs9AXXEu92sx$fF4NdA=DuE4Yar=4`)wQ3o35U{FTvwV_I;UE$8+y6L@A6Cf%R* zG(cM$F-B`H?qTY+q0ZvxJq)J~WO`QiFoP@qgx976dwueCkL(9toA$>Z##0wEaa((s zQ9Q%F^Ovzl@1TIR0U;=BU}y$!1VxZ; z1~<(#Fkpt*VVZHI;3AGxfUre5n!{an6r3?!IL?@Agqe-NKgq>Q$0`74B z;D`m344ftf^`}W$!CecuVK0CW7KjFh=?p3OnNG?DIAY)?`n#&C&LrKt?@fTPLx>(K z4744BwbMp6DVWSAEn)dIcAgZpo+p(Cl-W>e%o6&r305tk z55+B{Afbhn6Zq0WiR)n~xd3p7Vdb>|9v?=`P%ePQ3ekaM;0!NlWD%5G!BL(1ePsc! z7D?Fvmo+S8d_UtQzZq%}VvR__(yiPYF~qd}A_a82q>KP%gBW2-xBsBRZBlj+XM<>B z4($G>B*8L7XgZjkwnzy28ybIQ1Ygi(e!2!`ia|Qx2N5mK-7eofwg2?{VSS#spMXhm!hV4MFBcee|Qbl;I&*N*%^id@E!i z_z0qhXK~&_RUx=Iwn6e;LfYuG+L~GLm zNjF3TZNdOT++d*DjNq0V^hKMQ9F$0tbAtBhe-c>O9XiXvPY#0B$$5c~J2ZGzfc(5B zbOu_d1=qF6_m*qU5hVvOo`^2m zNgfz^!lKbt0c3e12IzKW@XQnD>y#>B_k!|$8oGkk`LNE>{r-k2P{pV-Lnw&8AVW9z%)=?oKj|}b^ z{64V8KW+zfeGqxfMLTHZBso3E^+A*|=UsjyZm{HoAI>Ac5etw$h8)Cjx&J}9V~7F< z>-`%sgOOwKxobIq93*6uGXpkXsF@V}2l@CS(wKtK--rd=@vGBIfRi8e;bGKoiV0lugK7IT0gU*;`xBk=yLWmJQcBJMD1xCW3x8P1 zkDUI)t5=XyfJ}dAU@e0jm{pRq0cX6{Td0MW17O!5&RoVtU={$U<7+3#3xG5CeS#cV zu8^~XG9ReA8vqU7drl5QX(*V1)EYS%P!EI#1z!E35(8m$ij#lP5JYIz>GMI*J^tB0 zq(=}`$(;LxZsO6Eg+FLB2o5;Ir$4AH7$E@}#1vS(pQ0H0&;Rm@7^#(i5efJa49B>B z?KdS1NVDN%?Q|f#>-|Gu{xW_0%}avT5NL*O<4?n%A@HtY*!+WNjw2KxhaPqYhmICR zgu;gVe*G(?1i4HUj9?%Xnn>CGmsdsWV!%ugTt9zX=;Wk;+h{nnkaiqq`8WwdHXH^= zulG1yMIy0#7@;sk7HvVZhZz!q?aze4)D~v^OPit}G5-aWKr(C1^#L=5i)29-}sCOfzCCB zHW6J4aeNw50<#DxdvM^tGDc7p0h5wT<}b~N4~G&koP^qFg})uZBMVCkCa{8+MdM|< zN_%AYPQnmi?zx#F-a~H=+d^BH;sVs1pSkJVC(@n4;iN+B<{Q zSa^`&fCm}QASDWMLU*~~Nv`wJklXtGH$VO%TLG=?ju-HQT0Btq`3uMZT@2hF(gOD| zS@^9U7Xu5Fx$yr@V^6^>WPx3vog(ovVc;4Iho&x$0NP`rF`{HV2u5pX;IHr|j6>AW zss(r;3!nih6eY-uMFfEBDOl9f7vcr{ct8g}Ln-<}F@e!+g;SH20G&C4gB^Y?`%6=R zY8>pSvvLnZ6OTBfAK&~hLy7N?3EYW?X&cc%ko}5>&jiW0{sNfQ39wg*Ry+gOxdcQJ zEpq!05XO=Mp+q>E?t7V#MEI!U{cw*CWY__563qOj-v82Uz=IBsSyB>y%--&ibtS?4 zzCOK&;rE9J+pAvTOh8)Wc+|Iym(xpMg8MwPf%7CRaa5ZK)hy}rB zSYA*a09$%zK!eU!ATN;9E$a}a?MONZm|Tbniunr98i({^at2>g{B)aGL0F$jKv`fZH;?0@`z z5=AhwnFa5M(HH`-&PL?Xji>N{9bC(Xd+b^^7MN9GSqc5@X2X7_a{zY^j951xxaGjQ z0Th7h9JrxPH-hCH_$v^z(+8zdS`LHOl9l?TzPgpiWKo$A0Y1t^~&WC0C z*Y|KoDL@qU_J6<gOPXn!8|mv=SxcDd|9!Wyw~-MB!8c;2`}a);JXrqSI8Pqo5cxmn>w6p1k|2Li m+rbJ4!XSb_U;khK1bE1VgcM(0Rimm=VR=METd)xk(frQY0 delta 13398 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 S3gQal*i0g#QK&~m^#1{(?e`S` diff --git a/java/mockJDK-1.7/src.zip b/java/mockJDK-1.7/src.zip index caa267e8a6f4751846cd92f565b725bd73ec50a2..82b834a1b021b6ec3c69af3f90d634049b506a4e 100644 GIT binary patch delta 20928 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 delta 6347 zcmZ8l2RK##|G)R1yYI=~>uMO;l#+}PB9)P3k8B}(yY`5r!iS2wk(Ti#xyhEVL@G*T zSCqoHjD(E;F@Ddt@Bci{d7k(C^?9H7e!tIi&c|ehZ`tzc!HLo`(RzkJTMy=9bo-;^yy$MwxZs_^menLFH* z-4meH##SZFZ*|G`p|?$4aOCvVLvC-Gm$dBi8x?lOdj=irlWLp;{wC+7utgTf_qi6x z9aI~dSw3Hi)#AESu6#f(PgVHcP?7zfSN_FHlP@VHikBbsV2*gjE7a3Y9&L#}xU?g^ zR@(RUyK<}TtTqbCp>|g}qT3%vNROWjk9?wf=1ae{T#JW!=8?RfA`XY>WtnEo0$udf}>L`5q%K&wgF?G!2mEejK**Tfif^g3P=8rhM}H({-YO=~881 zdza4d|4Umwu;g1ney?Kdv^DLKRo6og`raRHuk+Y--d*od&)2meCQu)|_}bIqyF24F zcA&5a&HhDydgU0UeoV36t;5eeD%#tEQ)P`~)jYN3xs&X*CAnO)3pOqzTD7x|IiK2S z;lEcteZ3y;+3#pK-g_tJ!le4MXGg;JodLtPHA{;VH}ceJ^GjdaQ)ud1v>uNNKZ?KI z9PF#J$j@tN`@Fbwe`l{mNJnGE6a1?-UL`i!hSq=^GbTy3uht?z9{2h>l2e}XXcTw7 zEUNzNhr4&%x`UfWFAHQkl+lEjy8DCBkJu&ob+{vi{_43oA15Z$&~o!dQIGd2r3V!h29wIX@?H);eByiZMXZ=@xIOjQdmPcc z>M2jJ6_<+SNbsdu9ezrZZ*=$-`67tN*TYVf{TBA0;5x1pQnCEDy5u z_R6$Vr%o<%E}#msnk3>mIDHlM9>#jScA4QjeQr+piN=YK5i*t8AqMUywC0Yb2&h~7um88^zNa)S!zoN=;kfv3n9tek4|s2;pC{O419Z=4zqi zUs|zsE>jOP;>Uvr2Cb$Xc$4GXJ7k?qIOd;`J`H9^pkLXTipS4s>JHSkN9{# zvY45=vGIQv)SYUXdlRbmnv}}oc&#MkdBGd|%4g{pB-sX7ckZ`NPi)D{{!4P{v$2Hd zr@_!OiAi$F&8%SuXoM)F$ zx=s3uaFkX^V1V)!7rR6znn$9;cdVJaJ#}i=%@%`-nS);gMlTg}wI*Nd?o%(TKj?hj zr&d%zL~cxR#E8~pkD2z7SAYL@yik=m10@#4HL9_62J|c(kZr%OGyR-|D-)Bii?L5}V8LDHJt#!@1`>Ugi?Q7cXtu8mW&M`PZ zg8hB3QRQyVc*RVAo>sA=} zVp(#mB==v{oUX8J4?k9~>>sUL@o2BaNPwxOD@-&#Dua8!=1c`Z;y~F zxOLw}?yi>?Y)C}IZ_ehNVEoni+y#zgc@!iEpHgp+=4uZ!yZFA$C@=XI?@@KPfp-s>#x!dZxmL$!ChqU%R^IMGDe>m0 zY9Bkc@K^hXWzp6E9xDE}N=z~}o;i&3=jTFy7U~jSF(#R&riOi01!*2uujbeHpF>HB z8ahm}>pAvzZR@7_pJ z?V{S~G&RhCgTWf^Ty-=bW*|9#@=eGb#dR;H(PoIhOzw@6t!BMAIX0o11EaIdtADmE zQtJFlg$LgtszO^oIOR2m;_?07^z!7K>p|r5X9S^Xmcf5$MW317lM6Yez4|`E$F-Ik zIb2Whr`L1-v#&h4#MMyghZ;WrZlR`uF!8$fl0?N*W6p+b_Sjj=N$-Xo_dHX?V`IdR zj6o*c%6@m9UNy6YMKje$W+xxYO-eL58R(XnRjH7oP|EkWne%y}fr}_>UDA?N&e4<8 zgZOJkmI1$7Bxu5@myK3pP~(N+M|Yp+C70RWrzlWgN3Oliy&NUeHrhB6J3q3GCcD3* z(1nz8WEHH8%#=pT)!n((o%mbbowL*L1vT3mudF%ZlTmi(1h4Pj7TeSzJ89v2*2d+m zdsB3&H`_jPN={Pg?Rn*k*(<9D^JQHcRWLNIo^nds#UC{6!!Ps?QZ|BWPpwInczVPO z{yey=Lv`Ckxt~=aJab0b>BQ8@wPx{M&!jI3Jqr_3Ej*@+Ki44I^-D>;%zxK%+)?)^ zg+Q@)k2^^!2X6m}sTWe)Rj!+>6?UiVGn{Ap;SF=3cFQUkPg_xlM~2A3<=0%{%jnEY zvwU3*;uSS4w8I}`siao=>e`IH7ya-077s$w!}zxc%qZWV5ya5`u|%eUm#O_>Di5i$ z#C%p>|0(v^oSV`{#&7pZ%Z=!ntWCCRM<^!z=2eAb;L*b+gyA{Zxz~Exu?_rjz zH}9gBZ4&yMg5b2Y7tw~EOrzmZ+VOVzSz{0FJnvaKq@^|a+&lKfu>KrJd*tZP&?lG1 z#6JgjeLIu7D9B*3ZOhPjF(gynzt?lYUqCg~y@J3@3qPNLd0WCG)Pwh4XqHJx61ZwI zoRii7Sht;4 z05Ux+hqfb9`=cnkPUgN)oXB!>OLdQTX?$%>$9!cIN8bdcx0)ZTS!2|UB()TMdbanhv&51`gX1?|b@{sb> z#1Gw)5`zU36DtSilG|?I+fVZ3iHTC~9l-CUU!uj_bhqq!=ls&*QBMD-q+n>WV&8O; z>p?0pZC|`?vhHY)8tyT-C^HZ9eh%NAsx+%&zCEa-_#A=1nK-TVIB|0v&G4XNe791b z%1yaqShADJ$tk3RQZ)kY(HspB(Wl=Ggu?gAvWKi`mgk}cOU1m@0AKKjrFQ4)Vh(|x zm$Zl`*z|#pe}c*>ufweq?q9|=4zOn1?X7L$yWq3XW%V@4b%>+9KV&<$F1t9)swny? zW&#TKw$pDhGi)?qk?Li7O??^34FAH^=Pz<(kmDG`rUwUlFQp}5$Mx#>8M8*E;BJp< zNRvzToJY=_c`@Nqq8c=Vs=D10`~HS%4Mh7z=v5nUq1$}ljXN;#Roh_@eR0wA@e`h$ z1Q&xmD<1Bg*2eaVl;qX$ovH(<_}h2*Lv25&FX@L;G8J~@?f2DUzHEP8KfaVOb0zn1 zNP=hG{jtJXwO2Py17GVK`tCUupCx_C?E7`x4zO5$Vx(gCM{ecgl&{{xQbGH_B$Y(@ z(C&+Wx-uQBOI2wXjP}f`T5j;b=2Js?l?%8IZ~N9&k@WeWuyZJZc*`R%Yt9aS5vjb= zT+pM++rvoBUcjd{MWQheokDYME zPVG7GBv$v(EjFU3+Q8tABou$v4$ye`+{GO=V+*j0@>5J#SA07xA4BI_?rewRA z7(|n4J|(>4-iy`w!i?_U#YdD}O2<$IaawnUb#vZ3jfkw)t=0{^Dfg^mdVU+1^jf9L zxa&rxi?@T>x87g#s`5LS2?r)Uum4K5tbR(L7ngdMTVeNvRK)K4qaGs%=`PpEqC1$i zSQBMho<6XQ^d_8^dcy0P66J#C&s;bkP73FGe6gvHObr+rYA^X$1skqNZm%-eyex+uPPyG!p!f|S?Y0`?0Od)I3 zKTa)PCO$;Npo4eiLYR)bg%Ty^ZJs%st+l$o3g}3Miaom{E{_xx>;L-P&VW9cn{vin z;~>r{3tfo4$5i%Jb@u5r4Q+T7!UB!cFdu`!gfYc1%&C~E2}ac-u0s$+TfuyZ78HnK zLBU=pf)HEen>T?A+lgV!uw$bz3^QKrj-TtF%R+$53l;%u{%9i5_JY|MpSbaSL=fqW zsJ+636Q0=ore+t$i|B5UiMw*~$W1_QB4bxBY0(z&oq!uz@yPe`zn2XP1>{ypLV(2( z<^xhuFcSn2NHq#JfZicQY80%G8Po$MI%IC}Jqnh9rjMe4Ks05Q z0v<=he9-DI6nH&Hmf3^?m?$jU{xwz3iUx8quo?7B8V$~`6Dj-9z?kGDncAI zg!Q0z2$5)r7--xHfe-5h^EC*_>Y=6AEn&gMIG6~AVi5&>Mo7Rlbatla-O8%EB2V$nRn-2_&LcE8!+B)~fp*aR}_-rx-W(7x_CEAc-Xs((PBKMySo zhP+^=^&cmE&^!X6>FBN82ChSKSS0icwCrYNUF*;u0v3EXg)O1;NLr4af{h?1H7uZ? zg4MvP87u^a=wSi%G%N*>e=mOqjWxh#nZXWF-U%!aT0!sGRC(77QTfRN3;s5P4}bqjTWzCkg`}m+0tW;r&*Ah>=rjb#_s|)XJJJs&}$1S zItyz<8a`Vb*%RTs{kAw)PxvU*6R^d-@Pq{b%?cKUJ_h4}IR#PzBUZ=|Er#O2xor>? zNLj;&pqdCA@V16eLFW^30L=%GnZ9>S z*gqShL6$A7yis_tZ5{H9!vhIh_$YX7i>RMXz=LU9*c>Xn zhzG~)kW#f=!UNS^SV>TChZxj+ga?y$NJ!*5Jcu^LN^C0UGyRX{@+LgEWRL8h?iNJc z9zF?8jNyTn1MCF-8pi{#Fs$n4a|;fL2dk5KzT{P1p%lz z!DpZZD*{;g2YX=C?35ECw8xeJ$j-1Sl$Q;twYPRxf0g*=-W+ zAjAvi2jR|0;V#D!z-?z_UzsNnz?w6%_=-{qz}^K3^6GU0ceWAT$Uk48&cL zoLNs3fOQy75=5K?24F8*CK-S4jexac0+1DiSpp=1^-Skw= z5An2kga|rX{wIFT4-v;gB=Fb|S$T#cByf&G_;a}b%|nDF3FNX8wr_gV#!C1z#46;l z&L1gZ#~u=x;w4D0TaRyM-T3BTzT-qnZElLAi8G!ZVW~zAhmFRaR|5EWyZ9 ziEktUi(q6<%z8;6sE!~BMuHKcktI^r2gKw5bw3g4gdqL!K#2_6g@^(Ggu~3>atP9l znFeG~9fCx8=q?$sgd*>T_A)Y<0K~)V=3r0}3Jbx_mE_H;2Kc*y53B^?%~~;qAwf8N zCIiVZBp=$}$RH^Uwu2J2DPSTDNd?)J0#w3bP3V*l1w@AF+Z6C3g(SIwh(sbtXEg;((>I>Pf}lvm^V)g}xEYD$ zU+yIZ7*>#EHiRW0u0(oyr6~#a{~|uQ_gZ~4}c0e`& diff --git a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties index 9fb3b066d22e..9f45496bbc7f 100644 --- a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties +++ b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties @@ -169,6 +169,7 @@ intention.replace.concatenation.with.formatted.output.family=Replace Concatenati intention.replace.concatenation.with.formatted.output.text=Replace '+' with 'java.text.MessageFormat.format()' intention.color.chooser.dialog=Choose Color intention.convert.to.basic.latin=Convert to Basic Latin +intention.surround.resource.with.ARM.block=Surround with try-with-resources block dialog.create.field.from.parameter.title=Create Field dialog.create.field.from.parameter.already.exists.text=Use existing field ''{0}''? dialog.create.field.from.parameter.already.exists.title=Field Already Exists diff --git a/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/after.java.template b/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/after.java.template new file mode 100644 index 000000000000..1e8791d4b682 --- /dev/null +++ b/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/after.java.template @@ -0,0 +1,2 @@ +try (InputStream stream = connection.getInputStream()) { +} diff --git a/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/before.java.template b/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/before.java.template new file mode 100644 index 000000000000..707cd6e1376f --- /dev/null +++ b/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/before.java.template @@ -0,0 +1 @@ +InputStream stream = connection.getInputStream(); diff --git a/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/description.html b/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/description.html new file mode 100644 index 000000000000..89e38ac990b8 --- /dev/null +++ b/resources-en/src/intentionDescriptions/SurroundAutoCloseableAction/description.html @@ -0,0 +1,5 @@ + + +This intention wraps locals variable of AutoCloseable type into try-with-resources statement. + + \ No newline at end of file diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index bdef3c17b07e..26449e22222b 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -632,6 +632,7 @@ com.intellij.codeInsight.intention.impl.ConcatenationToMessageFormatAction I18N + com.intellij.codeInsight.intention.impl.ConvertToBasicLatinAction I18N @@ -693,6 +694,11 @@ Strings + + com.intellij.codeInsight.intention.impl.SurroundAutoCloseableAction + Declaration + +