From b11499d4de6f34316011b965fe9756dbe8e20cc7 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 20 Jan 2023 12:35:35 +0000 Subject: [PATCH 001/136] Improve formatting of records with a generic type parameter Closes gh-348 --- .../test/resources/expected/record-with-generic.txt | 11 +++++++++++ .../src/test/resources/source/record-with-generic.txt | 11 +++++++++++ .../javaformat/formatter/eclipse/formatter.prefs | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt new file mode 100644 index 00000000..45528043 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt @@ -0,0 +1,11 @@ +package simple; + +/** + * Record with generic. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public record SomeRecord(T item) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt new file mode 100644 index 00000000..5a608dfe --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-generic.txt @@ -0,0 +1,11 @@ +package simple; + +/** + * Record with generic. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public record SomeRecord ( T item) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index c5760514..5f3763da 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -134,7 +134,7 @@ core.formatter.insert_space_after_at_in_annotation_type_declaration=do not inser core.formatter.insert_space_after_binary_operator=insert core.formatter.insert_space_after_bitwise_operator=insert core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=do not insert core.formatter.insert_space_after_closing_brace_in_block=insert core.formatter.insert_space_after_closing_paren_in_cast=insert core.formatter.insert_space_after_colon_in_assert=insert From 12b6ea26b5fd800ecffac086025a1af6bb4ae2a3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 8 Sep 2022 13:40:44 -0700 Subject: [PATCH 002/136] Switch to Bellsoft JDK --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 0262a261..42d4e368 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=11.0.11.hs-adpt +java=11.0.16.1-librca From 4ff8815749f0796098288e99dbb2d37bafda0d32 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:25:14 -0800 Subject: [PATCH 003/136] Remove .factorypath --- .gitignore | 1 + .../.factorypath | 50 ------------------- 2 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 spring-javaformat/spring-javaformat-formatter-shader/.factorypath diff --git a/.gitignore b/.gitignore index e43e9edb..3b33c61c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ spring-javaformat/spring-javaformat-checkstyle/bin spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/bin build.log pid +.factorypath diff --git a/spring-javaformat/spring-javaformat-formatter-shader/.factorypath b/spring-javaformat/spring-javaformat-formatter-shader/.factorypath deleted file mode 100644 index a157f4e2..00000000 --- a/spring-javaformat/spring-javaformat-formatter-shader/.factorypath +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From a9e45a9648ff23a7ed853bcefdfb2c74821e6215 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 10:29:16 -0800 Subject: [PATCH 004/136] Upgrade to Maven 3.9.0 Closes gh-355 --- .mvn/wrapper/MavenWrapperDownloader.java | 117 ------- .mvn/wrapper/maven-wrapper.jar | Bin 50710 -> 59925 bytes .mvn/wrapper/maven-wrapper.properties | 20 +- mvnw | 99 +++--- mvnw.cmd | 369 ++++++++++++----------- 5 files changed, 243 insertions(+), 362 deletions(-) delete mode 100644 .mvn/wrapper/MavenWrapperDownloader.java diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097f..00000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * 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.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..bf82ff01c6cdae4a1bb754a6e062954d77ac5c11 100644 GIT binary patch literal 59925 zcmb5U1CS=sk~ZA7ZQHhc+Mc%Ywrx+_*0gQgw(Xv_ZBOg(y}RG;-uU;sUu;#Jh>EHw zGfrmZsXF;&D$0O@!2kh40RbILm8t;!w*&h7T24$wm|jX=oKf)`hV~7E`UmXw?e4Pt z`>_l#5YYGC|ANU0%S(xiDXTEZiATrw!Spl1gyQYxsqjrZO`%3Yq?k$Dr=tVr?HIeHlsmnE9=ZU6I2QoCjlLn85rrn7M!RO}+ z%|6^Q>sv`K3j6Ux>as6NoB}L8q#ghm_b)r{V+Pf3xj>b^+M8ZFY`k|FHgl zM!^0D!qDCjU~cj+fXM$0v@vuwvHcft?EeYw=4fbdZ{qkb#PI)>7{J=%Ux*@pi~i^9 z{(nu6>i-Y^_7lUudx7B}(hUFa*>e0ZwEROS{eRc_U*VV`F$C=Jtqb-$9MS)~&L3im zV)8%4)^9W3c4IT94|h)3k zdAT_~?$Z0{&MK=M0K)Y#_0R;gEjTs0uy4JHvr6q{RKur)D^%t>W+U;a*TZ;VL{kcnJJT z3mD=m7($$%?Y#>-Edcet`uWDH(@wIl+|_f#5l8odHg_|+)4AAYP9)~B^10nU306iE zaS4Y#5&gTL4eHH6&zd(VGyR0Qccx;>0R~Y5#29OkJpSAyr4&h1CYY|I}o)z ze}OiPf5V~(ABejc1pN%8rJQHwPn_`O*q7Dm)p}3K(mm1({hFmfY{yYbM)&Y`2R=h? zTtYwx?$W-*1LqsUrUY&~BwJjr)rO{qI$a`=(6Uplsti7Su#&_03es*Yp0{U{(nQCr z?5M{cLyHT_XALxWu5fU>DPVo99l3FAB<3mtIS<_+71o0jR1A8rd30@j;B75Z!uH;< z{shmnFK@pl080=?j0O8KnkE;zsuxzZx z4X2?!Dk7}SxCereOJK4-FkOq3i{GD#xtAE(tzLUiN~R2WN*RMuA3uYv-3vr9N8;p- z0ovH_gnvKnB5M{_^d`mUsVPvYv`38c2_qP$*@)N(ZmZosbxiRG=Cbm`0ZOx23Zzgs zLJPF;&V~ZV;Nb8ELEf73;P5ciI7|wZBtDl}on%WwtCh8Lf$Yfq`;Hb1D!-KYz&Kd< z+WE+o-gPb6S%ah2^mF80rK=H*+8mQdyrR+)Ar5krl4S!TAAG+sv8o+Teg)`9b22%4 zI7vnPTq&h=o=Z|$;>tEj(i@KN^8N@nk}}6SBhDIGCE4TrmVvM^PlBVZsbZcmR$P7v3{Pw88(jhhI?28MZ>uB%H z&+HAqu-MDFVk5|LYqUXBMR74n1nJ|qLNe#G7UaE>J{uX(rz6McAWj)Ui2R!4y&B01 z`}LOF7k|z0$I+psk+U^Z3YiAH-{>k*@z|0?L4MPNdtsPB+(F791LsRX$Dm(Gycm1k}n z#a2T#*)k-v{}p@^L5PC^@bH+-YO4v`l7Gq)9pgSns??ISG!M6>7&GySTZkVhykqk* zijh9sE`ky?DQPo+7}Vu@?}15_zTovL$r%h~*)=6*vTz?G#h|~>p(ukh%MKOCV^Jxa zi~lMP5+^-OW%Te@b#UoL6T1%9h-W}*hUtdu!>odxuT`kTg6U3+a@6QTiwM0I zqXcEI2x-gOS74?=&<18fYRv&Ms)R>e;Qz&0N20K9%CM_Iq#3V8%pwU>rAGbaXoGVS z-r5a$;fZ>75!`u@7=vV?y@7J;S;E#lvQ?Ar>%ao zOX)rc794W?X64tUEk>y|m_aCxU#N>o!Xw7##(7dIZDuYn0+9DoafcrK_(IUSl$m`A zZF1;0D&2KMWxq{!JlB#Yo*~RCRR~RBkfBb1)-;J`)fjK%LQgUfj-6(iNb3|)(r4fB z-3-I@OH8NV#Rr1`+c=9-0s3A3&EDUg1gC3 zVVb)^B@WE;ePBj#Rg2m!twC+Fe#io0Tzv)b#xh64;e}usgfxu(SfDvcONCs$<@#J@ zQrOhaWLG+)32UCO&4%us+o5#=hq*l-RUMAc6kp~sY%|01#<|RDV=-c0(~U2iF;^~Z zEGyIGa;#2iBbNLww#a{)mO^_H26>4DzS zW3Ln9#3bY?&5y|}CNM1c33!u1X@E`O+UCM*7`0CQ9bK1=r%PTO%S(Xhn0jV&cY5!; zknWK#W@!pMK$6<7w)+&nQZwlnxpxV_loGvL47cDabBUjf{BtT=5h1f2O&`n<$C%+3 zm$_pHm|BCm`G@w&Db)?4fM_YHa%}k|QMMl^&R}^}qj!z-hSy7npCB+A1jrr|1}lLs zw#c+UwVNwxP{=c;rL2BGdx*7zEe1Bcd{@%1-n8y7D4tiWqfpUVh-lHmLXM^KZShOH z*xFp)8|Y+bM`|>mg}p~MOHeh4Ev0_oE?T1n|HMCuuhyf*JDmFP(@8+hi#f-8(!7>g zH}lOHg#Nw(x(LkB`Q;g)oVAM{fXLqlew~t2GU);6V}=6Hx<4O5T!!-c93s;NqxUDm zofsXe!Q%wAD~BBUQ3dIiCtR4WMh-t>ISH?ZMus*wja+&<^&&Gm-nBlDvNS4vFnsl^ ztNpIbyMcWMPfKMe=YnWeIVj|?e>nZbwm$=sV@Qj@A@PE#Gnjlk{CGPDsqFS_)9LEa zuKx7=Sa>|^MiSKB?)pG()OoM}_%lx|mMlX&!?+`^^4bT=yz=ZoxWH_ngA*jX*IZcHOjb62dT(qTvBPn`2AFuL0q` zG+T@693;<++Z2>R2bD`qi0y2-Zf>Ao)K0f&d2P zfP78gpA6dVzjNaH?(M_mDL)R0U=lEaBZvDI4%DXB?8uw7yMJ~gE#%4F`v`Nr+^}vY zNk!D`{o4;L#H`(&_&69MXgCe`BzoU+!tF?72v9Ywy}vJ>QpqhIh5d@V>0xHtnyvuH zkllrfsI^;%I{@6lUi{~rA_w0mAm940-d++CcVAe<%1_RMLrby@&kK~cJQDXKIiybT z-kqt-K3rNz|3HT@un%{nW0OI{_DTXa-Gt@ONBB`7yPzA#K+GBJn@t@$=}KtxV871R zdlK|BI%we#j)k%=s3KJX%`+e4L~_qWz2@P z#)_IbEn(N_Ea!@g!rjt?kw;wph2ziGM|CPAOSzd(_Cp~tpAPO_7R!r5msJ4J@6?@W zb7r0)y);{W17k3}ls4DaNKdRpv@#b#oh4zlV3U@E2TCET9y3LQs1&)-c6+olCeAYp zOdn^BGxjbJIUL0yuFK_Dqpq%@KGOvu(ZgtKw;O*bxSb1Yp#>D?c~ir9P;<3wS2!-P zMc%jlfyqGiZiTjBA(FcUQ9mq#D-cvB9?$ctRZ;8+0s}_I8~6!fM~(jD=psem4Ee>J zWw&CJ7z{P9{Q7Ubye9)gwd`}~OSe#Rf$+;U1GvliVlhuHCK9yJZ2>_y@94OzD`#Ze z9)jO->@7)Bx~CeDJqQK|0%Pfmg&-w7mHdq3hENhQ;IKK;+>|iFp;c?M^kE!kGY&!y zk0I0Fk*!r6F59pwb<6v2ioT*86d(Tee%E1tmlfVjA#rHqA%a~cH`ct#9wX$-o9erW zXJEEOOJ&dezJO$TrCEB2LVOPr4a1H9%k<&lGZo1LDHNDa_xlUqto!CGM^Y}cxJn@x ziOYwn=mHBj_FAw|vMAK^Oqb(dg4Q?7Umqwc#pL?^vpIVNpINMEiP4Ml+xGo3f$#n$ zSTA3aJ)pM~4OPF>OOXOH&EW^(@T%5hknDw^bLpH%?4DjNr1s9Q9(3+8zy87a{1<&7 zQ@0A|_nnege~*7+LF5%wzLWD`lXWotLU4Y&{0i|(kn5hdwj^9o@)((-j86#TKNN|Got?9j^EYE8XJ}!o>}=@hY~siOur_pZ`mJW+ zg}Q?7Q_~bhh6s%uqEU!cv`B=jEp1K|eld>}I`pHtYzif`aZCe88}u$J6??5!TjY7Z zi_PXV!PdeegMrv48ein(j_-BWXDa73W&U|uQY2%u#HZ5hI@4>q?YPsd?K$Vm;~XD| za8S@laz_>}&|R%BD&V-i4%Q6dPCyvF3vd@kU>rvB!x*5ubENu_D>JSGcAwBe1xXs> z#6>7f9RU7nBW^%VMe9x%V$+)28`I~HD=gM$1Sivq)mNV>xD~CileqbUCO{vWg4Rh# zor2~~5hCEN)_0u$!q<(|hY5H=>Bbu%&{4ZV_rD1<#JLjo7b^d16tZ8WIRSY-f>X{Z zrJFo^lCo+3AagC{EW4g= z#o?8?8vCfRVy)U15jF^~4Gl{&Ybt92qe)hZ^_X>`+9vgWKwyZiaxznCo|TfVh3jIi zcEf?H`U;iFaJh=3Gy2JXApN`o zE=O1Gg$YQt6|76IiMNF?q#SA1bPB@dw#H+-V@9gL>;1mg+Cb#k1ey8`dvR+(4ebj= zUV1Z)tKRo}YEh@TN=$v(;aR{{n8vk`w|nNuHuckt$h27 z8*aBefUxw1*r#xB#9egcpXEi_*UAJYXXk!L7j@ zEHre9TeA?cA^qC?JqR^Tr%MObx)3(nztwV-kCeU-pv~$-T<>1;$_fqD%D@B13@6nJvk$Tb z%oMcxY|wp&wv8pf7?>V>*_$XB&mflZG#J;cO4(H9<>)V(X0~FRrD50GSAr_n^}6UI=}MTD3{q9rAHBj;!)G9GGx;~wMc8S8e@_! z_A@g2tE?_kGw#r}Y07^+v*DjB7v08O#kihqtSjT)2uwHG1UbSIKEAO<7Nt3T;R`YCSSj z!e)qa4Y~g>{F>ed`oWGW>((#s$zQGbsS&sg}^pBd?yeAN05Roe8> zT5^XsnI??pY-edI9fQNz3&cr}&YORzr4;sw1u{|Ne1V}nxSb|%Xa_Xy5#TrcTBpS@ z368Ly!a8oDB$mv21-kqD9t&0#7+@mt50oW4*qGcwbx}EyQ=zv+>?xQUL*ja2`WGq` z)sWi!%{f{lG)P(lu6{68R~smEp!Jy9!#~65DQ1AHIc%r7doy*L!1L>x7gLJdR;hH_ zP$2dAdV+VY*^|&oN=|}3-FdyGooDOM-vAGCT@@JyuF4C(otz>?^9!lR%m-tde}ePe z)Jp)zydtP%C02mCPddGz5R9NYvrS6)Bv$~r@W&cP5lLp7-4NrEQDN3%6AmXH@Tdfj zZ+k^}6%>L=d8BK-pxgvV`ix>w6F;U0C zlZ#lnOYYDhj4r)_+s){%-OP5Z{)Xy~)T{p`w1d-Z`uhiyaHX5R=prRWzg^tr8b$NI z3YKgTUvnV)o{xug^1=F=B;=5i^p6ZQ3ES<#>@?2!i0763S{RDit@XiOrjHyVHS*O` z`z@(K2K8gwhd0$u@upveU3ryuDP~by=Xy(MYd_#3r)*XC z^9+R*>njXE-TIP1lci2Q!U>qTn(dh*x7Zxv8r{aX7H$;tD?d1a-PrZ_=K*c8e050Z zQPw-n`us6g%-5T&A%0G0Pakpyp2}L*esj#H#HB!%;_(n z?@GhGHsn-TmjhdE&(mGUnQ3irA0sJtKpZ!N{aFsHtyTb#dkl=dRF+oo-dwy<#wYi=wik;LC6p#Fm zMTEA@?rBOmn>eCuHR%C{!jx>b|+<6B-)Z%(=lG{@y_@8s2x4Hym6ckPdCB$7NZFp_|El()ANXTORs zO@b$@1`3tXjEm>;bX)%xTUC>T)r6eTFtq*Rp*_?%C+fEzT##kVNH` zV}-lw6&hY;cyl5#RR-w!&K4e)Nf4noLFyjiAbKvP7Y!=2lRiRjc$&d?P~!zM@4!?3-vyqs zhm*63jiRI7cfruv!o=zO%H2cQ#o64%*4YAJ=xp~No53pO?eEA$`fR4x=^|*#{u3bx z1YB3OT97ZU3=ol)l`K!lB?~Dj(p_i0)NN=fdgz(QBu>8xV*FGZUb7m4NEbrA+BJ1O z%CPI+T>JPq9zpg~<>QR+je>?{g)rSuWpyCDcc2@rE8T>oNWPiP*u zLZc3LaQVEsC6emsi7DCL0;U0BP!SwAkXuetI25TYuCwD8~Z|M@2_ z0FaBG|x zW)FZvkPsN^5(Q}whYFk-E8)zC(+hZMRe5VA6GZM!beBdDBqq#Rye$I~h@Kf8ae!Ay z*>8BsT)dYB${E3A^j5m_ks3*1_a^uA+^E{Gxcgw2`f7jw8=^DG391okclzQA zwB6_C;;k_7OnwT<<5RjXf#XxTO9}jrCP+Ina|?UA%gFvNJy7HFEx9r{(c&yDZ9e2aovtJL$um8u>s&1k@G6# z-s55RDvTcFYZji6x+UMyCu{&*d4N<{6;H^PEF!?X@SqMfGFR}LYImL1;U}{iT!qnA zgqLCyvSp>>nS}|sv56Dnwxdo&HrZG1WQL_EkC!D6j)JW4Tv1yyqe&aM- zHXlKm;srQVctoDYl&e}E-P8h#PCQNW{Dg*Te>(zP#h*8faKJ!x-}2Rd)+>ssE`OS? zH{q>EEfl3rrD`3e_VOu!qFXm7TC9*Ni&^{$S76?jtB;*1+&lyEq_j{|Nhg&s;W6R9 zB#r9L#a7UU(Vnq#7asUx%ZyVz{CiVL5!CBl-7p|Kl&=g>)8e?z&u?Q^r>L@P zcB6n=#5Wz+@-j`qSB=wD1p_n<(NhAp8wa!IxDP?M&_ zKNcJonwpOS>a3-OBC9jGV@*WND}F8~E_QS7+H3ZK6w&kq>B}kc123ypkAfx`&en&T z+?U=!q?N5DDkt(2$KU;t^dR}IVC|M)pn@S)m{saxD4V?TZZWh@hK|C|n(P&eXLAq1 zZ#v0gPhHJYiyjEkJT~&%u@zLE`Lm!p!&-VAfk?eF{HN%PeV5S87-u3n;g}^R(OZqI zA|##x9SAAKAb!FSr9+E^(}_HX+lb+XLQiWF2UmH*7tM?y7R{u3(Vr<5h8V>Y-c`SgYgD9RvV*ZP{xBLuk-5sAcGP5G zDdk)Ua8PaYS-R*C(V(}4>%>{X%~yk{l3&El7iOz}m0Y8MAl_Qc`-2(z2T3kJ4L1Ek zW&^0C5lA$XL5oFZ0#iRevGn2ZyiotWRIag?#IT-E$gv92YXfp3P1BJxO zShcix4$;b#UM2o=3x#3;cA8Q#>eO8bAQ6o|-tw;9#7`gGIFVll^%!T5&!M|F|99EZ z?=t(Tag~g}`Wep_VX!|sgf_=8n|trl((YTM-kWDQ1U@WIg!~YjGqsZNOrayhav_lrw< zgSle+;b;p^Ff)tDt~?&TweI#6(}<3?Uw1@|4MvG2w}sQgX*N;Q=eD+(bJ%jKJ9L2o z3%MlC9=i-DKzXOun`;&7ZI$Iw?Y|j!RhIn*O`mRl2_vUnE*Rf6$?{IC&#;ZS4_)ww zZ${m6i^cVHNiw5#0MSjEF!NaQfSr&DbTX&tHM{Ke)6Pt9^4_Jf%G&51@IH0aA7QRc zPHND$ytZTZ7-07AEv8Rn%5+<=Bx1tWJSG_?CqXuJ99Zwp=hP2?0a{F)A8HLWkv z)nWbhcgRVdtQ4DpZiw6*)QeCWDXGN6@7m@}SN?Ai*4{l!jL`wrp_lL`bJF6HVAOnj zNa*fTj+{niV5~*O zN5NwHHcEed1knV2GNSZ~H6A+13`U_yY?Dlr@mtyq*Eutin@fLqITcw+{ zgfCsGo5WmpCuv^;uTtgub$oSUezlUgy1KkqBTfdC=XJ}^QYY+iHNnhYEU)j7Oq^M^ zVSeY5OiE#eElD6|4Haq&dOHw4)&QX=k_Ut{?Uvr21pd&diJ zB2+roNX!_7mJ$9n7GNdG8v{=K#ifQnT&%`l82sR{h&TKf?oxK%8RlG}Ia$WP=oQ3C z8x#$S3Rrheyw7recyTpSGf`^->QMX@9dPE# z?9u`K#Vk!hl`$zv<^Wl(#=J4ewGvm4>kxbr*k(>JDRyr_k#52zWRbBBxSsQfy=+DkvQ40v`jh_1C>g+G@4HuqNae&XeekQeAwk+&jN88l@etjc2U0(3m{pQ8vycb^=k>?R~DSv8<0tRfmLp27RlxR~V8j?ClC z)_B-Ne*s0#m}G~_QwykU<`~vMvpTlr7=W&w=#4eEKq!$muL_QJblmEh6*MUg!$z4fC{DBd*3h=N|lf1X7dTfqL1v6~_al z%J+WD;fSJ>TKV*mid$G+8eIjdfK%pu!#kkan;Qi>LK<0bn$?ecFn-b|@+^+OT=0nl zZzN%OUn9w14s`D45>E^)F8?Z?;l!%DF^oL|Yt!@m^V@3twFD@^D5$*5^c%)sM*sbi zk(RQq-d<^O7T8RfFwEK9_us2+S$&W1-Z3OR+XF6$eJl7IgHM~N8sHzWeuzxpB% zE9h3~^*;?_y)7i>a4#z6(ZQ%RaIo)|BtphTOyY@sM+vd#MYN11?ZV(xUvXb&MFg6g z=p`JrH(5;XsW4xVbiJ?|`nutpC1h*K1p~zS%9GcwUz0UWv0GXKX{69Mbhpcsxie0^ zGqgqzpqFAefIt5 zbjNv;*RSO}%{l!Z)c-Qw`A_=i-}4-?=swGSMI^E7)y37u+#O1^yiI2ehK4F|VMVkK z!hIFgJ+Ixg^6jI3#G8UbMwE1a!y~wFx@T(|6G*f($Q=e5na9eDt?f6v;SI;w0g-j% z!J#+aN|M&6l+$5a()!Cs22!+qIEIPkl)zxaaqx#rxQ_>N-kau^^0U$_bj`Aj28>km zI4^hUZb4$c;z)GTY)9y!5eJ{HNqSO{kJDcTYt-+y5;5RiVE9 z-rfg@X78JdxPkxzqWM?WOW8U(8(Lfc7xz`AqOH6jg!Y-7TpXRJ!mtM~T)9C^L}gSL z;YSLGDG_JZayritQkYm6_9cy96BXEf5-2!+OGf|OA7sdZg?o)Z<$B#|?fq|82c!WU zA|T92NDMBJCWHwuFa{aCfTqmu)kwClHDDbMnUQhx07}$x&ef5J(Vmp?fxerb?&J3W zEcoupee$`(0-Aipdr2XA7n`Vp9X;@`bGTh>URo?1%p&sSNNw!h%G)TZ^kT8~og*H% z!X8H2flq&|Mvn=U>8LSX_1WeQi24JnteP@|j;(g*B2HR-L-*$Ubi+J1heSK4&4lJ| zV!1rQLp=f2`FKko6Wb9aaD_i=<=1h?02JU2)?Ey_SS%6EQ>I20QL=(nW-P4=5mvTJ z&kgssLD)l`rHDCI`%vQMOV-yUxHQyhojHdYC*$H1=nrJKqFo93>xvB=M`$}Roksx# zRgV+d8#sk=v+tN#P-n?dx%RC(iv;9-YS-7PrZu#xJ5%k4i*8joRv1J`M_tOQR`{eV zE~<8%VC63sx|_U&{Bpy&?!~^Ce+CNv^T)?diyKrA zu^d&el}PFVWKFz9wkriy~eruRakPmmS0ZsKRiEMGj!_V`HL0FT$ zQU#r2x}sc&kxyY}K}1C{S`{Vdq_TYD4*4zgkU_ShWmQwGl2*ks*=_2Y*s%9QE)5EL zjq8+CA~jxHywIXd=tyIho1XBio%O)2-sMmqnmR&ZQWWD*!GB&UKv6%Ta=zRBv&eyf z{;f~`|5~B_&z17;pNS$3XoIA~G@mWw1YgrTRH95$f&qLKq5wY@A`UX)0I9GbBoHcu zF+!}=i8N>_J}axHrlmb)A1>vwib%T;N(z z!qkz-mizPTt^2F1``LZ#Is;SC`!6@p@t72+xBF5s!+V#&XJ54bJ|~2p(;ngG3+4NA zG?$Orjti%b`%<{?^7HlMZ3wR29z7?;KBDbAvK`kgqx4(N-xp5MuWJ1**FC|9j~trE zo`+jX&aFP*4hP;(>mA>X7yZujK`$QP9w?a`f9cQJaAA2cdE{Tm@v?W3gT&w=XzhbY zCDpADyRHQ?5fOuf*DrAnVn6BjADR2&!sV&wX1+TC*Qk}9xt8KA7}6LBN-_;c;r`H= zwL1uGsU0;W?OEez?W5HYvu>6SR+O8l#ZM+X@T3>y9G^L76W?!YFcytB^-`NyTDB=; zw421!sr`Wwopu>VDWNN>IN&RxE08d0JJZigpK%)p|Ep&aHWO`AFP)}VkqQg1S#TY> z(W)bm7duX(Nvry|l%sGs+Eudz3=_A0i@M47VtBp1RTz_zxlmqgi53tT!_i)(bad*R zt<1n~oT!|>QLmYf?YL$n8QEJ2A6liMI!hRY#mB@?9sWAUW8! z3#M&1`ZQmRP*o`jtHjbA78}!&iq6v&rlp|5&!}O}NT>|10NoWbiq5@7lhquTSHBCO z2a!-M+(e10feoq(nVw~!ZC;y+4M=F0%n)oHB7{BRYdVpeTN zryeS3Ecv^OC_2HcYbRWnOSY2McCa2PfRXH~!iu|fA^#y<&eJkS1^d|DM3)QKAnMe1 zp%9s~@jq$zOV8LQ$SoOZGMPYE@s<@m$#S(N##mh{yFb!URLo?VmR4c2D<_vio;v$u zEJivu^J$RML#dZFhO#!?D8s-JTIP{sV5EqzlSRH3SEW;p+f8?qW%}bdYNyDgxQcQg z)s4r6KHcPGxO_ErHr?P}mfM;FZE)8_I3? zDjMJvQui}|DLHJ=GXcz4%f~W;nZtC{WKitP66ONo4K<7TO!t?TYs_icsROOjf=!bP z#iDYw8Xa2L$P!_IMS+YdG$s?Gh(pybF}++ekEr=v(g97IC8z28gdGEK?6QPNA@g_H znGEeNG!5O#5gfi{IY+V>Q!Z=}bTeH|H2IGYcgh~!jjG`b~gGo!$<2(Kis_p5;(P-s_l8JWL!*jOOFW7(UIXj)5^C~7r z>g7M$hT|sIVBpur@M~;gi~j(BNMp8UkYv?y&{`-sK=@)-@S(2kqobO@Wt_pSnMh|eW*8azy%8exS@DAQxn9~G zE=4(L_gg-jHh5LtdXPgG=|7Xcq4E&x?X2G2ma(6{%4i1k?yUE4(M*Qk6_ z1vv$_*9q$Ow(QAvO;Y5T^gBQ8XX5ULw$iW6S>Q`+1H*Qj+COZ<4PxD-Fwh71j0cBx zz1pnDR}STs5k`ekB^)M`Iu39H@BwM@^8_X7VVp@epjNMqRjF($LBH!#dnEe)By}7T z7*XbIUY>#irgB@|lb)RRvHN^cPT%6slXqX1FW;4YMtNurd;?3g>rm zCSyAc0+aO+x0NojMi`4bp59%=g=zuk4R4o~hTUxxaj-YA z@UtFr6OY{A=_+?qZnrqBO49}q~-hZ!+0QZzD)8F6c7AMQ8Edl-y|d#R;NOh4ukOeId((#ChBKo`M=8Z@5!BZsX7A3n)%+;0Dy*bI-#fNe6_VV1{v%_*=I&54mqAWAg z3XmVyRkbAG&>7rIx23lx*caz7vL$Tha&FcrqTEUNZXhFsibRbc*L@H$q*&{Bx?^60 zRY;2!ODe~pKwKFrQ{(`51;0#9$tKAkXx7c-OI>j-bmJb*`eqq_;q-_i>B=}Mn^h`z za=K-$4B2-GE(-X{u|gHZ+)8*(@CW35iUra3LHje(qEJao_&fXoo%kNF}#{ zYeCndcH;)cUYsmcLrAwQySyF2t+dUrBDL;uWF|wuX8S|lr+Kg8>%G?Kuzxf;L!gZoxAqhd;`!i$5wZfphJ-c zd|uR@Q=cF4N1HXz1y}KjQJ8{7#aqNM_|j!oz6@&wEfq)8)wG4ngiGocMk=1Ft54#R zLyJe(u>P{fm>k_wUn20W9BZ#%fN9ZePCU*5DGK$uQ{GP3{oE1Qd^}1uSrdHw<-AM% znk>YZOU^R94BahzlbdB994?8{%lZ*NSZ4J+IKP3;K9;B))u#S>TRHMqa-y}{@z#V5wvOmV6zw~pafq=5ncOsU z`b-zkO|3C@lwd3SiQZeinzVP4uu+V>2-LKKA)WQXBXPb#G9E8UQ%5@sBgZtYwKzkq zNI6FloMR!lx7fV|WjJ*b`&y_UK9mPl*` z;XO8P%7{H*K=GrNF#+K3At?5`_oXT|Vz!Rh_05t2S&yd`A2 zjcyVJB|#czi?o<&biP<}0alxnpPLzJ9d#_R9(c$2IPXg7=4mL{7WoN>JTCCZ%zV{) zm691r%m?d5yR3l=Qxn7|f0?e7@ zk^9ia@dNTbyi6%GO;kec5sHCjtyr*i1QSY;G}gTsivUQRTG(i)y`O_~K{I*S+x=>M z;}<><>$k8!-=R}>b#)kmSE&~qf+xi@lJazu^F@~pV>MQ3ISq0)qH;F^;_yT@vc-Pr z390Cb$Zq{edB^7W@Mz_+gQ$>@*@>hJIjn4*`B@N%Lt_t1J1wT!aN`jpEBE5;Z|_X| zT^67k%@CVrtYeC}n;uLV%ZSClL-hu4Q5t8ke5a8BZ`=p#4yh?Xa^Q~OrJm_6aD?yj z!Od*^0L5!;q95XIh28eUbyJRpma5tq`0ds9GcX^qcBuCk#1-M-PcC@xgaV`dTbrNS$rEmz&;`STTF>1pK8< z7ykUcQ^6tZ?Yk3DVGovmRU?@pWL#e2L7cLSeBrZc$+IyWiBmoex!W#F#PlFAMT00niUZfkGz z0o{&eGEc{wC^aE3-eC$<2|Ini!y;&5zPE>9MO-I7kOD#cLp<3a%Juu2?88km=iL=? zg)Nm=ku7YEsu57C#BvklPYQ>o_{4C>a9C*0Px#k2ZkQ)j3FI#lIW3mT#f*2!gL4$_ zZDI76!tIw5o=j7Opkr~D0loH62&g?CHDg;Lp^HZ;W7)N+=s>^NuhmsYC?}lxS;sOE z69`R?BLA*%2m_L7BSZ^X5BKaWF-Y?b-HqGLcTd9NU7vY8k|j{O`cOrwxB2WW@tmhU zt`FA4?YCJwFISu42CLh~%e8Qg093rgqDa!ASGd!qoQ1e+yhXD=@Q7u0*^ddk+;D{) zKG0?!-U>8p8=*&(bw!x;E{EjWUUQyY3zVB2V}@t$lg*Bn3FId6V_Ez&aJ%8kzKZg$ zVwL+>zsp;_`X|m4RRvc|Wtejy* z?bG~}+B%y$b6zBRba$P?mX#UbwE{i{@jbuL@tZ6Rn;SCu#2M*$dpQIn$Hqv`MgjBn zURSnq5+1ReLXsI#*A8G1&h5`YFo^I17Y=&&1eQDtwY8HI3#DdGWslPJSP1` z1D()O()qzD6U~BYRUPw6gfc4Wx!am$yM#i~5MCmF8=7(q7;n3?L@7uuvn$;8B8wk8 z3>T-EJ5X9Z3@yH;L=9QFtWmzdE_;Kw^v+te+u`pF zN4&*o>iRKeC&l_{U^a`eymoog3(GY&2h;5vMyRyld37+7bW+&7tvIfrL9TpA@{Z

dy!05UMhSKsK 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 VCNKd3JGtOvEm(5t0lFyE{{i--k}m)N literal 50710 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 EfAhh=DF6Tf diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 642d572c..6686a643 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,18 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 +# +# https://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. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.0/apache-maven-3.9.0-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/mvnw b/mvnw index 41c0f0c2..b7f06462 100755 --- a/mvnw +++ b/mvnw @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven Start Up Batch script +# Apache Maven Wrapper startup batch script, version 3.1.1 # # Required ENV vars: # ------------------ @@ -27,7 +27,6 @@ # # Optional ENV vars # ----------------- -# M2_HOME - location of maven2's installed home dir # MAVEN_OPTS - parameters passed to the Java VM when running Maven # e.g. to debug Maven itself, use # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @@ -36,6 +35,10 @@ if [ -z "$MAVEN_SKIP_RC" ] ; then + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + if [ -f /etc/mavenrc ] ; then . /etc/mavenrc fi @@ -58,9 +61,9 @@ case "`uname`" in # See https://developer.apple.com/library/mac/qa/qa1170/_index.html if [ -z "$JAVA_HOME" ]; then if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" + JAVA_HOME="`/usr/libexec/java_home`"; export JAVA_HOME else - export JAVA_HOME="/Library/Java/Home" + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME fi fi ;; @@ -72,36 +75,8 @@ if [ -z "$JAVA_HOME" ] ; then fi fi -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` [ -n "$CLASSPATH" ] && @@ -110,8 +85,6 @@ fi # For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" [ -n "$JAVA_HOME" ] && JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" fi @@ -145,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`which java`" + JAVACMD="`\\unset -f command; \\command -v java`" fi fi @@ -159,12 +132,9 @@ if [ -z "$JAVA_HOME" ] ; then echo "Warning: JAVA_HOME environment variable is not set." fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - if [ -z "$1" ] then echo "Path not specified to find_maven_basedir" @@ -184,7 +154,7 @@ find_maven_basedir() { fi # end of workaround done - echo "${basedir}" + printf '%s' "$(cd "$basedir"; pwd)" } # concatenates all lines of a file @@ -194,11 +164,16 @@ concat_lines() { fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +BASE_DIR=$(find_maven_basedir "$(dirname $0)") if [ -z "$BASE_DIR" ]; then exit 1; fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. @@ -212,16 +187,16 @@ else echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." fi if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" fi while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;; esac done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" + echo "Downloading from: $wrapperUrl" fi wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" if $cygwin; then @@ -229,42 +204,49 @@ else fi if command -v wget > /dev/null; then + QUIET="--quiet" if [ "$MVNW_VERBOSE" = true ]; then echo "Found wget ... using wget" + QUIET="" fi if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" fi + [ $? -eq 0 ] || rm -f "$wrapperJarPath" elif command -v curl > /dev/null; then + QUIET="--silent" if [ "$MVNW_VERBOSE" = true ]; then echo "Found curl ... using curl" + QUIET="" fi if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L fi - + [ $? -eq 0 ] || rm -f "$wrapperJarPath" else if [ "$MVNW_VERBOSE" = true ]; then echo "Falling back to using Java to download" fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaSource="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" # For Cygwin, switch paths to Windows format before running javac if $cygwin; then + javaSource=`cygpath --path --windows "$javaSource"` javaClass=`cygpath --path --windows "$javaClass"` fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then if [ "$MVNW_VERBOSE" = true ]; then echo " - Compiling MavenWrapperDownloader.java ..." fi # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") + ("$JAVA_HOME/bin/javac" "$javaSource") fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ -e "$javaClass" ]; then # Running the downloader if [ "$MVNW_VERBOSE" = true ]; then echo " - Running MavenWrapperDownloader.java ..." @@ -278,16 +260,10 @@ fi # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` [ -n "$CLASSPATH" ] && @@ -305,6 +281,7 @@ WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd index 86115719..cba1f040 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -1,182 +1,187 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.1.1 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% From 1163f479b1b7d067b72840b818148f6e4f5d710c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:21:28 -0800 Subject: [PATCH 005/136] Upgrade Maven Plugins Closes gh-356 --- pom.xml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index 257f1b5f..757f850d 100644 --- a/pom.xml +++ b/pom.xml @@ -75,17 +75,17 @@ com.googlecode.maven-download-plugin download-maven-plugin - 1.6.0 + 1.6.8 org.apache.maven.plugins maven-antrun-plugin - 1.8 + 3.1.0 org.apache.maven.plugins maven-checkstyle-plugin - 3.1.1 + 3.2.1 com.puppycrawl.tools @@ -97,22 +97,22 @@ org.apache.maven.plugins maven-clean-plugin - 3.1.0 + 3.2.0 org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + 3.10.1 org.apache.maven.plugins maven-deploy-plugin - 2.8.2 + 3.0.0 org.apache.maven.plugins maven-dependency-plugin - 3.1.2 + 3.5.0 org.apache.maven.plugins @@ -130,32 +130,32 @@ org.apache.maven.plugins maven-install-plugin - 2.5.2 + 3.1.0 org.apache.maven.plugins maven-invoker-plugin - 3.2.1 + 3.4.0 org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 org.apache.maven.plugins maven-plugin-plugin - 3.6.0 + 3.7.1 org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 org.apache.maven.plugins maven-site-plugin - 3.9.1 + 3.12.1 org.apache.maven.plugins @@ -179,7 +179,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.4.1 8 -Xdoclint:none @@ -188,22 +188,22 @@ org.apache.maven.plugins maven-resources-plugin - 3.2.0 + 3.3.0 org.codehaus.mojo versions-maven-plugin - 2.8.1 + 2.14.2 org.codehaus.mojo exec-maven-plugin - 3.0.0 + 3.1.0 org.codehaus.mojo build-helper-maven-plugin - 3.2.0 + 3.3.0 org.eclipse.tycho From d2c06bfda23eb3a33d586a9aecbd6d8e737b154e Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:21:58 -0800 Subject: [PATCH 006/136] Upgrade to Proguard 9.0.7 Closes gh-357 --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 757f850d..67ef59fd 100644 --- a/pom.xml +++ b/pom.xml @@ -62,12 +62,12 @@ com.github.wvengen proguard-maven-plugin - 2.3.1 + 2.6.0 com.guardsquare - proguard-base - 7.0.0 + proguard-core + 9.0.7 runtime From 6f1aacbd742639ab543cb1cd7f30396bc91a3aaa Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 10:11:03 -0800 Subject: [PATCH 007/136] Upgrade to Gradle 7.6 Closes gh-353 --- .../spring-javaformat-gradle-plugin/build.gradle | 6 +++--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../spring-javaformat-gradle-plugin/gradlew | 2 +- .../spring-javaformat-gradle-plugin/gradlew.bat | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle index 706161d8..1a94c0a2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle @@ -8,9 +8,9 @@ repositories { } dependencies { - compile fileTree(dir: 'target/dependencies/compile', include: '*.jar') - testCompile gradleTestKit() - testCompile fileTree(dir: 'target/dependencies/test', include: '*.jar') + implementation fileTree(dir: 'target/dependencies/compile', include: '*.jar') + testImplementation gradleTestKit() + testImplementation fileTree(dir: 'target/dependencies/test', include: '*.jar') } jar { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties index 4d9ca164..070cb702 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew index 9fcbaf9c..4f906e0c 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew @@ -1,7 +1,7 @@ #!/usr/bin/env sh # -# Copyright 2015-2020 the original author or authors. +# Copyright 2015 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat index 534325e8..ac1b06f9 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat @@ -1,5 +1,5 @@ @rem -@rem Copyright 2015-2020 the original author or authors. +@rem Copyright 2015 the original author or authors. @rem @rem Licensed under the Apache License, Version 2.0 (the "License"); @rem you may not use this file except in compliance with the License. From 814f1132f1ec3e328680f1666e7fa8e38a8b0b8f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:23:55 -0800 Subject: [PATCH 008/136] Upgrade to Tycho 3.0.1 Closes gh-358 --- .gitignore | 2 ++ pom.xml | 8 ++++---- .../io.spring.javaformat.eclipse.site/pom.xml | 1 - 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 3b33c61c..ab75a6c8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ target *.ipr *.iws spring-javaformat-eclipse/io.spring.javaformat.eclipse/lib +spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/lib +spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/lib spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/lib .gradle spring-javaformat-gradle/spring-javaformat-gradle-plugin/bin diff --git a/pom.xml b/pom.xml index 67ef59fd..1e1c3c83 100644 --- a/pom.xml +++ b/pom.xml @@ -53,8 +53,8 @@ 1.16.0 1.16.0 3.0.3 - 2.5.0 - 2.5.0 + 3.0.1 + 3.0.1 @@ -230,9 +230,9 @@ ${tycho.version} - org.eclipse.tycho.extras + org.eclipse.tycho tycho-buildtimestamp-jgit - ${tycho-extras.version} + ${tycho.version} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 92bff157..91180586 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -22,7 +22,6 @@ tycho-packaging-plugin ${project.artifactId} - true From 8d2e54c684984e2553828f9df32b32caf2771a44 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:20:43 -0800 Subject: [PATCH 009/136] Upgrade build to use Java 17 Closes gh-354 --- .sdkmanrc | 2 +- ci/images/get-jdk-url.sh | 17 ----------------- ci/images/setup.sh | 2 +- 3 files changed, 2 insertions(+), 19 deletions(-) delete mode 100755 ci/images/get-jdk-url.sh diff --git a/.sdkmanrc b/.sdkmanrc index 42d4e368..14fdc133 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=11.0.16.1-librca +java=17.0.6-librca diff --git a/ci/images/get-jdk-url.sh b/ci/images/get-jdk-url.sh deleted file mode 100755 index c539e19d..00000000 --- a/ci/images/get-jdk-url.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -e - -case "$1" in - java8) - echo "https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz" - ;; - java11) - echo "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz" - ;; - java16) - echo "https://github.com/AdoptOpenJDK/openjdk16-binaries/releases/download/jdk-16%2B36/OpenJDK16-jdk_x64_linux_hotspot_16_36.tar.gz" - ;; - *) - echo $"Unknown java version" - exit 1 -esac diff --git a/ci/images/setup.sh b/ci/images/setup.sh index 52574521..31f56577 100755 --- a/ci/images/setup.sh +++ b/ci/images/setup.sh @@ -16,7 +16,7 @@ curl --output /opt/concourse-release-scripts.jar https://repo.spring.io/release/ ########################################################### # JAVA ########################################################### -JDK_URL=$( ./get-jdk-url.sh java11 ) +JDK_URL=https://github.com/bell-sw/Liberica/releases/download/17.0.6+10/bellsoft-jdk17.0.6+10-linux-amd64.tar.gz mkdir -p /opt/openjdk cd /opt/openjdk From ac00093470c22f171594ba9fdee3d15e132d3f2d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:25:20 -0800 Subject: [PATCH 010/136] Upgrade to Eclipse 2022-12 Closes gh-352 --- pom.xml | 6 +++--- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 8 +++++--- .../io.spring.javaformat.eclipse.tests/build.properties | 3 ++- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 1 - .../io.spring.javaformat.eclipse/pom.xml | 1 + .../eclipse/m2e/MavenProjectSettingsConfigurator.java | 4 ++-- spring-javaformat-eclipse/pom.xml | 6 +++--- 10 files changed, 19 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 1e1c3c83..877c2775 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-06/202206151000/ + https://download.eclipse.org/releases/2022-12/202212071000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 @@ -612,7 +612,7 @@ - -Xmx512m -XX:MaxPermSize=256m -XstartOnFirstThread + -Xmx512m -XstartOnFirstThread @@ -624,7 +624,7 @@ - -Xmx512m -XX:MaxPermSize=256m + -Xmx512m diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 1615bba7..999de9e4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -13,6 +13,6 @@ Spring JavaFormat Eclipse Plugin Feature ${basedir}/../.. - 11 + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 91180586..8c6f5258 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -13,7 +13,7 @@ Spring JavaFormat Eclipse Plugin Site ${basedir}/../.. - 11 + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index a58dbd73..b3a9b579 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -1,16 +1,18 @@ Manifest-Version: 1.0 Fragment-Host: io.spring.javaformat.eclipse +Import-Package: org.junit, + org.junit.jupiter.api, + org.junit.jupiter.api.io Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests Bundle-Version: 0.0.36.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 -Require-Bundle: org.junit, - org.junit.jupiter.api Bundle-ClassPath: ., lib/assertj-core.jar, lib/byte-buddy-agent.jar, lib/byte-buddy.jar, lib/mockito-core.jar, - lib/objenesis.jar + lib/objenesis.jar, + lib/junit-jupiter-api.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties index f084befe..b62f58dd 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/build.properties @@ -6,4 +6,5 @@ bin.includes = META-INF/,\ lib/byte-buddy-agent.jar,\ lib/byte-buddy.jar,\ lib/mockito-core.jar,\ - lib/objenesis.jar + lib/objenesis.jar,\ + lib/junit-jupiter-api.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 194fa5e8..9f94ca47 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -13,7 +13,7 @@ Spring JavaFormat Eclipse Test ${basedir}/../.. - 11 + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 564a1fc2..e7c5b534 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -10,7 +10,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources, org.eclipse.core.runtime, org.eclipse.ui.ide, - org.slf4j.api;bundle-version="1.7.0", org.eclipse.jdt.core, org.eclipse.jface.text, org.eclipse.m2e.jdt;resolution:=optional, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 6785b635..e7c31f42 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -13,6 +13,7 @@ Spring JavaFormat Eclipse Plugin ${basedir}/../.. + 17 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java index 5cc7aacd..030a873f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java @@ -43,13 +43,13 @@ public void configure(ProjectConfigurationRequest request, IProgressMonitor moni new Executor(Messages.springFormatSettingsImportError).run(() -> { List searchFolders = getSearchFolders(request); ProjectSettingsFiles settingsFiles = new ProjectSettingsFilesLocator(searchFolders).locateSettingsFiles(); - settingsFiles.applyToProject(request.getProject(), monitor); + settingsFiles.applyToProject(request.mavenProjectFacade().getProject(), monitor); }); } private List getSearchFolders(ProjectConfigurationRequest request) { List files = new ArrayList<>(); - MavenProject project = request.getMavenProject(); + MavenProject project = request.mavenProject(); while (project != null && project.getBasedir() != null) { files.add(project.getBasedir()); project = project.getParent(); diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 8d391e4a..24fe7ecd 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -13,13 +13,13 @@ Spring JavaFormat Eclipse Parent ${basedir}/.. - 11 + 17 - eclipse-jdk8 + eclipse-jdk11 p2 - ${eclipse.jdk8.repository} + ${eclipse.jdk11.repository} eclipse-checkstyle From 01fd33eaa1a3c1f7bfcde9bdadfee2e17ad958d9 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:37:15 -0800 Subject: [PATCH 011/136] Update CI pipeline --- ci/pipeline.yml | 7 +------ ci/tasks/build-ci-image.yml | 5 ++++- ci/tasks/generate-changelog.yml | 4 +++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index a870f942..467f75b3 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -41,7 +41,7 @@ resource_types: type: registry-image source: repository: springio/artifactory-resource - tag: "0.0.17" + tag: "0.0.18" - name: pull-request type: registry-image source: @@ -51,11 +51,6 @@ resource_types: source: repository: cfcommunity/slack-notification-resource tag: latest -- name: github-release - type: registry-image - source: - repository: concourse/github-release-resource - tag: 1.7.0 resources: - name: git-repo type: git diff --git a/ci/tasks/build-ci-image.yml b/ci/tasks/build-ci-image.yml index 18f97c02..6f4de778 100644 --- a/ci/tasks/build-ci-image.yml +++ b/ci/tasks/build-ci-image.yml @@ -3,7 +3,10 @@ platform: linux image_resource: type: registry-image source: - repository: vito/oci-build-task + repository: concourse/oci-build-task + tag: 0.10.0 + username: ((docker-hub-username)) + password: ((docker-hub-password)) inputs: - name: ci-images-git-repo outputs: diff --git a/ci/tasks/generate-changelog.yml b/ci/tasks/generate-changelog.yml index 59a43eae..e784e19f 100644 --- a/ci/tasks/generate-changelog.yml +++ b/ci/tasks/generate-changelog.yml @@ -4,7 +4,9 @@ image_resource: type: registry-image source: repository: springio/github-changelog-generator - tag: '0.0.7' + tag: '0.0.8' + username: ((docker-hub-username)) + password: ((docker-hub-password)) inputs: - name: git-repo - name: artifactory-repo From 458bd3b56c720f8a350b29aa9f5de5d9c5904d48 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:41:26 -0800 Subject: [PATCH 012/136] Update CI pipeline --- ci/images/ci-image/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/images/ci-image/Dockerfile b/ci/images/ci-image/Dockerfile index 0fa33ae7..fbdbb4c0 100644 --- a/ci/images/ci-image/Dockerfile +++ b/ci/images/ci-image/Dockerfile @@ -1,7 +1,6 @@ FROM ubuntu:focal-20210401 ADD setup.sh /setup.sh -ADD get-jdk-url.sh /get-jdk-url.sh ADD get-docker-url.sh /get-docker-url.sh RUN ./setup.sh From 4fdd565dffe298f24b45235cb2cb5774dc89ee84 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 14:49:37 -0800 Subject: [PATCH 013/136] Update CI pipeline --- ci/pipeline.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 467f75b3..d4708570 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -42,15 +42,20 @@ resource_types: source: repository: springio/artifactory-resource tag: "0.0.18" + username: ((docker-hub-username)) + password: ((docker-hub-password)) - name: pull-request type: registry-image source: repository: teliaoss/github-pr-resource + username: ((docker-hub-username)) + password: ((docker-hub-password)) - name: slack-notification type: registry-image source: repository: cfcommunity/slack-notification-resource - tag: latest + username: ((docker-hub-username)) + password: ((docker-hub-password)) resources: - name: git-repo type: git From 4c9bb12d98a7435829e61feee380eab560244d49 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 6 Feb 2023 19:51:50 -0800 Subject: [PATCH 014/136] Change "qualified Invocations" wrapping option Improve fluent API formatting by tweaking the "qualified Invocations" wrapping option. This commit also changes the fix for gh-332 by porting `align_selector_in_method_invocation_on_expression_first_line` to the Java 8 formatter. Closes gh-124 --- .eclipse/org.eclipse.jdt.core.prefs | 4 +- .../formatter/linewrap/WrapPreparator.java | 1687 +++++++++++++++++ .../eclipse/rewrite/EclipseRewriter.java | 8 +- .../javaformat/formatter/FormatterTests.java | 4 +- .../src/test/resources/expected/complex.txt | 6 +- .../multi-line-statement-indentation.txt | 5 +- .../formatter/eclipse/formatter.prefs | 4 +- src/checkstyle/checkstyle-suppressions.xml | 1 + 8 files changed, 1706 insertions(+), 13 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java diff --git a/.eclipse/org.eclipse.jdt.core.prefs b/.eclipse/org.eclipse.jdt.core.prefs index 1d379438..cc3e405e 100644 --- a/.eclipse/org.eclipse.jdt.core.prefs +++ b/.eclipse/org.eclipse.jdt.core.prefs @@ -127,7 +127,7 @@ org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=84 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 @@ -136,7 +136,7 @@ org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false +org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.blank_lines_before_field=0 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java new file mode 100644 index 00000000..5ddaf1ca --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java @@ -0,0 +1,1687 @@ +/******************************************************************************* + * Copyright (c) 2014, 2020 Mateusz Matela and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Mateusz Matela - [formatter] Formatter does not format Java code correctly, especially when max line width is set - https://bugs.eclipse.org/303519 + * Mateusz Matela - [formatter] follow up bug for comments - https://bugs.eclipse.org/458208 + *******************************************************************************/ +package org.eclipse.jdt.internal.formatter.linewrap; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import java.util.function.ToIntFunction; + +import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.Annotation; +import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; +import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration; +import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; +import org.eclipse.jdt.core.dom.ArrayInitializer; +import org.eclipse.jdt.core.dom.AssertStatement; +import org.eclipse.jdt.core.dom.Assignment; +import org.eclipse.jdt.core.dom.Block; +import org.eclipse.jdt.core.dom.CatchClause; +import org.eclipse.jdt.core.dom.ClassInstanceCreation; +import org.eclipse.jdt.core.dom.ConditionalExpression; +import org.eclipse.jdt.core.dom.ConstructorInvocation; +import org.eclipse.jdt.core.dom.CreationReference; +import org.eclipse.jdt.core.dom.DoStatement; +import org.eclipse.jdt.core.dom.EnhancedForStatement; +import org.eclipse.jdt.core.dom.EnumConstantDeclaration; +import org.eclipse.jdt.core.dom.EnumDeclaration; +import org.eclipse.jdt.core.dom.ExportsDirective; +import org.eclipse.jdt.core.dom.Expression; +import org.eclipse.jdt.core.dom.ExpressionMethodReference; +import org.eclipse.jdt.core.dom.FieldAccess; +import org.eclipse.jdt.core.dom.FieldDeclaration; +import org.eclipse.jdt.core.dom.ForStatement; +import org.eclipse.jdt.core.dom.IExtendedModifier; +import org.eclipse.jdt.core.dom.IfStatement; +import org.eclipse.jdt.core.dom.InfixExpression; +import org.eclipse.jdt.core.dom.InfixExpression.Operator; +import org.eclipse.jdt.core.dom.LambdaExpression; +import org.eclipse.jdt.core.dom.MemberValuePair; +import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.MethodInvocation; +import org.eclipse.jdt.core.dom.Name; +import org.eclipse.jdt.core.dom.NormalAnnotation; +import org.eclipse.jdt.core.dom.OpensDirective; +import org.eclipse.jdt.core.dom.PackageDeclaration; +import org.eclipse.jdt.core.dom.ParameterizedType; +import org.eclipse.jdt.core.dom.ProvidesDirective; +import org.eclipse.jdt.core.dom.QualifiedName; +import org.eclipse.jdt.core.dom.RecordDeclaration; +import org.eclipse.jdt.core.dom.SingleMemberAnnotation; +import org.eclipse.jdt.core.dom.SingleVariableDeclaration; +import org.eclipse.jdt.core.dom.Statement; +import org.eclipse.jdt.core.dom.SuperConstructorInvocation; +import org.eclipse.jdt.core.dom.SuperFieldAccess; +import org.eclipse.jdt.core.dom.SuperMethodInvocation; +import org.eclipse.jdt.core.dom.SuperMethodReference; +import org.eclipse.jdt.core.dom.SwitchExpression; +import org.eclipse.jdt.core.dom.SwitchStatement; +import org.eclipse.jdt.core.dom.ThisExpression; +import org.eclipse.jdt.core.dom.TryStatement; +import org.eclipse.jdt.core.dom.Type; +import org.eclipse.jdt.core.dom.TypeDeclaration; +import org.eclipse.jdt.core.dom.TypeMethodReference; +import org.eclipse.jdt.core.dom.TypeParameter; +import org.eclipse.jdt.core.dom.UnionType; +import org.eclipse.jdt.core.dom.VariableDeclaration; +import org.eclipse.jdt.core.dom.VariableDeclarationExpression; +import org.eclipse.jdt.core.dom.VariableDeclarationFragment; +import org.eclipse.jdt.core.dom.VariableDeclarationStatement; +import org.eclipse.jdt.core.dom.WhileStatement; +import org.eclipse.jdt.core.formatter.CodeFormatter; +import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; +import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions; +import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions.Alignment; +import org.eclipse.jdt.internal.formatter.Token; +import org.eclipse.jdt.internal.formatter.Token.WrapMode; +import org.eclipse.jdt.internal.formatter.Token.WrapPolicy; +import org.eclipse.jdt.internal.formatter.TokenManager; +import org.eclipse.jdt.internal.formatter.TokenTraverser; +import org.eclipse.jface.text.IRegion; + +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOLON; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMA; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMENT_BLOCK; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMENT_JAVADOC; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameCOMMENT_LINE; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameDOT; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameEQUAL; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameIdentifier; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameLBRACE; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameLESS; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameLPAREN; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameOR; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameQUESTION; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameRBRACE; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameRPAREN; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameSEMICOLON; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameStringLiteral; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameenum; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameextends; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameimplements; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamenew; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamesuper; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamethis; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamethrows; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNameto; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamewhile; +import static org.eclipse.jdt.internal.compiler.parser.TerminalTokens.TokenNamewith; + +public class WrapPreparator extends ASTVisitor { + + // @formatter:off + + /** + * Helper for common handling of all expressions that should be treated the same as + * {@link FieldAccess} + */ + private static class FieldAccessAdapter { + final Expression accessExpression; + + public FieldAccessAdapter(Expression expression) { + this.accessExpression = expression; + } + + public static boolean isFieldAccess(ASTNode expr) { + return expr instanceof FieldAccess || expr instanceof QualifiedName || expr instanceof ThisExpression + || expr instanceof SuperFieldAccess; + } + + public Expression getExpression() { + if (this.accessExpression instanceof FieldAccess) { + return ((FieldAccess) this.accessExpression).getExpression(); + } + if (this.accessExpression instanceof QualifiedName) { + return ((QualifiedName) this.accessExpression).getQualifier(); + } + if (this.accessExpression instanceof ThisExpression) { + return ((ThisExpression) this.accessExpression).getQualifier(); + } + if (this.accessExpression instanceof SuperFieldAccess) { + return ((SuperFieldAccess) this.accessExpression).getQualifier(); + } + throw new AssertionError(); + } + + public int getIdentifierIndex(TokenManager tm) { + if (this.accessExpression instanceof FieldAccess) { + return tm.firstIndexIn(((FieldAccess) this.accessExpression).getName(), TokenNameIdentifier); + } + if (this.accessExpression instanceof QualifiedName) { + return tm.firstIndexIn(((QualifiedName) this.accessExpression).getName(), TokenNameIdentifier); + } + if (this.accessExpression instanceof ThisExpression) { + return tm.lastIndexIn(this.accessExpression, TokenNamethis); + } + if (this.accessExpression instanceof SuperFieldAccess) { + return tm.lastIndexIn(this.accessExpression, TokenNamesuper); + } + throw new AssertionError(); + } + } + + private static final Map OPERATOR_PRECEDENCE; + private static final Map> OPERATOR_WRAPPING_OPTION; + private static final Map> OPERATOR_WRAP_BEFORE_OPTION; + static { + HashMap precedence = new HashMap<>(); + HashMap> wrappingOption = new HashMap<>(); + HashMap> wrapBeforeOption = new HashMap<>(); + for (Operator op : Arrays.asList(Operator.TIMES, Operator.DIVIDE, Operator.REMAINDER)) { + precedence.put(op, 1); + wrappingOption.put(op, o -> o.alignment_for_multiplicative_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_multiplicative_operator); + } + for (Operator op : Arrays.asList(Operator.PLUS, Operator.MINUS)) { + precedence.put(op, 2); + wrappingOption.put(op, o -> o.alignment_for_additive_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_additive_operator); + } + for (Operator op : Arrays.asList(Operator.LEFT_SHIFT, Operator.RIGHT_SHIFT_SIGNED, + Operator.RIGHT_SHIFT_UNSIGNED)) { + precedence.put(op, 3); + wrappingOption.put(op, o -> o.alignment_for_shift_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_shift_operator); + } + for (Operator op : Arrays.asList(Operator.LESS, Operator.GREATER, Operator.LESS_EQUALS, + Operator.GREATER_EQUALS)) { + precedence.put(op, 4); + wrappingOption.put(op, o -> o.alignment_for_relational_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_relational_operator); + } + for (Operator op : Arrays.asList(Operator.EQUALS, Operator.NOT_EQUALS)) { + precedence.put(op, 5); + wrappingOption.put(op, o -> o.alignment_for_relational_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_relational_operator); + } + + precedence.put(Operator.AND, 6); + precedence.put(Operator.XOR, 7); + precedence.put(Operator.OR, 8); + for (Operator op : Arrays.asList(Operator.AND, Operator.XOR, Operator.OR)) { + wrappingOption.put(op, o -> o.alignment_for_bitwise_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_bitwise_operator); + } + + precedence.put(Operator.CONDITIONAL_AND, 9); + precedence.put(Operator.CONDITIONAL_OR, 10); + for (Operator op : Arrays.asList(Operator.CONDITIONAL_AND, Operator.CONDITIONAL_OR)) { + wrappingOption.put(op, o -> o.alignment_for_logical_operator); + wrapBeforeOption.put(op, o -> o.wrap_before_logical_operator); + } + // ternary and assignment operators not relevant to infix expressions + + OPERATOR_PRECEDENCE = Collections.unmodifiableMap(precedence); + OPERATOR_WRAPPING_OPTION = Collections.unmodifiableMap(wrappingOption); + OPERATOR_WRAP_BEFORE_OPTION = Collections.unmodifiableMap(wrapBeforeOption); + } + + /** Penalty multiplier for wraps that are preferred */ + private final static float PREFERRED = 7f / 8; + + final TokenManager tm; + final DefaultCodeFormatterOptions options; + final int kind; + + final Aligner aligner; + + /* + * temporary values used when calling {@link #handleWrap(int)} to avoid ArrayList + * initialization and long lists of parameters + */ + private List wrapIndexes = new ArrayList<>(); + /** + * Indexes for wraps that shouldn't happen but should be indented if cannot be removed + */ + private List secondaryWrapIndexes = new ArrayList<>(); + private List wrapPenalties = new ArrayList<>(); + private int wrapParentIndex = -1; + private int wrapGroupEnd = -1; + + private int currentDepth = 0; + + public WrapPreparator(TokenManager tokenManager, DefaultCodeFormatterOptions options, int kind) { + this.tm = tokenManager; + this.options = options; + this.kind = kind; + + this.aligner = new Aligner(this.tm, this.options); + } + + @Override + public boolean preVisit2(ASTNode node) { + this.currentDepth++; + + assert this.wrapIndexes.isEmpty() && this.secondaryWrapIndexes.isEmpty() && this.wrapPenalties.isEmpty(); + assert this.wrapParentIndex == -1 && this.wrapGroupEnd == -1; + + boolean isMalformed = (node.getFlags() & ASTNode.MALFORMED) != 0; + if (isMalformed) { + this.tm.addDisableFormatTokenPair(this.tm.firstTokenIn(node, -1), this.tm.lastTokenIn(node, -1)); + } + return !isMalformed; + } + + @Override + public void postVisit(ASTNode node) { + this.currentDepth--; + } + + @Override + public boolean visit(PackageDeclaration node) { + handleAnnotations(node.annotations(), this.options.alignment_for_annotations_on_package); + return true; + } + + @Override + public boolean visit(NormalAnnotation node) { + int lParen = this.tm.firstIndexAfter(node.getTypeName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_annotation); + + handleArguments(node.values(), this.options.alignment_for_arguments_in_annotation); + return true; + } + + @Override + public boolean visit(SingleMemberAnnotation node) { + int lParen = this.tm.firstIndexAfter(node.getTypeName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_annotation); + return true; + } + + @Override + public boolean visit(TypeDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + + Type superclassType = node.getSuperclassType(); + if (superclassType != null) { + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(superclassType, -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superclassType, TokenNameextends)); + this.wrapIndexes.add(this.tm.firstIndexIn(superclassType, -1)); + handleWrap(this.options.alignment_for_superclass_in_type_declaration, PREFERRED); + } + + List superInterfaceTypes = node.superInterfaceTypes(); + if (!superInterfaceTypes.isEmpty()) { + int implementsToken = node.isInterface() ? TokenNameextends : TokenNameimplements; + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superInterfaceTypes.get(0), implementsToken)); + prepareElementsList(superInterfaceTypes, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_superinterfaces_in_type_declaration, PREFERRED); + } + + prepareElementsList(node.typeParameters(), TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_type_parameters); + + this.aligner.handleAlign(node.bodyDeclarations()); + + return true; + } + + @Override + public boolean visit(AnnotationTypeDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + this.aligner.handleAlign(node.bodyDeclarations()); + return true; + } + + @Override + public boolean visit(AnnotationTypeMemberDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_method); + return true; + } + + @Override + public boolean visit(AnonymousClassDeclaration node) { + this.aligner.handleAlign(node.bodyDeclarations()); + return true; + } + + @Override + public boolean visit(RecordDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + List components = node.recordComponents(); + int rParen = this.tm.firstIndexAfter( + components.isEmpty() ? node.getName() : components.get(components.size() - 1), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_record_declaration); + + if (!components.isEmpty()) { + int wrappingOption = this.options.alignment_for_record_components; + this.wrapGroupEnd = this.tm.lastIndexIn(components.get(components.size() - 1), -1); + handleArguments(components, wrappingOption); + } + + List superInterfaceTypes = node.superInterfaceTypes(); + if (!superInterfaceTypes.isEmpty()) { + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superInterfaceTypes.get(0), TokenNameimplements)); + prepareElementsList(superInterfaceTypes, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_superinterfaces_in_record_declaration, PREFERRED); + } + return true; + } + + @Override + public boolean visit(MethodDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_method); + + if (!node.isCompactConstructor()) { + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + int rParen = node.getBody() == null ? this.tm.lastIndexIn(node, TokenNameRPAREN) + : this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_declaration); + } + + List parameters = node.parameters(); + Type receiverType = node.getReceiverType(); + if (!parameters.isEmpty() || receiverType != null) { + if (receiverType != null) { + this.wrapIndexes.add(this.tm.firstIndexIn(receiverType, -1)); + } + int wrappingOption = node.isConstructor() ? this.options.alignment_for_parameters_in_constructor_declaration + : this.options.alignment_for_parameters_in_method_declaration; + this.wrapGroupEnd = this.tm + .lastIndexIn(parameters.isEmpty() ? receiverType : parameters.get(parameters.size() - 1), -1); + handleArguments(parameters, wrappingOption); + } + + List exceptionTypes = node.thrownExceptionTypes(); + if (!exceptionTypes.isEmpty()) { + int wrappingOption = node.isConstructor() + ? this.options.alignment_for_throws_clause_in_constructor_declaration + : this.options.alignment_for_throws_clause_in_method_declaration; + if ((wrappingOption & Alignment.M_INDENT_ON_COLUMN) == 0) { + this.wrapParentIndex = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + } + prepareElementsList(exceptionTypes, TokenNameCOMMA, TokenNameRPAREN); + // instead of the first exception type, wrap the "throws" token + this.wrapIndexes.set(0, this.tm.firstIndexBefore(exceptionTypes.get(0), TokenNamethrows)); + handleWrap(wrappingOption, 0.5f); + } + + if (!node.isConstructor()) { + this.wrapParentIndex = this.tm.findFirstTokenInLine(this.tm.firstIndexIn(node.getName(), -1)); + while (this.tm.get(this.wrapParentIndex).isComment()) { + this.wrapParentIndex++; + } + List typeParameters = node.typeParameters(); + if (!typeParameters.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(typeParameters.get(0), -1)); + } + if (node.getReturnType2() != null) { + int returTypeIndex = this.tm.firstIndexIn(node.getReturnType2(), -1); + if (returTypeIndex != this.wrapParentIndex) { + this.wrapIndexes.add(returTypeIndex); + } + } + this.wrapIndexes.add(this.tm.firstIndexIn(node.getName(), -1)); + this.wrapGroupEnd = this.tm.lastIndexIn(node.getName(), -1); + handleWrap(this.options.alignment_for_method_declaration); + } + + prepareElementsList(node.typeParameters(), TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_type_parameters); + + return true; + } + + @Override + public boolean visit(EnumDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_type); + + List enumConstants = node.enumConstants(); + int constantsEnd = -1; + if (!enumConstants.isEmpty()) { + for (EnumConstantDeclaration constant : enumConstants) { + this.wrapIndexes.add(this.tm.firstIndexIn(constant, -1)); + } + this.wrapParentIndex = (this.options.alignment_for_enum_constants & Alignment.M_INDENT_ON_COLUMN) > 0 + ? this.tm.firstIndexBefore(enumConstants.get(0), TokenNameLBRACE) + : this.tm.firstIndexIn(node, TokenNameenum); + this.wrapGroupEnd = constantsEnd = this.tm.lastIndexIn(enumConstants.get(enumConstants.size() - 1), -1); + handleWrap(this.options.alignment_for_enum_constants, node); + } + + if (!this.options.join_wrapped_lines) { + // preserve a line break between the last comma and semicolon + int commaIndex = -1; + int i = constantsEnd > 0 ? constantsEnd : this.tm.firstIndexAfter(node.getName(), TokenNameLBRACE); + while (++i < this.tm.size()) { + Token t = this.tm.get(i); + if (t.isComment()) { + continue; + } + if (t.tokenType == TokenNameCOMMA) { + commaIndex = i; + continue; + } + if (t.tokenType == TokenNameSEMICOLON && commaIndex >= 0 + && this.tm.countLineBreaksBetween(this.tm.get(commaIndex), t) == 1) { + t.setWrapPolicy(new WrapPolicy(WrapMode.WHERE_NECESSARY, commaIndex, 0)); + } + break; + } + } + + List superInterfaceTypes = node.superInterfaceTypes(); + if (!superInterfaceTypes.isEmpty()) { + this.wrapParentIndex = this.tm.lastIndexIn(node.getName(), -1); + this.wrapIndexes.add(this.tm.firstIndexBefore(superInterfaceTypes.get(0), TokenNameimplements)); + prepareElementsList(superInterfaceTypes, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_superinterfaces_in_enum_declaration, PREFERRED); + } + + this.aligner.handleAlign(node.bodyDeclarations()); + + return true; + } + + @Override + public boolean visit(EnumConstantDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_enum_constant); + + int lParen = this.tm.firstIndexAfter(node.getName(), -1); + while (this.tm.get(lParen).isComment()) { + lParen++; + } + if (this.tm.get(lParen).tokenType == TokenNameLPAREN) { + int rParen = node.getAnonymousClassDeclaration() == null ? this.tm.lastIndexIn(node, TokenNameRPAREN) + : this.tm.firstIndexBefore(node.getAnonymousClassDeclaration(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_enum_constant_declaration); + } + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_enum_constant); + AnonymousClassDeclaration anonymousClass = node.getAnonymousClassDeclaration(); + if (anonymousClass != null) { + forceContinuousWrapping(anonymousClass, this.tm.firstIndexIn(node.getName(), -1)); + } + return true; + } + + @Override + public boolean visit(Block node) { + this.aligner.handleAlign(node); + return true; + } + + @Override + public boolean visit(MethodInvocation node) { + // Method patched based on + // https://git.eclipse.org/r/c/jdt/eclipse.jdt.core/+/189391/4/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_method_invocation); + handleTypeArguments(node.typeArguments()); + + boolean isInvocationChainRoot = !(node.getParent() instanceof MethodInvocation) + || node.getLocationInParent() != MethodInvocation.EXPRESSION_PROPERTY; + if (isInvocationChainRoot) { + Expression expression = node; + MethodInvocation invocation = node; + while (expression instanceof MethodInvocation) { + invocation = (MethodInvocation) expression; + expression = invocation.getExpression(); + if (expression != null) { + this.wrapIndexes.add(this.tm.firstIndexBefore(invocation.getName(), TokenNameDOT)); + this.secondaryWrapIndexes.add(this.tm.firstIndexIn(invocation.getName(), TokenNameIdentifier)); + } + } + Collections.reverse(this.wrapIndexes); + expression = (expression != null) ? expression : invocation; + this.wrapParentIndex = this.tm.lastIndexIn(expression, -1); + if ((this.options.alignment_for_selector_in_method_invocation & Alignment.M_INDENT_ON_COLUMN) == 0) { + this.wrapParentIndex = this.tm.firstIndexIn(expression, -1); + } + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_selector_in_method_invocation); + } + return true; + } + + @Override + public boolean visit(SuperMethodInvocation node) { + int lParen = this.tm.firstIndexAfter(node.getName(), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_method_invocation); + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(ClassInstanceCreation node) { + int lParen = this.tm.firstIndexAfter(node.getType(), TokenNameLPAREN); + int rParen = node.getAnonymousClassDeclaration() == null ? this.tm.lastIndexIn(node, TokenNameRPAREN) + : this.tm.firstIndexBefore(node.getAnonymousClassDeclaration(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + AnonymousClassDeclaration anonymousClass = node.getAnonymousClassDeclaration(); + if (anonymousClass != null) { + forceContinuousWrapping(anonymousClass, this.tm.firstIndexIn(node, TokenNamenew)); + } + + int wrappingOption = node.getExpression() != null + ? this.options.alignment_for_arguments_in_qualified_allocation_expression + : this.options.alignment_for_arguments_in_allocation_expression; + handleArguments(node.arguments(), wrappingOption); + + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(ConstructorInvocation node) { + int lParen = node.arguments().isEmpty() ? this.tm.lastIndexIn(node, TokenNameLPAREN) + : this.tm.firstIndexBefore((ASTNode) node.arguments().get(0), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_explicit_constructor_call); + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(SuperConstructorInvocation node) { + int lParen = node.arguments().isEmpty() ? this.tm.lastIndexIn(node, TokenNameLPAREN) + : this.tm.firstIndexBefore((ASTNode) node.arguments().get(0), TokenNameLPAREN); + int rParen = this.tm.lastIndexIn(node, TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_method_invocation); + + handleArguments(node.arguments(), this.options.alignment_for_arguments_in_explicit_constructor_call); + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(FieldAccess node) { + handleFieldAccess(node); + return true; + } + + @Override + public boolean visit(QualifiedName node) { + handleFieldAccess(node); + return true; + } + + @Override + public boolean visit(ThisExpression node) { + handleFieldAccess(node); + return true; + } + + @Override + public boolean visit(SuperFieldAccess node) { + handleFieldAccess(node); + return true; + } + + private void handleFieldAccess(Expression node) { + boolean isAccessChainRoot = !FieldAccessAdapter.isFieldAccess(node.getParent()); + if (!isAccessChainRoot) { + return; + } + + Expression expression = node; + FieldAccessAdapter access = null; + while (FieldAccessAdapter.isFieldAccess(expression)) { + access = new FieldAccessAdapter(expression); + int nameIndex = access.getIdentifierIndex(this.tm); + // find a dot preceding the name, may not be there + for (int i = nameIndex - 1; i > this.tm.firstIndexIn(node, -1); i--) { + Token t = this.tm.get(i); + if (t.tokenType == TokenNameDOT) { + this.wrapIndexes.add(i); + this.secondaryWrapIndexes.add(nameIndex); + } + if (!t.isComment() && t.tokenType != TokenNamesuper) { + break; + } + } + expression = access.getExpression(); + } + Collections.reverse(this.wrapIndexes); + this.wrapParentIndex = this.tm.lastIndexIn(expression != null ? expression : access.accessExpression, -1); + boolean isFollowedByInvocation = node.getParent() instanceof MethodInvocation + && node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY; + this.wrapGroupEnd = isFollowedByInvocation ? this.tm.lastIndexIn(node.getParent(), -1) + : new FieldAccessAdapter(node).getIdentifierIndex(this.tm); + // TODO need configuration for this, now only handles line breaks that cannot be + // removed + handleWrap(Alignment.M_NO_ALIGNMENT); + } + + @Override + public boolean visit(InfixExpression node) { + Integer operatorPrecedence = OPERATOR_PRECEDENCE.get(node.getOperator()); + if (operatorPrecedence == null) { + return true; + } + ASTNode parent = node.getParent(); + if ((parent instanceof InfixExpression) && samePrecedence(node, (InfixExpression) parent)) { + return true; // this node has been handled higher in the AST + } + + int wrappingOption = OPERATOR_WRAPPING_OPTION.get(node.getOperator()).applyAsInt(this.options); + boolean wrapBeforeOperator = OPERATOR_WRAP_BEFORE_OPTION.get(node.getOperator()).test(this.options); + if (this.tm.isStringConcatenation(node)) { + wrappingOption = this.options.alignment_for_string_concatenation; + wrapBeforeOperator = this.options.wrap_before_string_concatenation; + } + + findTokensToWrap(node, wrapBeforeOperator, 0); + this.wrapParentIndex = this.wrapIndexes.remove(0); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + if ((wrappingOption & Alignment.M_INDENT_ON_COLUMN) != 0 && this.wrapParentIndex > 0) { + this.wrapParentIndex--; + } + for (int i = this.wrapParentIndex; i >= 0; i--) { + if (!this.tm.get(i).isComment()) { + this.wrapParentIndex = i; + break; + } + } + handleWrap(wrappingOption, !wrapBeforeOperator, node); + return true; + } + + private void findTokensToWrap(InfixExpression node, boolean wrapBeforeOperator, int depth) { + Expression left = node.getLeftOperand(); + if (left instanceof InfixExpression && samePrecedence(node, (InfixExpression) left)) { + findTokensToWrap((InfixExpression) left, wrapBeforeOperator, depth + 1); + } + else if (this.wrapIndexes.isEmpty() // always add first operand, it will be taken + // as wrap parent + || !wrapBeforeOperator) { + this.wrapIndexes.add(this.tm.firstIndexIn(left, -1)); + } + + Expression right = node.getRightOperand(); + List extended = node.extendedOperands(); + for (int i = -1; i < extended.size(); i++) { + Expression operand = (i == -1) ? right : extended.get(i); + if (operand instanceof InfixExpression && samePrecedence(node, (InfixExpression) operand)) { + findTokensToWrap((InfixExpression) operand, wrapBeforeOperator, depth + 1); + } + int indexBefore = this.tm.firstIndexBefore(operand, -1); + while (this.tm.get(indexBefore).isComment()) { + indexBefore--; + } + assert node.getOperator().toString().equals(this.tm.toString(indexBefore)); + int indexAfter = this.tm.firstIndexIn(operand, -1); + this.wrapIndexes.add(wrapBeforeOperator ? indexBefore : indexAfter); + this.secondaryWrapIndexes.add(wrapBeforeOperator ? indexAfter : indexBefore); + + if (!this.options.join_wrapped_lines) { + // TODO there should be an option for never joining wraps on opposite side + // of the operator + if (wrapBeforeOperator) { + if (this.tm.countLineBreaksBetween(this.tm.get(indexAfter - 1), this.tm.get(indexAfter)) > 0) { + this.wrapIndexes.add(indexAfter); + } + } + else { + if (this.tm.countLineBreaksBetween(this.tm.get(indexBefore), this.tm.get(indexBefore - 1)) > 0) { + this.wrapIndexes.add(indexBefore); + } + } + } + } + } + + private boolean samePrecedence(InfixExpression expression1, InfixExpression expression2) { + Integer precedence1 = OPERATOR_PRECEDENCE.get(expression1.getOperator()); + Integer precedence2 = OPERATOR_PRECEDENCE.get(expression2.getOperator()); + if (precedence1 == null || precedence2 == null) { + return false; + } + return precedence1.equals(precedence2); + } + + @Override + public boolean visit(ConditionalExpression node) { + boolean chainsMatter = (this.options.alignment_for_conditional_expression_chain + & Alignment.SPLIT_MASK) != Alignment.M_NO_ALIGNMENT; + boolean isNextInChain = node.getParent() instanceof ConditionalExpression + && node == ((ConditionalExpression) node.getParent()).getElseExpression(); + boolean isFirstInChain = node.getElseExpression() instanceof ConditionalExpression && !isNextInChain; + boolean wrapBefore = this.options.wrap_before_conditional_operator; + List before = wrapBefore ? this.wrapIndexes : this.secondaryWrapIndexes; + List after = wrapBefore ? this.secondaryWrapIndexes : this.wrapIndexes; + if (!chainsMatter || (!isFirstInChain && !isNextInChain)) { + before.add(this.tm.firstIndexAfter(node.getExpression(), TokenNameQUESTION)); + before.add(this.tm.firstIndexAfter(node.getThenExpression(), TokenNameCOLON)); + after.add(this.tm.firstIndexIn(node.getThenExpression(), -1)); + after.add(this.tm.firstIndexIn(node.getElseExpression(), -1)); + this.wrapParentIndex = this.tm.lastIndexIn(node.getExpression(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_conditional_expression); + + } + else if (isFirstInChain) { + List chain = new ArrayList<>(); + chain.add(node); + ConditionalExpression next = node; + while (next.getElseExpression() instanceof ConditionalExpression) { + next = (ConditionalExpression) next.getElseExpression(); + chain.add(next); + } + + for (ConditionalExpression conditional : chain) { + before.add(this.tm.firstIndexAfter(conditional.getThenExpression(), TokenNameCOLON)); + after.add(this.tm.firstIndexIn(conditional.getElseExpression(), -1)); + } + this.wrapParentIndex = this.tm.firstIndexIn(node.getExpression(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_conditional_expression_chain); + + this.currentDepth++; + for (ConditionalExpression conditional : chain) { + before.add(this.tm.firstIndexAfter(conditional.getExpression(), TokenNameQUESTION)); + after.add(this.tm.firstIndexIn(conditional.getThenExpression(), -1)); + this.wrapParentIndex = this.tm.firstIndexIn(conditional.getExpression(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(conditional.getThenExpression(), -1); + handleWrap(this.options.alignment_for_conditional_expression); + } + this.currentDepth--; + } + return true; + } + + @Override + public boolean visit(ArrayInitializer node) { + List expressions = node.expressions(); + if (!expressions.isEmpty()) { + prepareElementsList(expressions, TokenNameCOMMA, TokenNameLBRACE); + handleWrap(this.options.alignment_for_expressions_in_array_initializer, node); + } + int openingBraceIndex = this.tm.firstIndexIn(node, TokenNameLBRACE); + Token openingBrace = this.tm.get(openingBraceIndex); + if (openingBrace.isNextLineOnWrap() && openingBrace.getWrapPolicy() == null && openingBraceIndex > 0) { + // add fake wrap policy to make sure the brace indentation is right + openingBrace.setWrapPolicy(new WrapPolicy(WrapMode.DISABLED, openingBraceIndex - 1, 0)); + } + if (!this.options.join_wrapped_lines + && !this.options.insert_new_line_before_closing_brace_in_array_initializer) { + // if there is a line break before the closing brace, formatter should treat + // it as a valid wrap to preserve + int closingBraceIndex = this.tm.lastIndexIn(node, TokenNameRBRACE); + Token closingBrace = this.tm.get(closingBraceIndex); + if (this.tm.countLineBreaksBetween(this.tm.get(closingBraceIndex - 1), closingBrace) == 1) { + closingBrace.setWrapPolicy(new WrapPolicy(WrapMode.WHERE_NECESSARY, openingBraceIndex, + closingBraceIndex, 0, this.currentDepth, 1, true, false)); + } + } + if (this.options.brace_position_for_array_initializer.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED) + && openingBrace.getWrapPolicy() == null && (node.getParent() instanceof SingleMemberAnnotation + || node.getParent() instanceof MemberValuePair)) { + int parentIndex = this.tm.firstIndexIn(node.getParent(), -1); + int indent = this.options.indentation_size; + openingBrace.setWrapPolicy(new WrapPolicy(WrapMode.BLOCK_INDENT, parentIndex, indent)); + } + return true; + } + + @Override + public boolean visit(Assignment node) { + int rightSideIndex = this.tm.firstIndexIn(node.getRightHandSide(), -1); + if (this.tm.get(rightSideIndex).getLineBreaksBefore() > 0) { + return true; // must be an array initializer in new line because of + // brace_position_for_array_initializer + } + + int operatorIndex = this.tm.firstIndexBefore(node.getRightHandSide(), -1); + while (this.tm.get(operatorIndex).isComment()) { + operatorIndex--; + } + assert node.getOperator().toString().equals(this.tm.toString(operatorIndex)); + + this.wrapIndexes.add(this.options.wrap_before_assignment_operator ? operatorIndex : rightSideIndex); + this.secondaryWrapIndexes.add(this.options.wrap_before_assignment_operator ? rightSideIndex : operatorIndex); + this.wrapParentIndex = operatorIndex - 1; + this.wrapGroupEnd = this.tm.lastIndexIn(node.getRightHandSide(), -1); + handleWrap(this.options.alignment_for_assignment); + return true; + } + + @Override + public boolean visit(VariableDeclarationFragment node) { + if (node.getInitializer() == null) { + return true; + } + int rightSideIndex = this.tm.firstIndexIn(node.getInitializer(), -1); + if (this.tm.get(rightSideIndex).getLineBreaksBefore() > 0) { + return true; // must be an array initializer in new line because of + // brace_position_for_array_initializer + } + int equalIndex = this.tm.firstIndexBefore(node.getInitializer(), TokenNameEQUAL); + + this.wrapIndexes.add(this.options.wrap_before_assignment_operator ? equalIndex : rightSideIndex); + this.secondaryWrapIndexes.add(this.options.wrap_before_assignment_operator ? rightSideIndex : equalIndex); + this.wrapParentIndex = equalIndex - 1; + this.wrapGroupEnd = this.tm.lastIndexIn(node.getInitializer(), -1); + handleWrap(this.options.alignment_for_assignment); + return true; + } + + @Override + public boolean visit(IfStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_if_while_statement); + + Statement elseStatement = node.getElseStatement(); + boolean keepThenOnSameLine = this.options.keep_then_statement_on_same_line + || (this.options.keep_simple_if_on_one_line && elseStatement == null); + if (keepThenOnSameLine) { + handleSimpleLoop(node.getThenStatement(), this.options.alignment_for_compact_if); + } + + if (this.options.keep_else_statement_on_same_line && elseStatement != null) { + handleSimpleLoop(elseStatement, this.options.alignment_for_compact_if); + } + return true; + } + + @Override + public boolean visit(ForStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_for_statement); + + List initializers = node.initializers(); + if (!initializers.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(initializers.get(0), -1)); + } + if (node.getExpression() != null) { + this.wrapIndexes.add(this.tm.firstIndexIn(node.getExpression(), -1)); + } + List updaters = node.updaters(); + if (!updaters.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(updaters.get(0), -1)); + } + if (!this.wrapIndexes.isEmpty()) { + this.wrapParentIndex = lParen; + this.wrapGroupEnd = rParen; + handleWrap(this.options.alignment_for_expressions_in_for_loop_header); + } + if (this.options.keep_simple_for_body_on_same_line) { + handleSimpleLoop(node.getBody(), this.options.alignment_for_compact_loop); + } + return true; + } + + @Override + public boolean visit(EnhancedForStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_for_statement); + + if (this.options.keep_simple_for_body_on_same_line) { + handleSimpleLoop(node.getBody(), this.options.alignment_for_compact_loop); + } + return true; + } + + @Override + public boolean visit(WhileStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_if_while_statement); + + if (this.options.keep_simple_while_body_on_same_line) { + handleSimpleLoop(node.getBody(), this.options.alignment_for_compact_loop); + } + return true; + } + + private void handleSimpleLoop(Statement body, int wrappingOption) { + if (!(body instanceof Block)) { + this.wrapIndexes.add(this.tm.firstIndexIn(body, -1)); + this.wrapParentIndex = this.tm.firstIndexBefore(body, TokenNameRPAREN); + this.wrapGroupEnd = this.tm.lastIndexIn(body, -1); + handleWrap(wrappingOption, body.getParent()); + + body.accept(new ASTVisitor() { + @Override + public boolean visit(Block node) { + forceContinuousWrapping(node, WrapPreparator.this.tm.firstIndexIn(node, -1)); + return false; + } + }); + } + } + + @Override + public void endVisit(DoStatement node) { + if (this.options.keep_simple_do_while_body_on_same_line && !(node.getBody() instanceof Block)) { + int whileIndex = this.tm.firstIndexAfter(node.getBody(), TokenNamewhile); + this.wrapIndexes.add(whileIndex); + this.wrapParentIndex = this.tm.lastIndexIn(node.getBody(), -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + + int alignment = this.options.alignment_for_compact_loop; + for (int i = this.tm.firstIndexIn(node, -1) + 1; i < whileIndex; i++) { + Token token = this.tm.get(i); + if (token.getLineBreaksBefore() > 0 || token.getLineBreaksAfter() > 0) { + alignment |= Alignment.M_FORCE; + } + } + handleWrap(alignment, node); + } + } + + @Override + public boolean visit(TryStatement node) { + if (!node.resources().isEmpty()) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_try_clause); + } + prepareElementsList(node.resources(), TokenNameSEMICOLON, TokenNameLPAREN); + handleWrap(this.options.alignment_for_resources_in_try); + return true; + } + + @Override + public boolean visit(UnionType node) { + List types = node.types(); + if (types.isEmpty()) { + return true; + } + if (this.options.wrap_before_or_operator_multicatch) { + for (Type type : types) { + if (this.wrapIndexes.isEmpty()) { + this.wrapIndexes.add(this.tm.firstIndexIn(type, -1)); + } + else { + this.wrapIndexes.add(this.tm.firstIndexBefore(type, TokenNameOR)); + this.secondaryWrapIndexes.add(this.tm.firstIndexIn(type, -1)); + } + } + this.wrapParentIndex = this.tm.firstIndexBefore(node, -1); + while (this.tm.get(this.wrapParentIndex).isComment()) { + this.wrapParentIndex--; + } + this.wrapGroupEnd = this.tm.lastIndexIn(types.get(types.size() - 1), -1); + handleWrap(this.options.alignment_for_union_type_in_multicatch); + } + else { + prepareElementsList(types, TokenNameOR, TokenNameLPAREN); + handleWrap(this.options.alignment_for_union_type_in_multicatch); + } + return true; + } + + @Override + public boolean visit(LambdaExpression node) { + int lParen = this.tm.firstIndexIn(node, -1); + if (this.tm.get(lParen).tokenType == TokenNameLPAREN) { + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_lambda_declaration); + } + if (node.getBody() instanceof Block) { + forceContinuousWrapping(node.getBody(), this.tm.firstIndexIn(node, -1)); + + List statements = ((Block) node.getBody()).statements(); + if (!statements.isEmpty()) { + int openBraceIndex = this.tm.firstIndexBefore(statements.get(0), TokenNameLBRACE); + int closeBraceIndex = this.tm.firstIndexAfter(statements.get(statements.size() - 1), TokenNameRBRACE); + boolean areKeptOnOneLine = this.tm.stream().skip(openBraceIndex + 1) + .limit(closeBraceIndex - openBraceIndex - 1) + .allMatch(t -> t.getLineBreaksBefore() == 0 && t.getLineBreaksAfter() == 0); + if (areKeptOnOneLine) { + for (Statement statement : statements) { + this.wrapIndexes.add(this.tm.firstIndexIn(statement, -1)); + } + this.wrapParentIndex = openBraceIndex; + this.wrapGroupEnd = closeBraceIndex; + handleWrap(Alignment.M_ONE_PER_LINE_SPLIT, node); + this.tm.get(closeBraceIndex).setWrapPolicy(new WrapPolicy(WrapMode.TOP_PRIORITY, openBraceIndex, + closeBraceIndex, 0, this.currentDepth, 1, false, false)); + } + } + } + if (node.hasParentheses()) { + List parameters = node.parameters(); + // the legacy formatter didn't like wrapping lambda parameters, so neither do + // we + this.currentDepth++; + handleArguments(parameters, this.options.alignment_for_parameters_in_method_declaration); + this.currentDepth--; + } + return true; + } + + @Override + public boolean visit(FieldDeclaration node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_field); + handleVariableDeclarations(node.fragments()); + return true; + } + + @Override + public boolean visit(VariableDeclarationStatement node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_local_variable); + handleVariableDeclarations(node.fragments()); + return true; + } + + @Override + public boolean visit(VariableDeclarationExpression node) { + handleAnnotations(node.modifiers(), this.options.alignment_for_annotations_on_local_variable); + handleVariableDeclarations(node.fragments()); + return true; + } + + @Override + public boolean visit(SingleVariableDeclaration node) { + handleAnnotations(node.modifiers(), + node.getParent() instanceof EnhancedForStatement + ? this.options.alignment_for_annotations_on_local_variable + : this.options.alignment_for_annotations_on_parameter); + return true; + } + + @Override + public boolean visit(ParameterizedType node) { + prepareElementsList(node.typeArguments(), TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_parameterized_type_references); + return true; + } + + @Override + public boolean visit(TypeMethodReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(ExpressionMethodReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(SuperMethodReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + @Override + public boolean visit(CreationReference node) { + handleTypeArguments(node.typeArguments()); + return true; + } + + private void handleTypeArguments(List typeArguments) { + if (typeArguments.isEmpty()) { + return; + } + prepareElementsList(typeArguments, TokenNameCOMMA, TokenNameLESS); + handleWrap(this.options.alignment_for_type_arguments); + } + + @Override + public boolean visit(ExportsDirective node) { + handleModuleStatement(node.modules(), TokenNameto); + return true; + } + + @Override + public boolean visit(OpensDirective node) { + handleModuleStatement(node.modules(), TokenNameto); + return true; + } + + @Override + public boolean visit(ProvidesDirective node) { + handleModuleStatement(node.implementations(), TokenNamewith); + return true; + } + + private void handleModuleStatement(List names, int joiningTokenType) { + if (names.isEmpty()) { + return; + } + int joiningTokenIndex = this.tm.firstIndexBefore(names.get(0), joiningTokenType); + this.wrapParentIndex = this.tm.firstIndexBefore(names.get(0), TokenNameIdentifier); + this.wrapIndexes.add(joiningTokenIndex); + prepareElementsList(names, TokenNameCOMMA, -1); + handleWrap(this.options.alignment_for_module_statements, PREFERRED); + } + + @Override + public boolean visit(CatchClause node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexBefore(node.getBody(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_catch_clause); + return true; + } + + @Override + public boolean visit(SwitchStatement node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_switch_statement); + return true; + } + + @Override + public boolean visit(SwitchExpression node) { + int lParen = this.tm.firstIndexIn(node, TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_switch_statement); + return true; + } + + @Override + public boolean visit(DoStatement node) { + int lParen = this.tm.firstIndexBefore(node.getExpression(), TokenNameLPAREN); + int rParen = this.tm.firstIndexAfter(node.getExpression(), TokenNameRPAREN); + handleParenthesesPositions(lParen, rParen, this.options.parenthesis_positions_in_if_while_statement); + return true; + } + + @Override + public boolean visit(AssertStatement node) { + Expression message = node.getMessage(); + if (message != null) { + int atColon = this.tm.firstIndexBefore(message, TokenNameCOLON); + int afterColon = this.tm.firstIndexIn(message, -1); + if (this.options.wrap_before_assertion_message_operator) { + this.wrapIndexes.add(atColon); + this.secondaryWrapIndexes.add(afterColon); + } + else { + this.wrapIndexes.add(afterColon); + this.secondaryWrapIndexes.add(atColon); + } + this.wrapParentIndex = this.tm.firstIndexIn(node, -1); + this.wrapGroupEnd = this.tm.lastIndexIn(node, -1); + handleWrap(this.options.alignment_for_assertion_message); + } + return true; + } + + /** + * Makes sure all new lines within given node will have wrap policy so that wrap + * executor will fix their indentation if necessary. + */ + void forceContinuousWrapping(ASTNode node, int parentIndex) { + int parentIndent = this.tm.get(parentIndex).getIndent(); + int indentChange = -parentIndent; + int lineStart = this.tm.findFirstTokenInLine(parentIndex); + for (int i = parentIndex; i >= lineStart; i--) { + int align = this.tm.get(i).getAlign(); + if (align > 0) { + indentChange = -2 * parentIndent + align; + break; + } + } + + Token previous = null; + int from = this.tm.firstIndexIn(node, -1); + int to = this.tm.lastIndexIn(node, -1); + for (int i = from; i <= to; i++) { + Token token = this.tm.get(i); + if ((token.getLineBreaksBefore() > 0 || (previous != null && previous.getLineBreaksAfter() > 0)) + && (token.getWrapPolicy() == null || token.getWrapPolicy().wrapMode == WrapMode.BLOCK_INDENT)) { + int extraIndent = token.getIndent() + indentChange; + token.setWrapPolicy(new WrapPolicy(WrapMode.BLOCK_INDENT, parentIndex, extraIndent)); + token.setIndent(parentIndent + extraIndent); + } + previous = token; + } + } + + private void handleVariableDeclarations(List fragments) { + if (fragments.size() > 1) { + this.wrapParentIndex = this.tm.firstIndexIn(fragments.get(0), -1); + prepareElementsList(fragments, TokenNameCOMMA, -1); + this.wrapIndexes.remove(0); + handleWrap(this.options.alignment_for_multiple_fields); + } + } + + private void handleArguments(List arguments, int wrappingOption) { + this.wrapPenalties.add(1 / PREFERRED); + prepareElementsList(arguments, TokenNameCOMMA, TokenNameLPAREN); + handleWrap(wrappingOption); + } + + private void handleAnnotations(List modifiers, int wrappingOption) { + Annotation last = null; + int i; + for (i = 0; i < modifiers.size(); i++) { + if (modifiers.get(i).isModifier()) { + break; + } + Annotation annotation = (Annotation) modifiers.get(i); + if (i == 0) { + this.wrapParentIndex = this.tm.firstIndexIn(annotation, -1); + } + else { + this.wrapIndexes.add(this.tm.firstIndexIn(annotation, -1)); + this.wrapGroupEnd = this.tm.lastIndexIn(annotation, -1); + } + last = annotation; + } + handleWrap(wrappingOption, last); + + if (i < modifiers.size()) { + // any annotations following other modifiers will be associated with + // declaration type + handleAnnotations(modifiers.subList(i + 1, modifiers.size()), this.options.alignment_for_type_annotations); + } + } + + private void prepareElementsList(List elements, int separatorType, int wrapParentType) { + for (int i = 0; i < elements.size(); i++) { + ASTNode element = elements.get(i); + this.wrapIndexes.add(this.tm.firstIndexIn(element, -1)); + if (i > 0) { + this.secondaryWrapIndexes.add(this.tm.firstIndexBefore(element, separatorType)); + } + } + // wrapIndexes may have been filled with additional values even if arguments is + // empty + if (!this.wrapIndexes.isEmpty()) { + Token firstToken = this.tm.get(this.wrapIndexes.get(0)); + if (this.wrapParentIndex < 0) { + this.wrapParentIndex = this.tm.findIndex(firstToken.originalStart - 1, wrapParentType, false); + } + if (!elements.isEmpty() && this.wrapGroupEnd < 0) { + this.wrapGroupEnd = this.tm.lastIndexIn(elements.get(elements.size() - 1), -1); + } + } + } + + private void handleWrap(int wrappingOption) { + handleWrap(wrappingOption, null); + } + + private void handleWrap(int wrappingOption, float firstPenaltyMultiplier) { + this.wrapPenalties.add(firstPenaltyMultiplier); + handleWrap(wrappingOption, null); + } + + private void handleWrap(int wrappingOption, ASTNode parentNode) { + handleWrap(wrappingOption, true, parentNode); + } + + private void handleWrap(int wrappingOption, boolean wrapPreceedingComments, ASTNode parentNode) { + doHandleWrap(wrappingOption, wrapPreceedingComments, parentNode); + this.wrapIndexes.clear(); + this.secondaryWrapIndexes.clear(); + this.wrapPenalties.clear(); + this.wrapParentIndex = this.wrapGroupEnd = -1; + } + + private void doHandleWrap(int wrappingOption, boolean wrapPreceedingComments, ASTNode parentNode) { + if (this.wrapIndexes.isEmpty()) { + return; + } + assert this.wrapParentIndex >= 0 && this.wrapParentIndex < this.wrapIndexes.get(0); + assert this.wrapGroupEnd >= this.wrapIndexes.get(this.wrapIndexes.size() - 1); + + while (this.tm.get(this.wrapParentIndex).isComment() && this.wrapParentIndex > 0) { + this.wrapParentIndex--; + } + + float penalty = this.wrapPenalties.isEmpty() ? 1 : this.wrapPenalties.get(0); + WrapPolicy policy = getWrapPolicy(wrappingOption, penalty, true, parentNode); + + WrapPolicy existing = this.tm.get(this.wrapIndexes.get(0)).getWrapPolicy(); + if (existing != null && existing.wrapMode == WrapMode.TOP_PRIORITY) { + // SEPARATE_LINES_IF_WRAPPED + assert existing.wrapParentIndex == this.wrapParentIndex; + this.wrapGroupEnd = existing.groupEndIndex; + policy = new WrapPolicy(WrapMode.TOP_PRIORITY, policy.wrapParentIndex, this.wrapGroupEnd, + policy.extraIndent, policy.structureDepth, policy.penaltyMultiplier, true, policy.indentOnColumn); + } + + setTokenWrapPolicy(0, policy, true); + + for (int i = 1; i < this.wrapIndexes.size(); i++) { + penalty = this.wrapPenalties.size() > i ? this.wrapPenalties.get(i) : 1; + if (penalty != policy.penaltyMultiplier || i == 1) { + policy = getWrapPolicy(wrappingOption, penalty, false, parentNode); + } + setTokenWrapPolicy(i, policy, wrapPreceedingComments); + } + + if (!this.secondaryWrapIndexes.isEmpty()) { + int optionNoAlignment = (wrappingOption & ~Alignment.SPLIT_MASK) | Alignment.M_NO_ALIGNMENT; + policy = getWrapPolicy(optionNoAlignment, 1, false, parentNode); + for (int index : this.secondaryWrapIndexes) { + Token token = this.tm.get(index); + if (token.getWrapPolicy() == null) { + token.setWrapPolicy(policy); + } + } + } + } + + private void setTokenWrapPolicy(int wrapIndexesIndex, WrapPolicy policy, boolean wrapPreceedingComments) { + int index = this.wrapIndexes.get(wrapIndexesIndex); + if (wrapPreceedingComments) { + for (int i = index - 1; i >= 0; i--) { + Token previous = this.tm.get(i); + if (!previous.isComment()) { + break; + } + if (previous.getWrapPolicy() == WrapPolicy.FORCE_FIRST_COLUMN) { + break; + } + if (previous.getLineBreaksAfter() == 0 && i == index - 1) { + index = i; + } + if (previous.getLineBreaksBefore() > 0) { + previous.setWrapPolicy(policy); + } + } + this.wrapIndexes.set(wrapIndexesIndex, index); + } + + Token token = this.tm.get(index); + if (token.getWrapPolicy() == WrapPolicy.DISABLE_WRAP) { + return; + } + + token.setWrapPolicy(policy); + if (policy.wrapMode == WrapMode.FORCE) { + token.breakBefore(); + } + else if (this.options.join_wrapped_lines && token.tokenType == TokenNameCOMMENT_BLOCK) { + // allow wrap preparator to decide if this comment should be wrapped + token.clearLineBreaksBefore(); + } + } + + private WrapPolicy getWrapPolicy(int wrappingOption, float penaltyMultiplier, boolean isFirst, ASTNode parentNode) { + assert this.wrapParentIndex >= 0 && this.wrapGroupEnd >= 0; + int extraIndent = this.options.continuation_indentation; + boolean indentOnColumn = (wrappingOption & Alignment.M_INDENT_ON_COLUMN) != 0; + boolean isForceWrap = (wrappingOption & Alignment.M_FORCE) != 0; + boolean isAlreadyWrapped = false; + if (indentOnColumn) { + extraIndent = 0; + } + else if (parentNode instanceof Annotation) { + extraIndent = 0; + } + else if (parentNode instanceof EnumDeclaration) { + // special behavior for compatibility with legacy formatter + extraIndent = ((wrappingOption & Alignment.M_INDENT_BY_ONE) != 0) ? 2 : 1; + if (!this.options.indent_body_declarations_compare_to_enum_declaration_header) { + extraIndent--; + } + isAlreadyWrapped = isFirst; + } + else if (parentNode instanceof IfStatement || parentNode instanceof ForStatement + || parentNode instanceof EnhancedForStatement || parentNode instanceof WhileStatement) { + extraIndent = 1; + this.wrapParentIndex = this.tm.firstIndexIn(parentNode, -1); // only if + // !indoentOnColumn + } + else if (parentNode instanceof DoStatement) { + extraIndent = 0; + this.wrapParentIndex = this.tm.firstIndexIn(parentNode, -1); // only if + // !indoentOnColumn + } + else if (parentNode instanceof LambdaExpression) { + extraIndent = 1; + } + else if ((wrappingOption & Alignment.M_INDENT_BY_ONE) != 0) { + extraIndent = 1; + } + else if (parentNode instanceof ArrayInitializer) { + extraIndent = this.options.continuation_indentation_for_array_initializer; + isAlreadyWrapped = isFirst && this.options.insert_new_line_after_opening_brace_in_array_initializer; + } + + WrapMode wrapMode = WrapMode.WHERE_NECESSARY; + boolean isTopPriority = false; + switch (wrappingOption & Alignment.SPLIT_MASK) { + case Alignment.M_NO_ALIGNMENT: + wrapMode = WrapMode.DISABLED; + isForceWrap = false; + break; + case Alignment.M_COMPACT_FIRST_BREAK_SPLIT: + isTopPriority = isFirst; + isForceWrap &= isFirst; + break; + case Alignment.M_ONE_PER_LINE_SPLIT: + isTopPriority = true; + break; + case Alignment.M_NEXT_SHIFTED_SPLIT: + isTopPriority = true; + if (!isFirst) { + extraIndent++; + } + break; + case Alignment.M_NEXT_PER_LINE_SPLIT: + isTopPriority = !isFirst; + isForceWrap &= !isFirst; + break; + } + + if (isForceWrap) { + wrapMode = WrapMode.FORCE; + } + else if (isAlreadyWrapped) { + wrapMode = WrapMode.DISABLED; // to avoid triggering top priority wrapping + } + else if (isTopPriority) { + wrapMode = WrapMode.TOP_PRIORITY; + } + extraIndent *= this.options.indentation_size; + return new WrapPolicy(wrapMode, this.wrapParentIndex, this.wrapGroupEnd, extraIndent, this.currentDepth, + penaltyMultiplier, isFirst, indentOnColumn); + } + + public void finishUp(ASTNode astRoot, List regions) { + preserveExistingLineBreaks(); + applyBreaksOutsideRegions(regions); + new WrapExecutor(this.tm, this.options, regions).executeWraps(); + this.aligner.alignComments(); + wrapComments(); + fixEnumConstantIndents(astRoot); + } + + private void preserveExistingLineBreaks() { + // normally n empty lines = n+1 line breaks, but not at the file start and end + Token first = this.tm.get(0); + int startingBreaks = first.getLineBreaksBefore(); + first.clearLineBreaksBefore(); + first.putLineBreaksBefore(startingBreaks - 1); + + this.tm.traverse(0, new TokenTraverser() { + boolean join_wrapped_lines = WrapPreparator.this.options.join_wrapped_lines; + + @Override + protected boolean token(Token token, int index) { + int lineBreaks = getLineBreaksToPreserve(getPrevious(), token); + if (lineBreaks > 1 || (!this.join_wrapped_lines && token.isWrappable()) || index == 0) { + token.putLineBreaksBefore(lineBreaks); + } + return true; + } + + }); + + Token last = this.tm.get(this.tm.size() - 1); + last.clearLineBreaksAfter(); + int endingBreaks = getLineBreaksToPreserve(last, null); + if (endingBreaks > 0) { + last.putLineBreaksAfter(endingBreaks); + } + else if ((this.kind & (CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.K_MODULE_INFO)) != 0 + && this.options.insert_new_line_at_end_of_file_if_missing) { + last.breakAfter(); + } + } + + int getLineBreaksToPreserve(Token token1, Token token2) { + if ((token1 != null && !token1.isPreserveLineBreaksAfter()) + || (token2 != null && !token2.isPreserveLineBreaksBefore())) { + return 0; + } + if (token1 != null) { + List structure = token1.getInternalStructure(); + if (structure != null && !structure.isEmpty()) { + token1 = structure.get(structure.size() - 1); + } + } + if (token2 != null) { + List structure = token2.getInternalStructure(); + if (structure != null && !structure.isEmpty()) { + token2 = structure.get(0); + } + } + int lineBreaks = WrapPreparator.this.tm.countLineBreaksBetween(token1, token2); + int toPreserve = this.options.number_of_empty_lines_to_preserve; + if (token1 != null && token2 != null) { + toPreserve++; // n empty lines = n+1 line breaks, except for file start and + // end + } + return Math.min(lineBreaks, toPreserve); + } + + private void applyBreaksOutsideRegions(List regions) { + String source = this.tm.getSource(); + int previousRegionEnd = 0; + for (IRegion region : regions) { + int index = this.tm.findIndex(previousRegionEnd, -1, true); + Token token = this.tm.get(index); + if (this.tm.countLineBreaksBetween(source, previousRegionEnd, + Math.min(token.originalStart, region.getOffset())) > 0) { + token.breakBefore(); + } + for (index++; index < this.tm.size(); index++) { + Token next = this.tm.get(index); + if (next.originalStart > region.getOffset()) { + if (this.tm.countLineBreaksBetween(source, token.originalEnd, region.getOffset()) > 0) { + next.breakBefore(); + } + break; + } + if (this.tm.countLineBreaksBetween(token, next) > 0) { + next.breakBefore(); + } + token = next; + } + previousRegionEnd = region.getOffset() + region.getLength() - 1; + } + } + + private void wrapComments() { + CommentWrapExecutor commentWrapper = new CommentWrapExecutor(this.tm, this.options); + boolean isNLSTagInLine = false; + for (int i = 0; i < this.tm.size(); i++) { + Token token = this.tm.get(i); + if (token.getLineBreaksBefore() > 0 || token.getLineBreaksAfter() > 0) { + isNLSTagInLine = false; + } + if (token.hasNLSTag()) { + assert token.tokenType == TokenNameStringLiteral; + isNLSTagInLine = true; + } + List structure = token.getInternalStructure(); + if (token.isComment() && structure != null && !structure.isEmpty() && !isNLSTagInLine) { + int startPosition = this.tm.getPositionInLine(i); + if (token.tokenType == TokenNameCOMMENT_LINE) { + commentWrapper.wrapLineComment(token, startPosition); + } + else { + assert token.tokenType == TokenNameCOMMENT_BLOCK || token.tokenType == TokenNameCOMMENT_JAVADOC; + commentWrapper.wrapMultiLineComment(token, startPosition, false, false); + } + } + } + } + + private void fixEnumConstantIndents(ASTNode astRoot) { + if (this.options.use_tabs_only_for_leading_indentations) { + // enum constants should be indented like other declarations, not like wrapped + // elements + astRoot.accept(new ASTVisitor() { + + @Override + public boolean visit(EnumConstantDeclaration node) { + WrapPreparator.this.tm.firstTokenIn(node, -1).setWrapPolicy(null); + return true; + } + }); + } + } + + private void handleParenthesesPositions(int openingParenIndex, int closingParenIndex, String positionsSetting) { + boolean isEmpty = openingParenIndex + 1 == closingParenIndex; + switch (positionsSetting) { + case DefaultCodeFormatterConstants.COMMON_LINES: + // nothing to do + break; + case DefaultCodeFormatterConstants.SEPARATE_LINES_IF_WRAPPED: + if (isEmpty) { + break; + } + this.tm.get(openingParenIndex + 1).setWrapPolicy(new WrapPolicy(WrapMode.TOP_PRIORITY, openingParenIndex, + closingParenIndex, this.options.indentation_size, this.currentDepth, 1, true, false)); + this.tm.get(closingParenIndex).setWrapPolicy(new WrapPolicy(WrapMode.TOP_PRIORITY, openingParenIndex, + closingParenIndex, 0, this.currentDepth, 1, false, false)); + break; + case DefaultCodeFormatterConstants.SEPARATE_LINES_IF_NOT_EMPTY: + if (isEmpty) { + break; + } + //$FALL-THROUGH$ + case DefaultCodeFormatterConstants.SEPARATE_LINES: + case DefaultCodeFormatterConstants.PRESERVE_POSITIONS: + boolean always = !positionsSetting.equals(DefaultCodeFormatterConstants.PRESERVE_POSITIONS); + Token afterOpening = this.tm.get(openingParenIndex + 1); + if (always || this.tm.countLineBreaksBetween(this.tm.get(openingParenIndex), afterOpening) > 0) { + afterOpening.setWrapPolicy( + new WrapPolicy(WrapMode.WHERE_NECESSARY, openingParenIndex, this.options.indentation_size)); + afterOpening.breakBefore(); + } + Token closingParen = this.tm.get(closingParenIndex); + if (always || this.tm.countLineBreaksBetween(this.tm.get(closingParenIndex - 1), closingParen) > 0) { + closingParen.setWrapPolicy(new WrapPolicy(WrapMode.WHERE_NECESSARY, openingParenIndex, 0)); + closingParen.breakBefore(); + } + break; + default: + throw new IllegalArgumentException("Unrecognized parentheses positions setting: " + positionsSetting); //$NON-NLS-1$ + } + } + + // @formatter:on +} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 232f1d25..60aad783 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -77,6 +77,7 @@ private void rewrite(JdkVersion jdkVersion, FileSystem zip) throws IOException { DefaultCodeFormatterManipulator::new); if (jdkVersion == JdkVersion.V8) { rewrite(zip, "org/eclipse/osgi/util/NLS$1.class", NlsJdk8Manipulator::new); + deleteWrapPreparator(zip); } else { rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk11Manipulator::new); @@ -94,6 +95,11 @@ private void rewrite(FileSystem zip, String name, Function + From 23f4faacbae5b8154c8497ed22338d252b43c029 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 13:04:05 -0800 Subject: [PATCH 015/136] Update copyright header to fix test --- .../src/test/resources/source/complex.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt index 15283fa8..936faa1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/complex.txt @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 759dfdf66f232a01cf4db2dd8c4d860993593c8a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 17:26:10 -0800 Subject: [PATCH 016/136] Add basedir property --- .../io.spring.javaformat.gradle.plugin/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index e41e6604..5a9a4e8f 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -11,6 +11,9 @@ io.spring.javaformat.gradle.plugin pom Spring JavaFormat Gradle Plugin Marker Artifact + + ${basedir}/../.. + io.spring.javaformat From 91d1381c537423e99c3fdd585fb8512dd1d09d25 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 20:47:33 -0800 Subject: [PATCH 017/136] Switch to DocumentFormattingService interface Upgrade to IntelliJ IDEA 2022.3.2 and change the formatter to be an implementation of `DocumentFormattingService`. This significantly simplifies the plugin and hopefully removes some of the compatibility issues that have happened in the past. Closes gh-359 --- README.adoc | 2 +- .../pom.xml | 38 ++- .../formatter/intellij/SpringFormat.java | 160 ------------ .../codestyle/DelegatingCodeStyleManager.java | 222 ---------------- .../codestyle/SpringCodeStyleManager.java | 73 ------ .../intellij/codestyle/SpringReformatter.java | 132 ---------- .../EclipseDocumentAdapter.java | 4 +- .../EclipseRegionAdapter.java | 11 +- .../SpringJavaFormatFormattingService.java | 103 ++++++++ .../{codestyle => }/monitor/FileMonitor.java | 10 +- .../monitor/GradleMonitor.java | 23 +- .../{codestyle => }/monitor/MavenMonitor.java | 6 +- .../{codestyle => }/monitor/Monitor.java | 4 +- .../{codestyle => }/monitor/Monitors.java | 6 +- .../{codestyle => }/monitor/Trigger.java | 23 +- .../ManagedSpringJavaFormatProject.java | 89 +++++++ .../SpringJavaFormatStartupActivity.java} | 10 +- .../formatter/intellij/state/State.java | 59 +++++ .../intellij/{ => ui}/StatusIndicator.java | 12 +- .../src/main/resources/META-INF/plugin.xml | 3 +- .../DelegatingCodeStyleManagerTests.java | 243 ------------------ .../SpringCodeStyleManagerTests.java | 117 --------- .../codestyle/SpringReformatterTests.java | 121 --------- .../EclipseDocumentAdapterTests.java | 11 +- .../EclipseRegionAdapterTests.java | 12 +- ...pringJavaFormatFormattingServiceTests.java | 94 +++++++ .../pom.xml | 186 +++++++------- 27 files changed, 527 insertions(+), 1247 deletions(-) delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseDocumentAdapter.java (92%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseRegionAdapter.java (79%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/FileMonitor.java (88%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/GradleMonitor.java (83%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/MavenMonitor.java (93%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/Monitor.java (93%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/Monitors.java (94%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{codestyle => }/monitor/Trigger.java (73%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{SpringFormatStartupActivity.java => startup/SpringJavaFormatStartupActivity.java} (71%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/{ => ui}/StatusIndicator.java (89%) delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java delete mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseDocumentAdapterTests.java (83%) rename spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/{codestyle => formatting}/EclipseRegionAdapterTests.java (81%) create mode 100644 spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java diff --git a/README.adoc b/README.adoc index af1ce970..5ffd15a1 100644 --- a/README.adoc +++ b/README.adoc @@ -224,7 +224,7 @@ or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. -The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. +The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script or if a `.springjavaformatconfig` file. A Spring Java Format icon (image:spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/spring-javaformat/formatOn.png[title="Icon"]) will also be displayed in the status bar to indicate the formatter is active. You can use the standard `code` -> `reformat code` action to format the code. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 88ddb665..5b0b83d1 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -12,15 +12,10 @@ Spring JavaFormat IntelliJ IDEA Plugin ${basedir}/../.. - 11 + 17 - - io.spring.javaformat - spring-javaformat-formatter - ${project.version} - io.spring.javaformat spring-javaformat-formatter-eclipse-runtime @@ -32,6 +27,11 @@ + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + io.spring.javaformat @@ -41,14 +41,20 @@ provided - io.spring.javaformat.intellij.idea + org.jetbrains annotations + 13.0 + provided + + + io.spring.javaformat.intellij.idea + app ${project.version} provided io.spring.javaformat.intellij.idea - platform-api + jps-model ${project.version} provided @@ -66,7 +72,7 @@ io.spring.javaformat.intellij.idea - idea + util_rt ${project.version} provided @@ -78,7 +84,7 @@ io.spring.javaformat.intellij.idea - maven-server-api + maven-server ${project.version} provided @@ -110,6 +116,18 @@ picocontainer provided + + org.jetbrains.kotlinx + kotlinx-coroutines-core + 1.6.4 + provided + + + it.unimi.dsi + fastutil + 8.5.11 + provided + diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java deleted file mode 100644 index 79a76382..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormat.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij; - -import java.lang.reflect.Method; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import com.intellij.ide.plugins.IdeaPluginDescriptor; -import com.intellij.ide.plugins.PluginManagerCore; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.application.ApplicationInfo; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.PluginDescriptor; -import com.intellij.openapi.extensions.PluginId; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.serviceContainer.ComponentManagerImpl; -import org.picocontainer.MutablePicoContainer; - -import io.spring.format.formatter.intellij.codestyle.SpringCodeStyleManager; -import io.spring.format.formatter.intellij.codestyle.monitor.FileMonitor; -import io.spring.format.formatter.intellij.codestyle.monitor.GradleMonitor; -import io.spring.format.formatter.intellij.codestyle.monitor.MavenMonitor; -import io.spring.format.formatter.intellij.codestyle.monitor.Monitors; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; - -/** - * Spring Java Format IntelliJ support added to a {@link Project}. - * - * @author Phillip Webb - */ -public class SpringFormat { - - private static final String CODE_STYLE_MANAGER_KEY = CodeStyleManager.class.getName(); - - private static final String ACTIVE_PROPERTY = SpringFormat.class.getName() + ".ACTIVE"; - - private static final Logger logger = Logger.getInstance(SpringFormat.class); - - private final Project project; - - private final StatusIndicator statusIndicator; - - private final Lock lock = new ReentrantLock(); - - private Monitors monitors; - - private PropertiesComponent properties; - - protected SpringFormat(Project project) { - logger.info("Initializing Spring Format for project " + project.getName()); - this.project = project; - this.statusIndicator = new StatusIndicator(project); - this.properties = PropertiesComponent.getInstance(project); - if (this.properties.getBoolean(ACTIVE_PROPERTY, false)) { - update(State.ACTIVE); - } - this.monitors = new Monitors(this.project, this::update, FileMonitor.factory(), MavenMonitor.factory(), - GradleMonitor.factory()); - Disposer.register(project, this::dispose); - } - - private void dispose() { - if (this.monitors != null) { - this.monitors.stop(); - this.monitors = null; - } - } - - private void update(State state) { - logger.info("Updating state of " + this.project.getName() + " to " + state); - this.lock.lock(); - try { - CodeStyleManager manager = CodeStyleManager.getInstance(this.project); - if (manager == null) { - logger.warn("Unable to find exiting CodeStyleManager"); - return; - } - if (state == State.ACTIVE && !(manager instanceof SpringCodeStyleManager)) { - logger.debug("Enabling SpringCodeStyleManager"); - registerCodeStyleManager(new SpringCodeStyleManager(manager)); - this.properties.setValue(ACTIVE_PROPERTY, true); - } - if (state == State.NOT_ACTIVE && (manager instanceof SpringCodeStyleManager)) { - logger.debug("Disabling SpringCodeStyleManager"); - registerCodeStyleManager(((SpringCodeStyleManager) manager).getDelegate()); - this.properties.setValue(ACTIVE_PROPERTY, false); - } - ApplicationManager.getApplication().invokeLater(() -> this.statusIndicator.update(state)); - } - finally { - this.lock.unlock(); - } - } - - private void registerCodeStyleManager(CodeStyleManager manager) { - if (ApplicationInfo.getInstance().getBuild().getBaselineVersion() >= 193) { - IdeaPluginDescriptor plugin = PluginManagerCore.getPlugin(PluginId.getId("spring-javaformat")); - try { - ((ComponentManagerImpl) this.project).registerServiceInstance(CodeStyleManager.class, manager, plugin); - } - catch (NoSuchMethodError ex) { - Method method = findRegisterServiceInstanceMethod(this.project.getClass()); - invokeRegisterServiceInstanceMethod(manager, plugin, method); - } - } - else { - MutablePicoContainer container = (MutablePicoContainer) this.project.getPicoContainer(); - container.unregisterComponent(CODE_STYLE_MANAGER_KEY); - container.registerComponentInstance(CODE_STYLE_MANAGER_KEY, manager); - } - } - - private Method findRegisterServiceInstanceMethod(Class projectClass) { - if (projectClass != null) { - Method[] methods = projectClass.getDeclaredMethods(); - for (Method method : methods) { - if (method.getName().equals("registerServiceInstance") && method.getParameterCount() == 3) { - if (PluginDescriptor.class.isAssignableFrom(method.getParameterTypes()[2])) { - return method; - } - } - } - return findRegisterServiceInstanceMethod(projectClass.getSuperclass()); - } - return null; - } - - private void invokeRegisterServiceInstanceMethod(CodeStyleManager manager, IdeaPluginDescriptor plugin, - Method method) { - if (method == null) { - throw new IllegalStateException("Unsupported IntelliJ IDEA version"); - } - method.setAccessible(true); - try { - method.invoke(this.project, manager, plugin); - } - catch (Exception ex) { - throw new IllegalStateException(ex); - } - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java deleted file mode 100644 index c133d872..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManager.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; - -import com.intellij.formatting.FormattingMode; -import com.intellij.lang.ASTNode; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.codeStyle.DocCommentSettings; -import com.intellij.psi.codeStyle.FormattingModeAwareIndentAdjuster; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.ThrowableRunnable; - -/** - * {@link CodeStyleManager} implementation that delegates all calls. - * - * @author Phillip Webb - */ -public class DelegatingCodeStyleManager extends CodeStyleManager implements FormattingModeAwareIndentAdjuster { - - private final CodeStyleManager delegate; - - public DelegatingCodeStyleManager(CodeStyleManager delegate) { - this.delegate = delegate; - } - - public CodeStyleManager getDelegate() { - return this.delegate; - } - - @Override - public int getSpacing(PsiFile file, int offset) { - return this.delegate.getSpacing(file, offset); - } - - @Override - public int getMinLineFeeds(PsiFile file, int offset) { - return this.delegate.getMinLineFeeds(file, offset); - } - - @Override - public void runWithDocCommentFormattingDisabled(PsiFile file, Runnable runnable) { - this.delegate.runWithDocCommentFormattingDisabled(file, runnable); - } - - @Override - public DocCommentSettings getDocCommentSettings(PsiFile file) { - return this.delegate.getDocCommentSettings(file); - } - - @Override - public Project getProject() { - return this.delegate.getProject(); - } - - @Override - public PsiElement reformat(PsiElement element) throws IncorrectOperationException { - return this.delegate.reformat(element); - } - - @Override - public PsiElement reformat(PsiElement element, boolean canChangeWhiteSpacesOnly) - throws IncorrectOperationException { - return this.delegate.reformat(element, canChangeWhiteSpacesOnly); - } - - @Override - public PsiElement reformatRange(PsiElement element, int startOffset, int endOffset) - throws IncorrectOperationException { - return this.delegate.reformatRange(element, startOffset, endOffset); - } - - @Override - public PsiElement reformatRange(PsiElement element, int startOffset, int endOffset, - boolean canChangeWhiteSpacesOnly) throws IncorrectOperationException { - return this.delegate.reformatRange(element, startOffset, endOffset, canChangeWhiteSpacesOnly); - } - - @Override - public void reformatText(PsiFile file, int startOffset, int endOffset) throws IncorrectOperationException { - this.delegate.reformatText(file, startOffset, endOffset); - } - - @Override - public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { - this.delegate.reformatText(file, ranges); - } - - @Override - public void reformatTextWithContext(PsiFile file, ChangedRangesInfo info) throws IncorrectOperationException { - this.delegate.reformatTextWithContext(file, info); - } - - @Override - public void adjustLineIndent(PsiFile file, TextRange rangeToAdjust) throws IncorrectOperationException { - this.delegate.adjustLineIndent(file, rangeToAdjust); - } - - @Override - public int adjustLineIndent(PsiFile file, int offset) throws IncorrectOperationException { - return this.delegate.adjustLineIndent(file, offset); - } - - @Override - public int adjustLineIndent(Document document, int offset) { - return this.delegate.adjustLineIndent(document, offset); - } - - @Override - @Deprecated - public boolean isLineToBeIndented(PsiFile file, int offset) { - return this.delegate.isLineToBeIndented(file, offset); - } - - @Override - public String getLineIndent(PsiFile file, int offset) { - return this.delegate.getLineIndent(file, offset); - } - - @Override - public String getLineIndent(Document document, int offset) { - return this.delegate.getLineIndent(document, offset); - } - - @Override - public String getLineIndent(PsiFile file, int offset, FormattingMode mode) { - return this.delegate.getLineIndent(file, offset, mode); - } - - @Override - @Deprecated - public com.intellij.psi.codeStyle.Indent getIndent(String text, FileType fileType) { - return this.delegate.getIndent(text, fileType); - } - - @Override - @Deprecated - public String fillIndent(com.intellij.psi.codeStyle.Indent indent, FileType fileType) { - return this.delegate.fillIndent(indent, fileType); - } - - @Override - @Deprecated - public com.intellij.psi.codeStyle.Indent zeroIndent() { - return this.delegate.zeroIndent(); - } - - @Override - public void reformatNewlyAddedElement(ASTNode block, ASTNode addedElement) throws IncorrectOperationException { - this.delegate.reformatNewlyAddedElement(block, addedElement); - } - - @Override - public boolean isSequentialProcessingAllowed() { - return this.delegate.isSequentialProcessingAllowed(); - } - - @Override - public void performActionWithFormatterDisabled(Runnable r) { - this.delegate.performActionWithFormatterDisabled(r); - } - - @Override - public void performActionWithFormatterDisabled(ThrowableRunnable r) throws T { - this.delegate.performActionWithFormatterDisabled(r); - } - - @Override - public T performActionWithFormatterDisabled(Computable r) { - return this.delegate.performActionWithFormatterDisabled(r); - } - - @Override - public int adjustLineIndent(Document document, int offset, FormattingMode mode) { - if (this.delegate instanceof FormattingModeAwareIndentAdjuster) { - return ((FormattingModeAwareIndentAdjuster) this.delegate).adjustLineIndent(document, offset, mode); - } - return offset; - } - - @Override - public FormattingMode getCurrentFormattingMode() { - if (this.delegate instanceof FormattingModeAwareIndentAdjuster) { - return ((FormattingModeAwareIndentAdjuster) this.delegate).getCurrentFormattingMode(); - } - return FormattingMode.REFORMAT; - } - - @Override - public void scheduleIndentAdjustment(Document document, int offset) { - this.delegate.scheduleIndentAdjustment(document, offset); - } - - @Override - public void scheduleReformatWhenSettingsComputed(PsiFile file) { - this.delegate.scheduleReformatWhenSettingsComputed(file); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java deleted file mode 100644 index 56b94ab5..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManager.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; -import java.util.Collections; -import java.util.function.Supplier; - -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.util.IncorrectOperationException; - -/** - * {@link CodeStyleManager} to apply Spring Formatting conventions. - * - * @author Phillip Webb - */ -public class SpringCodeStyleManager extends DelegatingCodeStyleManager { - - private final SpringReformatter springReformatter; - - public SpringCodeStyleManager(CodeStyleManager delegate) { - super(delegate); - this.springReformatter = new SpringReformatter(() -> getProject()); - } - - SpringCodeStyleManager(CodeStyleManager delegate, SpringReformatter springReformatter) { - super(delegate); - this.springReformatter = springReformatter; - } - - @Override - public void reformatText(PsiFile file, int startOffset, int endOffset) throws IncorrectOperationException { - reformat(file, () -> Collections.singleton(new TextRange(startOffset, endOffset)), - () -> super.reformatText(file, startOffset, endOffset)); - } - - @Override - public void reformatText(PsiFile file, Collection ranges) throws IncorrectOperationException { - reformat(file, () -> ranges, () -> super.reformatText(file, ranges)); - } - - @Override - public void reformatTextWithContext(PsiFile file, ChangedRangesInfo info) throws IncorrectOperationException { - reformat(file, () -> info.allChangedRanges, () -> super.reformatTextWithContext(file, info)); - } - - private void reformat(PsiFile file, Supplier> ranges, Runnable delegate) { - if (this.springReformatter.canReformat(file)) { - this.springReformatter.reformat(file, ranges.get()); - } - else { - delegate.run(); - } - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java deleted file mode 100644 index be1ceed0..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/SpringReformatter.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; -import java.util.function.Supplier; - -import com.intellij.core.CoreBundle; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.util.IncorrectOperationException; -import org.eclipse.jface.text.IRegion; -import org.eclipse.text.edits.TextEdit; - -import io.spring.javaformat.config.JavaFormatConfig; -import io.spring.javaformat.formatter.Formatter; - -/** - * Reformatter used by {@link SpringCodeStyleManager} to determine when formatting can - * apply and to perform the actual formatting. - * - * @author Phillip Webb - */ -class SpringReformatter { - - private static final String NORMALIZED_LINE_SEPARATOR = "\n"; - - private static final FileType JAVA_FILE_TYPE = FileTypeManager.getInstance().getStdFileType("JAVA"); - - private final Supplier project; - - private final Supplier application; - - private final Supplier documentManager; - - SpringReformatter(Supplier project) { - this.project = project; - this.application = () -> ApplicationManager.getApplication(); - this.documentManager = () -> PsiDocumentManager.getInstance(project.get()); - } - - SpringReformatter(Supplier project, Supplier application, - Supplier documentManager) { - this.project = project; - this.application = application; - this.documentManager = documentManager; - } - - public boolean canReformat(PsiFile file) { - return JAVA_FILE_TYPE.equals(file.getFileType()); - } - - public void reformat(PsiFile file, Collection ranges) { - this.application.get().assertWriteAccessAllowed(); - this.documentManager.get().commitAllDocuments(); - if (!file.isWritable()) { - throwNotWritableException(file); - } - reformat(file, ranges, this.documentManager.get().getDocument(file)); - } - - private void throwNotWritableException(PsiElement element) throws IncorrectOperationException { - if (element instanceof PsiDirectory) { - String url = ((PsiDirectory) element).getVirtualFile().getPresentableUrl(); - throw new IncorrectOperationException(CoreBundle.message("cannot.modify.a.read.only.directory", url)); - } - PsiFile file = element.getContainingFile(); - if (file == null) { - throw new IncorrectOperationException(); - } - VirtualFile virtualFile = file.getVirtualFile(); - if (virtualFile == null) { - throw new IncorrectOperationException(); - } - throw new IncorrectOperationException( - CoreBundle.message("cannot.modify.a.read.only.file", virtualFile.getPresentableUrl())); - } - - private void reformat(PsiFile file, Collection ranges, Document document) { - if (document != null && file.getVirtualFile() != null) { - JavaFormatConfig javaFormatConfig = JavaFormatConfig.findFrom(file.getVirtualFile().toNioPath()); - Formatter formatter = new Formatter(javaFormatConfig); - String source = document.getText(); - IRegion[] regions = EclipseRegionAdapter.asArray(ranges); - TextEdit edit = formatter.format(source, regions, NORMALIZED_LINE_SEPARATOR); - applyEdit(document, edit); - } - } - - private void applyEdit(Document document, TextEdit textEdit) { - runWriteCommandAction(() -> { - try { - EclipseDocumentAdapter adapter = new EclipseDocumentAdapter(document); - textEdit.apply(adapter); - this.documentManager.get().commitDocument(document); - } - catch (Exception ex) { - throw new IllegalStateException(ex); - } - }); - } - - protected void runWriteCommandAction(Runnable runnable) { - WriteCommandAction.runWriteCommandAction(this.project.get(), runnable); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java similarity index 92% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapter.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java index 99dadda0..8d874234 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Document; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java similarity index 79% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapter.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java index 59169754..20888b55 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,9 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import com.intellij.openapi.util.TextRange; @@ -29,15 +28,15 @@ * * @author Phillip Webb */ -public class EclipseRegionAdapter extends Region { +class EclipseRegionAdapter extends Region { private static final IRegion[] NO_REGIONS = {}; - public EclipseRegionAdapter(TextRange range) { + EclipseRegionAdapter(TextRange range) { super(range.getStartOffset(), range.getLength()); } - public static IRegion[] asArray(Collection ranges) { + static IRegion[] asArray(List ranges) { if (ranges == null) { return NO_REGIONS; } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java new file mode 100644 index 00000000..a457072f --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java @@ -0,0 +1,103 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.formatter.intellij.formatting; + +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; + +import com.intellij.formatting.FormattingContext; +import com.intellij.formatting.service.AbstractDocumentFormattingService; +import com.intellij.formatting.service.FormattingService; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiFile; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; +import org.eclipse.text.edits.TextEdit; +import org.jetbrains.annotations.NotNull; + +import io.spring.format.formatter.intellij.state.State; +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.Formatter; + +/** + * {@link FormattingService} to apply Spring formatting conventions. + * + * @author Phillip Webb + */ +public class SpringJavaFormatFormattingService extends AbstractDocumentFormattingService { + + private static final String NORMALIZED_LINE_SEPARATOR = "\n"; + + private static final Set FEATURES = Set.of(Feature.FORMAT_FRAGMENTS); + + private static final FileType JAVA_FILE_TYPE = FileTypeManager.getInstance().getStdFileType("JAVA"); + + private final BiConsumer runAction; + + public SpringJavaFormatFormattingService() { + this(WriteCommandAction::runWriteCommandAction); + } + + SpringJavaFormatFormattingService(BiConsumer runAction) { + this.runAction = runAction; + } + + @Override + public @NotNull Set getFeatures() { + return FEATURES; + } + + @Override + public boolean canFormat(@NotNull PsiFile file) { + return JAVA_FILE_TYPE.equals(file.getFileType()) && State.get(file.getProject()) == State.ACTIVE; + } + + @Override + public void formatDocument(@NotNull Document document, @NotNull List formattingRanges, + @NotNull FormattingContext formattingContext, boolean canChangeWhiteSpaceOnly, boolean quickFormat) { + VirtualFile file = formattingContext.getVirtualFile(); + Path path = (file != null) ? file.toNioPath() : null; + JavaFormatConfig config = JavaFormatConfig.findFrom(path); + Formatter formatter = new Formatter(config); + String source = document.getText(); + formattingRanges = (!formattingRanges.isEmpty()) ? formattingRanges : List.of(TextRange.allOf(source)); + IRegion[] regions = EclipseRegionAdapter.asArray(formattingRanges); + TextEdit edit = formatter.format(source, regions, NORMALIZED_LINE_SEPARATOR); + applyEdit(formattingContext.getProject(), document, edit); + } + + private void applyEdit(Project project, Document document, TextEdit textEdit) { + this.runAction.accept(project, () -> { + try { + IDocument adapted = new EclipseDocumentAdapter(document); + textEdit.apply(adapted); + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + }); + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/FileMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java similarity index 88% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/FileMonitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java index cc93579c..ac930e50 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/FileMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -24,16 +24,16 @@ import com.intellij.openapi.vfs.VirtualFileMoveEvent; import com.intellij.openapi.vfs.VirtualFilePropertyEvent; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** - * {@link Monitor} that looks for a {@literal .springformat} file. + * {@link Monitor} that looks for a {@literal .springjavaformatconfig} file. * * @author Phillip Webb */ public class FileMonitor extends Monitor { - private static final String TRIGGER_FILE = ".springformat"; + private static final String TRIGGER_FILE = ".springjavaformatconfig"; private final VirtualFileManager fileManager; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java similarity index 83% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index a90c9ce6..6ad8d657 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,10 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import java.util.Collection; -import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.ExternalProjectInfo; @@ -27,13 +26,14 @@ import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener; import com.intellij.openapi.project.Project; import com.intellij.util.messages.MessageBusConnection; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.util.GradleConstants; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** - * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} declaration in - * the build.gradle file. + * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} + * declaration in the build.gradle file. * * @author Phillip Webb */ @@ -46,12 +46,19 @@ public class GradleMonitor extends Monitor { public GradleMonitor(Project project, Trigger trigger) { super(project, trigger); MessageBusConnection messageBus = project.getMessageBus().connect(); - messageBus.subscribe(ProjectDataImportListener.TOPIC, (path) -> check()); + messageBus.subscribe(ProjectDataImportListener.TOPIC, new ProjectDataImportListener() { + + @Override + public void onImportFinished(@Nullable String projectPath) { + check(); + } + + }); } private void check() { logger.info("Checking " + getProject().getName() + " for use of Spring Java Format"); - ProjectDataManager projectDataManager = ServiceManager.getService(ProjectDataManager.class); + ProjectDataManager projectDataManager = getProject().getService(ProjectDataManager.class); boolean hasFormatPlugin = hasFormatPlugin( projectDataManager.getExternalProjectsData(getProject(), GradleConstants.SYSTEM_ID)); getTrigger().updateState(hasFormatPlugin ? State.ACTIVE : State.NOT_ACTIVE); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/MavenMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java similarity index 93% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/MavenMonitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java index c0cab821..5af1f808 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/MavenMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import java.util.List; @@ -26,7 +26,7 @@ import org.jetbrains.idea.maven.project.MavenProjectsTree.Listener; import org.jetbrains.idea.maven.server.NativeMavenProjectHolder; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** * {@link Monitor} that looks for a {@code spring-javaformat-maven-plugin} declaration in diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java similarity index 93% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitor.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java index 81710cd5..ec69d85e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import com.intellij.openapi.project.Project; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitors.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java similarity index 94% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitors.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java index 33d1b7e1..5af61007 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Monitors.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; import java.util.ArrayList; import java.util.Arrays; @@ -24,7 +24,7 @@ import com.intellij.openapi.project.Project; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** * Utility class used to manage a collection of {@link Monitors}. Creates and manages diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Trigger.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java similarity index 73% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Trigger.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java index 10bbc5ba..8bab9300 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/codestyle/monitor/Trigger.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,9 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle.monitor; +package io.spring.format.formatter.intellij.monitor; + +import io.spring.format.formatter.intellij.state.State; /** * Trigger used to to update the state for this monitor. Triggers are thread safe and can @@ -30,21 +32,4 @@ public interface Trigger { */ void updateState(State state); - /** - * The desired state of the plugin for this monitor. - */ - enum State { - - /** - * The plugin should be active. - */ - ACTIVE, - - /** - * The plugin need not be active. - */ - NOT_ACTIVE - - } - } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java new file mode 100644 index 00000000..043de49c --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java @@ -0,0 +1,89 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.formatter.intellij.startup; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +import com.intellij.ide.util.PropertiesComponent; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; + +import io.spring.format.formatter.intellij.monitor.FileMonitor; +import io.spring.format.formatter.intellij.monitor.GradleMonitor; +import io.spring.format.formatter.intellij.monitor.MavenMonitor; +import io.spring.format.formatter.intellij.monitor.Monitors; +import io.spring.format.formatter.intellij.state.State; +import io.spring.format.formatter.intellij.ui.StatusIndicator; + +/** + * Spring Java Format IntelliJ support added to a {@link Project}. + * + * @author Phillip Webb + */ +class ManagedSpringJavaFormatProject { + + private static final String ACTIVE_PROPERTY = ManagedSpringJavaFormatProject.class.getName() + ".ACTIVE"; + + private static final Logger logger = Logger.getInstance(ManagedSpringJavaFormatProject.class); + + private final Project project; + + private final StatusIndicator statusIndicator; + + private final Lock lock = new ReentrantLock(); + + private Monitors monitors; + + private PropertiesComponent properties; + + protected ManagedSpringJavaFormatProject(Project project) { + logger.info("Initializing Spring Format for project " + project.getName()); + this.project = project; + this.statusIndicator = new StatusIndicator(project); + this.properties = PropertiesComponent.getInstance(project); + if (this.properties.getBoolean(ACTIVE_PROPERTY, false)) { + update(State.ACTIVE); + } + this.monitors = new Monitors(this.project, this::update, FileMonitor.factory(), MavenMonitor.factory(), + GradleMonitor.factory()); + Disposer.register(project, this::dispose); + } + + private void dispose() { + if (this.monitors != null) { + logger.info("Stopping monitors for " + this.project.getName()); + this.monitors.stop(); + this.monitors = null; + } + } + + private void update(State state) { + logger.info("Updating state of " + this.project.getName() + " to " + state); + this.lock.lock(); + try { + state.put(this.project); + ApplicationManager.getApplication().invokeLater(() -> this.statusIndicator.update(state)); + } + finally { + this.lock.unlock(); + } + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatStartupActivity.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java similarity index 71% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatStartupActivity.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java index 8005c961..4d9c4a98 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/SpringFormatStartupActivity.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,21 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij; +package io.spring.format.formatter.intellij.startup; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupActivity; /** - * {@link StartupActivity} hook for {@link SpringFormat}. + * {@link StartupActivity} hook for {@link ManagedSpringJavaFormatProject}. * * @author Phillip Webb */ -public class SpringFormatStartupActivity implements StartupActivity { +public class SpringJavaFormatStartupActivity implements StartupActivity { @Override public void runActivity(Project project) { - new SpringFormat(project); + new ManagedSpringJavaFormatProject(project); } } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java new file mode 100644 index 00000000..c093671b --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.formatter.intellij.state; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; + +/** + * The state of the plugin. + * + * @author Phillip Webb + */ +public enum State { + + /** + * The plugin is active. + */ + ACTIVE, + + /** + * The plugin is not active. + */ + NOT_ACTIVE; + + private static final Key KEY = Key.create(State.class.getName()); + + /** + * Put this state to the given project. + * @param project the project that should save the state + */ + public void put(Project project) { + project.putUserData(KEY, this); + } + + /** + * Return the state from the given project. + * @param project the project to check + * @return the state of the project + */ + public static State get(Project project) { + State state = (project != null) ? project.getUserData(KEY) : null; + return (state != null) ? state : NOT_ACTIVE; + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/StatusIndicator.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java similarity index 89% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/StatusIndicator.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java index e7a2ee89..85287af9 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/StatusIndicator.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij; +package io.spring.format.formatter.intellij.ui; import java.awt.event.MouseEvent; import java.util.concurrent.TimeUnit; @@ -30,26 +30,26 @@ import com.intellij.util.Consumer; import com.intellij.util.concurrency.AppExecutorUtil; -import io.spring.format.formatter.intellij.codestyle.monitor.Trigger.State; +import io.spring.format.formatter.intellij.state.State; /** * Indicator used to show when Spring Formatting is active. * * @author Phillip Webb */ -class StatusIndicator { +public class StatusIndicator { private final Project project; private Widget widget; - StatusIndicator(Project project) { + public StatusIndicator(Project project) { this.project = project; } public void update(State state) { WindowManager windowManager = WindowManager.getInstance(); - final StatusBar statusBar = windowManager.getStatusBar(this.project); + StatusBar statusBar = windowManager.getStatusBar(this.project); if (statusBar == null) { AppExecutorUtil.getAppScheduledExecutorService().schedule(() -> retryUpdate(state), 1, TimeUnit.SECONDS); return; diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml index ccbca400..21c74b0f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/META-INF/plugin.xml @@ -9,6 +9,7 @@ org.jetbrains.idea.maven org.jetbrains.plugins.gradle - + + diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java deleted file mode 100644 index b8ab5809..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/DelegatingCodeStyleManagerTests.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij.codestyle; - -import java.util.Collection; -import java.util.Collections; - -import com.intellij.lang.ASTNode; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.util.ThrowableRunnable; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * Tests for {@link DelegatingCodeStyleManager}. - * - * @author Phillip Webb - */ -public class DelegatingCodeStyleManagerTests { - - @Mock - private CodeStyleManager delegate; - - private DelegatingCodeStyleManager delegating; - - @Mock - private PsiElement element; - - @Mock - private PsiFile file; - - @Mock - private TextRange range; - - private Collection ranges; - - @Mock - private Document document; - - @Mock - private FileType fileType; - - @Mock - private ASTNode block; - - @Mock - private ASTNode node; - - @Mock - private ChangedRangesInfo changedRangesInfo; - - @BeforeEach - public void setup() { - MockitoAnnotations.initMocks(this); - this.delegating = new DelegatingCodeStyleManager(this.delegate); - this.ranges = Collections.singleton(mock(TextRange.class)); - } - - @Test - public void getDelegateShouldGetDelegate() throws Exception { - assertThat(this.delegating.getDelegate()).isEqualTo(this.delegate); - } - - @Test - public void getProjectShouldCallDelegate() throws Exception { - this.delegating.getProject(); - verify(this.delegate).getProject(); - } - - @Test - public void reformatShouldCallDelegate() throws Exception { - this.delegating.reformat(this.element); - verify(this.delegate).reformat(this.element); - } - - @Test - public void reformatWithCanChangeWhiteSpacesOnlyShouldCallDelegate() throws Exception { - this.delegating.reformat(this.element, true); - verify(this.delegate).reformat(this.element, true); - } - - @Test - public void reformatRangeShouldCallDelegate() throws Exception { - this.delegating.reformatRange(this.element, 12, 34); - verify(this.delegate).reformatRange(this.element, 12, 34); - } - - @Test - public void reformatRangeWithCanChangeWhiteSpacesOnlyShouldCallDelegate() throws Exception { - this.delegating.reformatRange(this.element, 12, 34, true); - verify(this.delegate).reformatRange(this.element, 12, 34, true); - } - - @Test - public void reformatTextShouldCallDelegate() throws Exception { - this.delegating.reformatText(this.file, 12, 34); - verify(this.delegate).reformatText(this.file, 12, 34); - } - - @Test - public void reformatTextWithRangeCollectionShouldCallDelegate() throws Exception { - this.delegating.reformatText(this.file, this.ranges); - verify(this.delegate).reformatText(this.file, this.ranges); - } - - @Test - public void reformatTextWithContextShouldCallDelegate() throws Exception { - this.delegating.reformatTextWithContext(this.file, this.ranges); - ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); - verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); - assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(this.ranges); - } - - @Test - public void reformatTextWithContextInfoShouldCallDelegate() throws Exception { - this.delegating.reformatTextWithContext(this.file, this.changedRangesInfo); - verify(this.delegate).reformatTextWithContext(this.file, this.changedRangesInfo); - } - - @Test - public void adjustLineIndentForFileWithRangeShouldCallDelegate() throws Exception { - this.delegating.adjustLineIndent(this.file, this.range); - verify(this.delegate).adjustLineIndent(this.file, this.range); - } - - @Test - public void adjustLineIndentForFileShouldCallDelegate() throws Exception { - this.delegating.adjustLineIndent(this.file, 123); - verify(this.delegate).adjustLineIndent(this.file, 123); - } - - @Test - public void adjustLineIndentForDocumentShouldCallDelegate() throws Exception { - this.delegating.adjustLineIndent(this.document, 123); - verify(this.delegate).adjustLineIndent(this.document, 123); - } - - @Test - @Deprecated - public void isLineToBeIndentedShouldCallDelegate() throws Exception { - this.delegating.isLineToBeIndented(this.file, 123); - verify(this.delegate).isLineToBeIndented(this.file, 123); - } - - @Test - public void getLineIndentForFileShouldCallDelegate() throws Exception { - this.delegating.getLineIndent(this.file, 123); - verify(this.delegate).getLineIndent(this.file, 123); - } - - @Test - public void getLineIndentForDocumentShouldCallDelegate() throws Exception { - this.delegating.getLineIndent(this.document, 123); - verify(this.delegate).getLineIndent(this.document, 123); - } - - @Test - @Deprecated - public void getIndentShouldCallDelegate() throws Exception { - this.delegating.getIndent("hello", this.fileType); - verify(this.delegate).getIndent("hello", this.fileType); - } - - @Test - @Deprecated - public void fillIndentShouldCallDelegate() throws Exception { - com.intellij.psi.codeStyle.Indent indent = mock(com.intellij.psi.codeStyle.Indent.class); - this.delegating.fillIndent(indent, this.fileType); - verify(this.delegate).fillIndent(indent, this.fileType); - } - - @Test - @Deprecated - public void zeroIndentShouldCallDelegate() throws Exception { - this.delegating.zeroIndent(); - verify(this.delegate).zeroIndent(); - } - - @Test - public void reformatNewlyAddedElementShouldCallDelegate() throws Exception { - this.delegating.reformatNewlyAddedElement(this.block, this.node); - verify(this.delegate).reformatNewlyAddedElement(this.block, this.node); - } - - @Test - public void isSequentialProcessingAllowedShouldCallDelegate() throws Exception { - this.delegating.isSequentialProcessingAllowed(); - verify(this.delegate).isSequentialProcessingAllowed(); - } - - @Test - public void performActionWithFormatterDisabledWithRunnableShouldCallDelegate() throws Exception { - Runnable runnable = mock(Runnable.class); - this.delegating.performActionWithFormatterDisabled(runnable); - verify(this.delegate).performActionWithFormatterDisabled(runnable); - } - - @Test - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void performActionWithFormatterDisabledWithThrowableRunnableShouldCallDelegate() throws Throwable { - ThrowableRunnable runnable = mock(ThrowableRunnable.class); - this.delegating.performActionWithFormatterDisabled(runnable); - verify(this.delegate).performActionWithFormatterDisabled(runnable); - } - - @Test - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void performActionWithFormatterDisabledWithComputableShouldCallDelegate() throws Exception { - Computable computable = mock(Computable.class); - this.delegating.performActionWithFormatterDisabled(computable); - verify(this.delegate).performActionWithFormatterDisabled(computable); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java deleted file mode 100644 index cfe25a39..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringCodeStyleManagerTests.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij.codestyle; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.ChangedRangesInfo; -import com.intellij.psi.codeStyle.CodeStyleManager; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; - -/** - * Tests for {@link SpringCodeStyleManager}. - * - * @author Phillip Webb - */ -public class SpringCodeStyleManagerTests { - - @Mock - private CodeStyleManager delegate; - - @Mock - private SpringReformatter springReformatter; - - private SpringCodeStyleManager styleManager; - - @Mock - private PsiFile file; - - @BeforeEach - public void setup() { - MockitoAnnotations.initMocks(this); - this.styleManager = new SpringCodeStyleManager(this.delegate, this.springReformatter); - } - - @Test - public void reformatTextWithOffsetWhenCantFormatShouldCallDelegate() { - given(this.springReformatter.canReformat(any())).willReturn(false); - this.styleManager.reformatText(this.file, 10, 20); - verify(this.delegate).reformatText(this.file, 10, 20); - } - - @Test - public void reformatTextWithOffsetWhenCanFormatShouldCallFormatter() { - given(this.springReformatter.canReformat(any())).willReturn(true); - Set ranges = new HashSet<>(Arrays.asList(new TextRange(10, 20))); - this.styleManager.reformatText(this.file, 10, 20); - verify(this.springReformatter).reformat(this.file, ranges); - verifyZeroInteractions(this.delegate); - } - - @Test - public void reformatTextWithRangeWhenCantFormatShouldCallDelegate() { - given(this.springReformatter.canReformat(any())).willReturn(false); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatText(this.file, ranges); - verify(this.delegate).reformatText(this.file, ranges); - } - - @Test - public void reformatTextWithRangeWhenCanFormatShouldCallFormatter() { - given(this.springReformatter.canReformat(any())).willReturn(true); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatText(this.file, ranges); - verify(this.springReformatter).reformat(this.file, ranges); - verifyZeroInteractions(this.delegate); - } - - @Test - public void reformatTextWithContextWhenCantFormatShouldCallDelegate() { - given(this.springReformatter.canReformat(any())).willReturn(false); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatTextWithContext(this.file, ranges); - ArgumentCaptor changedRanges = ArgumentCaptor.forClass(ChangedRangesInfo.class); - verify(this.delegate).reformatTextWithContext(eq(this.file), changedRanges.capture()); - assertThat(changedRanges.getValue().allChangedRanges).containsExactlyElementsOf(ranges); - } - - @Test - public void reformatTextWithContextWhenCanFormatShouldCallFormatter() { - given(this.springReformatter.canReformat(any())).willReturn(true); - Collection ranges = Arrays.asList(new TextRange(10, 20)); - this.styleManager.reformatTextWithContext(this.file, ranges); - verify(this.springReformatter).reformat(this.file, ranges); - verifyZeroInteractions(this.delegate); - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java deleted file mode 100644 index a37ddce7..00000000 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/SpringReformatterTests.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.formatter.intellij.codestyle; - -import java.util.Arrays; -import java.util.Collection; -import java.util.function.Supplier; - -import com.intellij.openapi.application.Application; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.util.IncorrectOperationException; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -/** - * Tests for {@link SpringReformatter}. - * - * @author Phillip Webb - */ -public class SpringReformatterTests { - - @Mock - private Project project; - - @Mock - private Application application; - - @Mock - private PsiDocumentManager documentManager; - - private SpringReformatter reformatter; - - @Mock - private PsiFile file; - - @Mock - VirtualFile virtualFile; - - private Collection ranges = Arrays.asList(new TextRange(10, 20)); - - @BeforeEach - public void setup() { - MockitoAnnotations.initMocks(this); - given(this.file.getVirtualFile()).willReturn(this.virtualFile); - this.reformatter = new TestSpringReformatter(() -> this.project, () -> this.application, - () -> this.documentManager); - } - - @Test - public void reformatShouldAssertWriteAccess() throws Exception { - given(this.file.isWritable()).willReturn(true); - this.reformatter.reformat(this.file, this.ranges); - verify(this.application).assertWriteAccessAllowed(); - } - - @Test - public void reformatShouldCommitAllDocuments() throws Exception { - given(this.file.isWritable()).willReturn(true); - this.reformatter.reformat(this.file, this.ranges); - verify(this.documentManager).commitAllDocuments(); - } - - @Test - public void reformatWhenFileIsNotWriteableShouldThrow() throws Exception { - assertThatExceptionOfType(IncorrectOperationException.class) - .isThrownBy(() -> this.reformatter.reformat(this.file, this.ranges)); - } - - @Test - public void reformatShouldReformatDocument() throws Exception { - given(this.file.isWritable()).willReturn(true); - Document document = mock(Document.class); - String text = "public class Hello {}"; - given(document.getText()).willReturn(text); - given(this.documentManager.getDocument(this.file)).willReturn(document); - this.reformatter.reformat(this.file, Arrays.asList(new TextRange(0, text.length()))); - verify(document).replaceString(20, 20, "\n\n"); - verify(this.documentManager).commitDocument(document); - } - - static class TestSpringReformatter extends SpringReformatter { - - TestSpringReformatter(Supplier project, Supplier application, - Supplier documentManager) { - super(project, application, documentManager); - } - - @Override - protected void runWriteCommandAction(Runnable runnable) { - runnable.run(); - } - - } - -} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java similarity index 83% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java index 4d9b4b4d..09a8a0d9 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import com.intellij.openapi.editor.Document; import org.junit.jupiter.api.Test; @@ -29,10 +29,10 @@ * * @author Phillip Webb */ -public class EclipseDocumentAdapterTests { +class EclipseDocumentAdapterTests { @Test - public void createShouldUseDocumentText() throws Exception { + void createUsesDocumentText() throws Exception { Document intellijDocument = mock(Document.class); given(intellijDocument.getText()).willReturn("hello"); EclipseDocumentAdapter adapter = new EclipseDocumentAdapter(intellijDocument); @@ -40,7 +40,7 @@ public void createShouldUseDocumentText() throws Exception { } @Test - public void replaceShouldApplyToIntellijDocument() throws Exception { + void replaceAppliesToIntellijDocument() throws Exception { Document intellijDocument = mock(Document.class); given(intellijDocument.getText()).willReturn("hello"); EclipseDocumentAdapter adapter = new EclipseDocumentAdapter(intellijDocument); @@ -48,5 +48,4 @@ public void replaceShouldApplyToIntellijDocument() throws Exception { assertThat(adapter.get()).isEqualTo("help"); verify(intellijDocument).replaceString(3, 5, "p"); } - } diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java similarity index 81% rename from spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java rename to spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java index b281ad5c..873d7fec 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/codestyle/EclipseRegionAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.format.formatter.intellij.codestyle; +package io.spring.format.formatter.intellij.formatting; import java.util.Arrays; import java.util.List; @@ -33,25 +33,25 @@ public class EclipseRegionAdapterTests { @Test - public void getOffsetShouldReturnStartOffset() throws Exception { + void getOffsetReturnsStartOffset() throws Exception { IRegion region = new EclipseRegionAdapter(new TextRange(10, 20)); assertThat(region.getOffset()).isEqualTo(10); } @Test - public void getLengthShouldReturnLength() throws Exception { + void getLengthReturnsLength() throws Exception { IRegion region = new EclipseRegionAdapter(new TextRange(10, 20)); assertThat(region.getLength()).isEqualTo(10); } @Test - public void asArrayWhenCollectionIsNullShouldReturnEmptyArray() throws Exception { + void asArrayWhenCollectionIsNullReturnsEmptyArray() throws Exception { IRegion[] regions = EclipseRegionAdapter.asArray(null); assertThat(regions).isNotNull().isEmpty(); } @Test - public void asArrayShouldReturnArray() throws Exception { + void asArrayReturnsArray() throws Exception { List ranges = Arrays.asList(new TextRange(10, 20), new TextRange(30, 35)); IRegion[] regions = EclipseRegionAdapter.asArray(ranges); assertThat(regions).hasSize(2); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java new file mode 100644 index 00000000..c49bae99 --- /dev/null +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.formatter.intellij.formatting; + +import java.util.Collections; + +import com.intellij.formatting.FormattingContext; +import com.intellij.formatting.service.FormattingService.Feature; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.fileTypes.PlainTextFileType; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import org.junit.jupiter.api.Test; + +import io.spring.format.formatter.intellij.state.State; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +/** + * Tests for {@link SpringJavaFormatFormattingService}. + * + * @author Phillip Webb + */ +class SpringJavaFormatFormattingServiceTests { + + private SpringJavaFormatFormattingService service = new SpringJavaFormatFormattingService( + (project, runnable) -> runnable.run()); + + @Test + void getFeaturesReturnsFormatFragments() { + assertThat(this.service.getFeatures()).containsExactly(Feature.FORMAT_FRAGMENTS); + } + + @Test + void canFormatWhenNotJavaReturnsFalse() { + FileType fileType = PlainTextFileType.INSTANCE; + PsiFile file = mockFile(fileType, State.ACTIVE); + assertThat(this.service.canFormat(file)).isFalse(); + } + + @Test + void canFormatWhenJavaFileAndNotActiveReturnsFalse() { + FileType fileType = FileTypeManager.getInstance().getStdFileType("JAVA"); + PsiFile file = mockFile(fileType, State.NOT_ACTIVE); + assertThat(this.service.canFormat(file)).isFalse(); + } + + @Test + void canFormatWhenJavaFileAndActiveReturnsTrue() { + FileType fileType = FileTypeManager.getInstance().getStdFileType("JAVA"); + PsiFile file = mockFile(fileType, State.ACTIVE); + assertThat(this.service.canFormat(file)).isTrue(); + } + + @Test + void formatDocumentAppliesFormatting() { + Document document = mock(Document.class); + String text = "public class Hello {}"; + given(document.getText()).willReturn(text); + FormattingContext formattingContext = mock(FormattingContext.class); + this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false); + verify(document).replaceString(20, 20, "\n\n"); + } + + private PsiFile mockFile(FileType fileType, State state) { + PsiFile file = mock(PsiFile.class); + given(file.getFileType()).willReturn(fileType); + Project project = mock(Project.class); + given(project.getUserData(any())).willReturn(state); + given(file.getProject()).willReturn(project); + return file; + } + +} diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 2d474eb4..d49d6851 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -13,9 +13,10 @@ Spring JavaFormat IntelliJ IDEA Runtime ${basedir}/../.. - https://download.jetbrains.com/idea/ideaIC-2021.2.tar.gz - https://github.com/JetBrains/intellij-community/archive/idea/212.4746.92.zip - idea-IC-212.4746.92 + https://download.jetbrains.com/idea/ideaIC-2022.3.2.tar.gz + https://github.com/JetBrains/intellij-community/archive/idea/223.8617.56.zip + ${project.build.directory}/intellij-source + idea-IC-223.8617.56 @@ -66,64 +67,71 @@ - + + dest="${project.build.directory}/intellij"> + + src="${intellij.source.directory}.zip" + dest="${intellij.source.directory}"> - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -134,150 +142,136 @@ maven-install-plugin - install-intellij-annotations - install - false - - install-file - - - ${project.build.directory}/intellij/annotations.jar - io.spring.javaformat.intellij.idea - annotations - ${project.version} - jar - true - - - - install-intellij-platform-api + install-intellij-util install false install-file - ${project.build.directory}/intellij/platform-api.jar - ${project.build.directory}/intellij-source/platform-api-sources.zip + ${project.build.directory}/intellij/util.jar + ${intellij.source.directory}/util-sources.zip io.spring.javaformat.intellij.idea - platform-api + util ${project.version} jar true - install-intellij-platform-impl + install-intellij-util_rt install false install-file - ${project.build.directory}/intellij/platform-impl.jar - ${project.build.directory}/intellij-source/platform-impl-sources.zip + ${project.build.directory}/intellij/util_rt.jar + ${intellij.source.directory}/util_rt-sources.zip io.spring.javaformat.intellij.idea - platform-impl + util_rt ${project.version} jar true - install-intellij-util + install-intellij-app install false install-file - ${project.build.directory}/intellij/util.jar - ${project.build.directory}/intellij-source/util-sources.zip + ${project.build.directory}/intellij/app.jar + ${intellij.source.directory}/app-sources.zip io.spring.javaformat.intellij.idea - util + app ${project.version} jar true - install-intellij-idea + install-intellij-maven install false install-file - ${project.build.directory}/intellij/idea.jar + ${project.build.directory}/intellij/maven.jar + ${intellij.source.directory}/maven-sources.zip io.spring.javaformat.intellij.idea - idea + maven ${project.version} jar true - install-intellij-maven + install-intellij-maven-server install false install-file - ${project.build.directory}/intellij/maven.jar - ${project.build.directory}/intellij-source/maven-sources.zip + ${project.build.directory}/intellij/maven-server.jar + ${intellij.source.directory}/maven-server-sources.zip io.spring.javaformat.intellij.idea - maven + maven-server ${project.version} jar true - install-intellij-maven-server-api + install-intellij-gradle install false install-file - ${project.build.directory}/intellij/maven-server-api.jar + ${project.build.directory}/intellij/gradle.jar + ${intellij.source.directory}/gradle-sources.zip io.spring.javaformat.intellij.idea - maven-server-api + gradle ${project.version} jar true - install-intellij-gradle + install-intellij-gradle-tooling-extension-api install false install-file - ${project.build.directory}/intellij/gradle.jar - ${project.build.directory}/intellij-source/gradle-sources.zip + ${project.build.directory}/intellij/gradle-tooling-extension-api.jar + ${intellij.source.directory}/gradle-tooling-extension-api-sources.zip io.spring.javaformat.intellij.idea - gradle + gradle-tooling-extension-api ${project.version} jar true - install-intellij-gradle-tooling-extension-api + install-intellij-jps-model install false install-file - ${project.build.directory}/intellij/gradle-tooling-extension-api.jar - ${project.build.directory}/intellij-source/gradle-tooling-extension-api-sources.zip + ${project.build.directory}/intellij/jps-model.jar + ${intellij.source.directory}/jps-model-sources.zip io.spring.javaformat.intellij.idea - gradle-tooling-extension-api + jps-model ${project.version} jar true @@ -292,7 +286,7 @@ ${project.build.directory}/intellij/gradle-tooling-extension-impl.jar - ${project.build.directory}/intellij-source/gradle-tooling-extension-impl-sources.zip + ${intellij.source.directory}/gradle-tooling-extension-impl-sources.zip io.spring.javaformat.intellij.idea gradle-tooling-extension-impl ${project.version} From 4adf445a55cf4b13abe804c0d45b84406de4e934 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 7 Feb 2023 21:20:48 -0800 Subject: [PATCH 018/136] Remove old IntelliJ dependency See gh-359 --- .../spring-javaformat-intellij-idea-plugin/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 5b0b83d1..f1743282 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -58,12 +58,6 @@ ${project.version} provided - - io.spring.javaformat.intellij.idea - platform-impl - ${project.version} - provided - io.spring.javaformat.intellij.idea util From 836c1a03ae6a41f82f8ed452e0bc8a9881680364 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 13 Feb 2023 16:36:24 -0800 Subject: [PATCH 019/136] Polish tests --- .../javaformat/eclipse/MessagesTests.java | 4 +-- .../ProjectPropertiesTests.java | 10 +++---- .../ProjectSettingsFileTests.java | 10 +++---- .../ProjectSettingsFilesLocatorTests.java | 28 +++++++++---------- .../ProjectSettingsFilesTests.java | 10 +++---- .../javaformat/gradle/CheckTaskTests.java | 19 +++++++------ .../javaformat/gradle/FormatTaskTests.java | 12 ++++---- .../javaformat/formatter/FileEditTests.java | 14 +++++----- .../formatter/FileFormatterTests.java | 18 +++++++----- .../javaformat/formatter/FormatterTests.java | 6 ++-- .../javaformat/formatter/JavaContainer.java | 4 +-- 11 files changed, 70 insertions(+), 65 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java index 32020b10..2db40cd9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ public class MessagesTests { @Test - public void bindHasCorrectMessage() { + void bindHasCorrectMessage() { String message = NLS.bind(Messages.springFormatSettingsImportError, "reason"); assertThat(message).isEqualTo("Error importing project specific settings: reason"); } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 0c7ed16b..3ab28f27 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,7 +44,7 @@ public class ProjectPropertiesTests { public File temp; @Test - public void addFromFolderAddsEclipseProperties() throws IOException { + void addFromFolderAddsEclipseProperties() throws IOException { File file = new File(this.temp, "eclipse.properties"); writeProperties(file, "2018"); ProjectProperties properties = new ProjectProperties(); @@ -53,7 +53,7 @@ public void addFromFolderAddsEclipseProperties() throws IOException { } @Test - public void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { + void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { ProjectProperties properties = new ProjectProperties(); File folder1 = new File(this.temp, "1"); folder1.mkdirs(); @@ -67,7 +67,7 @@ public void addFromFolderWhenAlreadySetDoesNotOverwrite() throws IOException { } @Test - public void addFromEmptyFolderUsesDefaults() throws IOException { + void addFromEmptyFolderUsesDefaults() throws IOException { ProjectProperties properties = new ProjectProperties(); properties.addFromFolder(this.temp); String currentYear = String.valueOf(LocalDate.now().getYear()); @@ -75,7 +75,7 @@ public void addFromEmptyFolderUsesDefaults() throws IOException { } @Test - public void getModifiedContentReplacesCopyrightYear() throws IOException { + void getModifiedContentReplacesCopyrightYear() throws IOException { String year = "2016-2020"; File file = new File(this.temp, "eclipse.properties"); writeProperties(file, year); diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java index 4a0f3128..31bda8ff 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,21 +39,21 @@ public class ProjectSettingsFileTests { public File temp; @Test - public void fromFileAdaptsFile() throws Exception { + void fromFileAdaptsFile() throws Exception { File file = new File(this.temp, "file"); writeText(file, "test"); ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromFile(file); assertThat(projectSettingsFile.getName()).isEqualTo(file.getName()); assertThat(projectSettingsFile.getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); } @Test - public void fromClasspathResourceAdaptsResource() throws Exception { + void fromClasspathResourceAdaptsResource() throws Exception { ProjectSettingsFile projectSettingsFile = ProjectSettingsFile.fromClasspath(getClass(), "test.txt"); assertThat(projectSettingsFile.getName()).isEqualTo("test.txt"); assertThat(projectSettingsFile.getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("test".getBytes())); } private void writeText(File file, String s) throws FileNotFoundException { diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index ea0afe78..c9261ead 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,23 +45,23 @@ public class ProjectSettingsFilesLocatorTests { public File temp; @Test - public void locateSettingsFilesWhenNoFoldersShouldReturnDefault() throws IOException { + void locateSettingsFilesWhenNoFoldersReturnsDefault() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); - assertThat(files.iterator()).extracting(ProjectSettingsFile::getName).containsOnly("org.eclipse.jdt.core.prefs", - "org.eclipse.jdt.ui.prefs"); + assertThat(files.iterator()).extracting(ProjectSettingsFile::getName) + .containsOnly("org.eclipse.jdt.core.prefs", "org.eclipse.jdt.ui.prefs"); } @Test - public void locateSettingsFilesOnlyFindPrefs() throws Exception { + void locateSettingsFilesOnlyFindPrefs() throws Exception { writeFile(this.temp, "foo.prefs"); writeFile(this.temp, "bar.notprefs"); ProjectSettingsFiles files = new ProjectSettingsFilesLocator(this.temp).locateSettingsFiles(); - assertThat(files.iterator()).extracting(ProjectSettingsFile::getName).containsOnly("org.eclipse.jdt.core.prefs", - "org.eclipse.jdt.ui.prefs", "foo.prefs"); + assertThat(files.iterator()).extracting(ProjectSettingsFile::getName) + .containsOnly("org.eclipse.jdt.core.prefs", "org.eclipse.jdt.ui.prefs", "foo.prefs"); } @Test - public void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Exception { + void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Exception { File folder1 = new File(this.temp, "1"); writeFile(folder1, "foo.prefs", "foo1"); File folder2 = new File(this.temp, "2"); @@ -71,32 +71,32 @@ public void locateSettingsFilesWhenMultipleFoldersFindsInEarliest() throws Excep Map found = new LinkedHashMap<>(); files.iterator().forEachRemaining((f) -> found.put(f.getName(), f)); assertThat(found.get("foo.prefs").getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("foo1".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("foo1".getBytes())); assertThat(found.get("org.eclipse.jdt.core.prefs").getContent(JavaFormatConfig.DEFAULT)) - .hasSameContentAs(new ByteArrayInputStream("core2".getBytes())); + .hasSameContentAs(new ByteArrayInputStream("core2".getBytes())); } @Test - public void jdtCorePrefsFormatterWhenDefaultShouldUseTabs() throws IOException { + void jdtCorePrefsFormatterWhenDefaultUsesTabs() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); try (InputStream content = file.getContent(JavaFormatConfig.DEFAULT)) { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); } } @Test - public void jdtCorePrefsFormatterWhenSpacesShouldUseSpaces() throws IOException { + void jdtCorePrefsFormatterWhenSpacesUsesSpaces() throws IOException { ProjectSettingsFiles files = new ProjectSettingsFilesLocator().locateSettingsFiles(); ProjectSettingsFile file = get(files, "org.eclipse.jdt.core.prefs"); try (InputStream content = file.getContent(JavaFormatConfig.of(JavaBaseline.V8, IndentationStyle.SPACES))) { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk8.spaces"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk8.spaces"); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index cdc6b297..a75b92b1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,14 +52,14 @@ public class ProjectSettingsFilesTests { public File temp; @Test - public void iteratorIteratesFiles() throws Exception { + void iteratorIteratesFiles() throws Exception { ProjectSettingsFile file = ProjectSettingsFile.fromFile(new File(this.temp, "file.prefs")); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); assertThat(files).containsOnly(file); } @Test - public void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { + void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { ProjectSettingsFile file = createPrefsFile(); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); IProject project = mock(IProject.class); @@ -78,7 +78,7 @@ public void applyToProjectWithoutFileCopiesToDotSettings() throws Exception { } @Test - public void applyToProjectWithFileMergesToDotSettings() throws Exception { + void applyToProjectWithFileMergesToDotSettings() throws Exception { ProjectSettingsFile file = createPrefsFile(); ProjectSettingsFiles files = new ProjectSettingsFiles(Collections.singleton(file), new ProjectProperties()); IProject project = mock(IProject.class); @@ -87,7 +87,7 @@ public void applyToProjectWithFileMergesToDotSettings() throws Exception { given(project.getFile(".settings/foo.prefs")).willReturn(projectFile); given(projectFile.exists()).willReturn(true); given(projectFile.getContents(true)) - .willReturn(new ByteArrayInputStream("a=b\n".getBytes(StandardCharsets.UTF_8))); + .willReturn(new ByteArrayInputStream("a=b\n".getBytes(StandardCharsets.UTF_8))); ByteArrayOutputStream out = new ByteArrayOutputStream(); will((invocation) -> { invocation.getArgument(0, InputStream.class).transferTo(out); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 6e38db7b..a5554177 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,13 +52,13 @@ public class CheckTaskTests { public File temp; @Test - public void checkOk() throws IOException { + void checkOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/check-ok").build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @Test - public void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws IOException { + void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -67,7 +67,7 @@ public void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws I } @Test - public void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { + void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { copyFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); @@ -79,7 +79,7 @@ public void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSu } @Test - public void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInvocationFails() throws IOException { + void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInvocationFails() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -90,7 +90,7 @@ public void whenFirstInvocationSucceedsAndIndentationStyleIsChangedThenSecondInv } @Test - public void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvocationSucceeds() throws IOException { + void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvocationSucceeds() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-spaces"); BuildResult result = gradleBuild.buildAndFail("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); @@ -101,7 +101,8 @@ public void whenFirstInvocationFailsAndIndentationStyleIsChangedThenSecondInvoca } @Test - public void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocationSucceedsAndThirdIsUpToDate() throws IOException { + void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocationSucceedsAndThirdIsUpToDate() + throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-ok"); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -114,13 +115,13 @@ public void whenFirstInvocationSucceedsAndJavaBaselineIsChangedThenSecondInvocat } @Test - public void checkBad() throws IOException { + void checkBad() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/check-bad").buildAndFail("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); } @Test - public void whenFirstInvocationFailsThenSecondInvocationFails() throws IOException { + void whenFirstInvocationFailsThenSecondInvocationFails() throws IOException { GradleBuild gradleBuild = this.gradleBuild.source("src/test/resources/check-bad"); BuildResult result = gradleBuild.buildAndFail("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index 023b4d0d..ed1648cc 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,7 +44,7 @@ public class FormatTaskTests { private final GradleBuild gradleBuild = new GradleBuild(); @Test - public void checkOk() throws IOException { + void checkOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/format").build("format"); assertThat(result.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File formattedFile = new File(this.gradleBuild.getProjectDir(), "src/main/java/simple/Simple.java"); @@ -53,7 +53,7 @@ public void checkOk() throws IOException { } @Test - public void checkUpToDate() throws IOException { + void checkUpToDate() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); // Format that changes files assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -64,7 +64,7 @@ public void checkUpToDate() throws IOException { } @Test - public void notUpToDateWhenJavaBaselineChanges() throws IOException { + void notUpToDateWhenJavaBaselineChanges() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); // Format that changes files assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -78,7 +78,7 @@ public void notUpToDateWhenJavaBaselineChanges() throws IOException { } @Test - public void notUpToDateWhenIndentationStyleChanges() throws IOException { + void notUpToDateWhenIndentationStyleChanges() throws IOException { GradleRunner runner = this.gradleBuild.source("src/test/resources/format").prepareRunner("format"); // Format that changes files assertThat(runner.build().task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); @@ -92,7 +92,7 @@ public void notUpToDateWhenIndentationStyleChanges() throws IOException { } @Test - public void checkSpacesOk() throws IOException { + void checkSpacesOk() throws IOException { BuildResult result = this.gradleBuild.source("src/test/resources/format-spaces").build("format"); assertThat(result.task(":formatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); File formattedFile = new File(this.gradleBuild.getProjectDir(), "src/main/java/simple/Simple.java"); diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java index 59c6d57a..79570f7d 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,7 +51,7 @@ public class FileEditTests { private FileEdit fileEdit; @BeforeEach - public void setup() throws IOException { + void setup() throws IOException { this.source = new File(this.temp, "source.txt"); this.expected = new File(this.temp, "expected.txt"); Files.copy(new File("src/test/resources/source/javadoc-top.txt").toPath(), this.source.toPath(), @@ -64,17 +64,17 @@ public void setup() throws IOException { } @Test - public void getFileShouldReturnFile() throws Exception { + void getFileReturnsFile() throws Exception { assertThat(this.fileEdit.getFile()).isEqualTo(this.source); } @Test - public void hasEditsWhenHasEditsShouldReturnTrue() throws Exception { + void hasEditsWhenHasEditsReturnsTrue() throws Exception { assertThat(this.fileEdit.hasEdits()).isTrue(); } @Test - public void hasEditsWhenHasNoEditsShouldReturnFalse() throws Exception { + void hasEditsWhenHasNoEditsReturnsFalse() throws Exception { String content = read(this.expected); this.textEdit = new Formatter().format(content); this.fileEdit = new FileEdit(this.source, UTF_8, content, this.textEdit); @@ -82,7 +82,7 @@ public void hasEditsWhenHasNoEditsShouldReturnFalse() throws Exception { } @Test - public void saveShouldSaveContent() throws Exception { + void saveSavesContent() throws Exception { String expected = read(this.expected); assertThat(read(this.source)).isNotEqualTo(expected); this.fileEdit.save(); @@ -90,7 +90,7 @@ public void saveShouldSaveContent() throws Exception { } @Test - public void getFormattedContentShouldReturnFormattedContent() throws Exception { + void getFormattedContentReturnsFormattedContent() throws Exception { String expected = read(this.expected); assertThat(this.fileEdit.getFormattedContent()).isEqualTo(expected); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index dc49c4f6..5c43641b 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,23 +36,27 @@ public class FileFormatterTests extends AbstractFormatterTests { @ParameterizedTest @MethodSource("items") - public void formatFilesFromIteratorShouldFormatFile(Item item) throws Exception { + void formatFilesFromIteratorFormatsFile(Item item) throws Exception { FileEdit edit = new FileFormatter(item.getConfig()) - .formatFiles(Arrays.asList(item.getSource()), StandardCharsets.UTF_8).findFirst().get(); + .formatFiles(Arrays.asList(item.getSource()), StandardCharsets.UTF_8) + .findFirst() + .get(); assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); } @ParameterizedTest @MethodSource("items") - public void formatFilesFromStreamShouldFormatFile(Item item) throws Exception { + void formatFilesFromStreamFormatsFile(Item item) throws Exception { FileEdit edit = new FileFormatter(item.getConfig()) - .formatFiles(Arrays.asList(item.getSource()).stream(), StandardCharsets.UTF_8).findFirst().get(); + .formatFiles(Arrays.asList(item.getSource()).stream(), StandardCharsets.UTF_8) + .findFirst() + .get(); assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); } @ParameterizedTest @MethodSource("items") - public void formatFileShouldFormatFile(Item item) throws Exception { + void formatFileFormatsFile(Item item) throws Exception { File source = item.getSource(); FileEdit edit = new FileFormatter(item.getConfig()).formatFile(source, StandardCharsets.UTF_8); String formattedContent = edit.getFormattedContent(); @@ -68,7 +72,7 @@ public void formatFileShouldFormatFile(Item item) throws Exception { assertThat(formattedContent).isEqualTo(expected); } - public static Item[] items() { + static Item[] items() { return items(null); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java index b847db7a..d6af9c71 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java @@ -33,7 +33,7 @@ public class FormatterTests extends AbstractFormatterTests { @ParameterizedTest @MethodSource("items") - public void format(Item item) throws Exception { + void format(Item item) throws Exception { String sourceContent = read(item.getSource()); String expectedContent = read(item.getExpected()); String formattedContent = format(item.getConfig(), sourceContent); @@ -44,7 +44,7 @@ public void format(Item item) throws Exception { print("Got", formattedContent); System.out.println("========================================"); assertThat(formattedContent).isEqualTo(expectedContent) - .describedAs("Formatted content does not match for " + item.getSource()); + .describedAs("Formatted content does not match for " + item.getSource()); } } @@ -55,7 +55,7 @@ private String format(JavaFormatConfig config, String sourceContent) throws Exce return document.get(); } - public static Item[] items() { + static Item[] items() { return items("FormatterTests-expected"); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java index 9632f95e..9eacfbc6 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ */ public class JavaContainer extends GenericContainer { - public JavaContainer(String version) { + JavaContainer(String version) { super("bellsoft/liberica-openjdk-debian:" + version); } From 5b2036fd857a9eae51bb2cf7ed38dde4fb71d536 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 19:23:46 -0800 Subject: [PATCH 020/136] Polish CONTRIBUTING.adoc --- CONTRIBUTING.adoc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 055b745e..93f7b6d3 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -108,6 +108,7 @@ image::.github/images/setup-idea-dependency.png[Setup IntelliJ IDEA Dependencies === Setting up IntelliJ IDEA Plugin Development + ==== Download Images To develop the `spring-javaformat-intellij-idea-plugin` module, you need an IntelliJ IDEA application on your local machine. @@ -185,7 +186,14 @@ Under `spring-javaformat` the following projects are defined: * `spring-javaformat-checkstyle` - The checkstyle plugin * `spring-javaformat-formatter` - The main formatter code -* `spring-javaformat-formatter-eclipse` - The eclipse formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-test-support` - Support classes for tests +* `spring-javaformat-formatter-tests` - Tests for the formatter (external so that they we can test Java 8 and 11) +* `spring-javaformat-formatter-shader` - Shader support classes +* `spring-javaformat-formatter-shaded` - A shaded version of the formatter with all dependencies included +* `spring-javaformat-formatter-eclipse-jdk8` - The eclipse JDK 8 formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-eclipse-jdk11` - The eclipse JDK 11 formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-eclipse-jdt-jdk8` - The eclipse JDT import for JDK 8 +* `spring-javaformat-formatter-eclipse-jdt-jdk11` - The eclipse JDT import for JDK 8 * `spring-javaformat-formatter-eclipse-rewriter` - Internal utility used to modify eclipse code * `spring-javaformat-formatter-eclipse-runtime` - Eclipse runtime JAR for use when running outside of Eclipse From 2a1f20391d491fa731a1a10d6716fbcf58f5fbed Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 18:21:24 -0800 Subject: [PATCH 021/136] Add StreamsFormatter Add a new `StreamsFormatter` class which is similar to `FileFormatter` but designed to work with `java.io` streams. Closes gh-361 --- .../formatter/StreamsEditTests.java | 114 ++++++++++++++++ .../formatter/StreamsFormatterTests.java | 68 ++++++++++ .../io/spring/javaformat/formatter/Edit.java | 59 +++++++++ .../spring/javaformat/formatter/FileEdit.java | 36 ++--- .../javaformat/formatter/FileFormatter.java | 18 +-- .../javaformat/formatter/StreamsEdit.java | 73 +++++++++++ .../formatter/StreamsFormatter.java | 124 ++++++++++++++++++ 7 files changed, 455 insertions(+), 37 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java new file mode 100644 index 00000000..be73afcc --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java @@ -0,0 +1,114 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; + +import org.eclipse.text.edits.TextEdit; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link StreamsEdit}. + * + * @author Phillip Webb + */ +public class StreamsEditTests { + + private static final Charset UTF_8 = StandardCharsets.UTF_8; + + @TempDir + public File temp; + + private File source; + + private File expected; + + private TextEdit textEdit; + + private StreamsEdit streamsEdit; + + @BeforeEach + void setup() throws IOException { + this.source = new File(this.temp, "source.txt"); + this.expected = new File(this.temp, "expected.txt"); + Files.copy(new File("src/test/resources/source/javadoc-top.txt").toPath(), this.source.toPath(), + StandardCopyOption.REPLACE_EXISTING); + Files.copy(new File("src/test/resources/expected/javadoc-top.txt").toPath(), this.expected.toPath(), + StandardCopyOption.REPLACE_EXISTING); + String content = read(this.source); + this.textEdit = new Formatter().format(content); + this.streamsEdit = new StreamsEdit(content, this.textEdit); + } + + @Test + void hasEditsWhenHasEditsReturnsTrue() throws Exception { + assertThat(this.streamsEdit.hasEdits()).isTrue(); + } + + @Test + void hasEditsWhenHasNoEditsReturnsFalse() throws Exception { + String content = read(this.expected); + this.textEdit = new Formatter().format(content); + this.streamsEdit = new StreamsEdit(content, this.textEdit); + assertThat(this.streamsEdit.hasEdits()).isFalse(); + } + + @Test + void writeToOutputStreamWritesContent() throws Exception { + String expected = read(this.expected); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + this.streamsEdit.writeTo(outputStream); + assertThat(outputStream.toByteArray()).isEqualTo(expected.getBytes(UTF_8)); + } + + @Test + void writeToOutputStreamWithCharsetWritesContent() throws IOException { + String expected = read(this.expected); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + this.streamsEdit.writeTo(outputStream, UTF_8); + assertThat(outputStream.toByteArray()).isEqualTo(expected.getBytes(UTF_8)); + } + + @Test + void writeToAppendableWritesContent() throws IOException { + String expected = read(this.expected); + StringBuilder output = new StringBuilder(); + this.streamsEdit.writeTo(output); + assertThat(output.toString()).isEqualTo(expected); + } + + @Test + void getFormattedContentReturnsFormattedContent() throws Exception { + String expected = read(this.expected); + assertThat(this.streamsEdit.getFormattedContent()).isEqualTo(expected); + } + + private String read(File file) throws IOException { + return new String(Files.readAllBytes(file.toPath()), UTF_8); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java new file mode 100644 index 00000000..34477c47 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java @@ -0,0 +1,68 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link StreamsFormatter}. + * + * @author Phillip Webb + */ +public class StreamsFormatterTests extends AbstractFormatterTests { + + @ParameterizedTest + @MethodSource("items") + void formatInputStreamFormatsFile(Item item) throws Exception { + try (InputStream inputStream = new FileInputStream(item.getSource())) { + StreamsEdit edit = new StreamsFormatter(item.getConfig()).format(inputStream); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); + } + } + + @ParameterizedTest + @MethodSource("items") + void formatInputStreamWithCharsetFormatsFile(Item item) throws Exception { + try (InputStream inputStream = new FileInputStream(item.getSource())) { + StreamsEdit edit = new StreamsFormatter(item.getConfig()).format(inputStream, StandardCharsets.UTF_8); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); + } + } + + @ParameterizedTest + @MethodSource("items") + void formatReaderFormatsFile(Item item) throws Exception { + try (Reader reader = new InputStreamReader(new FileInputStream(item.getSource()))) { + StreamsEdit edit = new StreamsFormatter(item.getConfig()).format(reader); + assertThat(edit.getFormattedContent()).isEqualTo(read(item.getExpected())); + } + } + + static Item[] items() { + return items(null); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java new file mode 100644 index 00000000..7dbf18d8 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter; + +import java.util.regex.Pattern; + +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.TextEdit; + +/** + * Base class for edits that can be applied to content. + * + * @author Phillip Webb + */ +public abstract class Edit { + + private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); + + private final String originalContent; + + private final TextEdit textEdit; + + protected Edit(String originalContent, TextEdit textEdit) { + super(); + this.originalContent = originalContent; + this.textEdit = textEdit; + } + + public boolean hasEdits() { + return (this.textEdit.hasChildren() || this.textEdit.getLength() > 0); + } + + protected String getFormattedContent() throws Exception { + IDocument document = new Document(this.originalContent); + this.textEdit.apply(document); + String formattedContent = document.get(); + return trimTrailingWhitespace(formattedContent); + } + + private String trimTrailingWhitespace(String content) { + return TRAILING_WHITESPACE.matcher(content).replaceAll(""); + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java index 78604658..f7252a23 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,44 +20,30 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.StandardOpenOption; -import java.util.regex.Pattern; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; import org.eclipse.text.edits.TextEdit; /** - * An Edit that can be applied to a File. + * An {@link Edit} that can be applied to a {@link File}. * * @author Phillip Webb */ -public class FileEdit { - - private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); +public class FileEdit extends Edit { private final File file; private final Charset encoding; - private final String originalContent; - - private final TextEdit edit; - - FileEdit(File file, Charset encoding, String originalContent, TextEdit edit) { + FileEdit(File file, Charset encoding, String originalContent, TextEdit textEdit) { + super(originalContent, textEdit); this.file = file; this.encoding = encoding; - this.originalContent = originalContent; - this.edit = edit; } public File getFile() { return this.file; } - public boolean hasEdits() { - return (this.edit.hasChildren() || this.edit.getLength() > 0); - } - public void save() { try { String formattedContent = getFormattedContent(); @@ -69,20 +55,14 @@ public void save() { } } - public String getFormattedContent() throws Exception { + @Override + protected String getFormattedContent() throws Exception { try { - IDocument document = new Document(this.originalContent); - this.edit.apply(document); - String formattedContent = document.get(); - return trimTrailingWhitespace(formattedContent); + return super.getFormattedContent(); } catch (Exception ex) { throw FileFormatterException.wrap(this.file, ex); } } - private String trimTrailingWhitespace(String content) { - return TRAILING_WHITESPACE.matcher(content).replaceAll(""); - } - } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java index fe93fe9a..7f6fbf34 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ public FileFormatter(Formatter formatter) { * instances. * @param files the files to format * @param encoding the source encoding - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Iterable files, Charset encoding) { return formatFiles(files, encoding, Formatter.DEFAULT_LINE_SEPARATOR); @@ -67,7 +67,7 @@ public Stream formatFiles(Iterable files, Charset encoding) { * @param files the files to format * @param encoding the source encoding * @param lineSeparator the line separator - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Iterable files, Charset encoding, String lineSeparator) { return formatFiles(StreamSupport.stream(files.spliterator(), false), encoding, lineSeparator); @@ -78,7 +78,7 @@ public Stream formatFiles(Iterable files, Charset encoding, Stri * instances. * @param files the files to format * @param encoding the source encoding - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Stream files, Charset encoding) { return formatFiles(files, encoding, Formatter.DEFAULT_LINE_SEPARATOR); @@ -90,28 +90,28 @@ public Stream formatFiles(Stream files, Charset encoding) { * @param files the files to format * @param encoding the source encoding * @param lineSeparator the line separator - * @return a stream of formatted files that have edits + * @return a stream of file edits */ public Stream formatFiles(Stream files, Charset encoding, String lineSeparator) { return files.map((file) -> formatFile(file, encoding, lineSeparator)); } /** - * Format the the given source file and return a {@link FileEdit} instance. + * Format the given source file and return a {@link FileEdit} instance. * @param file the file to format * @param encoding the source encoding - * @return a formatted file + * @return a file edit */ public FileEdit formatFile(File file, Charset encoding) { return formatFile(file, encoding, Formatter.DEFAULT_LINE_SEPARATOR); } /** - * Format the the given source file and return a {@link FileEdit} instance. + * Format the given source file and return a {@link FileEdit} instance. * @param file the file to format * @param encoding the source encoding * @param lineSeparator the line separator - * @return a formatted file + * @return a file edit */ public FileEdit formatFile(File file, Charset encoding, String lineSeparator) { try { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java new file mode 100644 index 00000000..168d40b6 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java @@ -0,0 +1,73 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +import org.eclipse.text.edits.TextEdit; + +/** + * An {@link Edit} that can be applied to IO Streams. + * + * @author Phillip Webb + */ +public class StreamsEdit extends Edit { + + StreamsEdit(String originalContent, TextEdit textEdit) { + super(originalContent, textEdit); + } + + /** + * Write the edited content to the given {@link OutputStream}. + * @param outputStream the output stream where formatted content should be written + */ + public void writeTo(OutputStream outputStream) { + writeTo(outputStream, StandardCharsets.UTF_8); + } + + /** + * Write the edited content to the given {@link OutputStream}. + * @param outputStream the output stream where formatted content should be written + * @param encoding the source encoding + */ + public void writeTo(OutputStream outputStream, Charset encoding) { + try (OutputStreamWriter writer = new OutputStreamWriter(outputStream, encoding)) { + writeTo(writer); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + /** + * Write the edited content to the given {@link Appendable}. + * @param appendable the appendable where formatted content should be written + */ + public void writeTo(Appendable appendable) { + try { + appendable.append(getFormattedContent()); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java new file mode 100644 index 00000000..6f03d89c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java @@ -0,0 +1,124 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + +import org.eclipse.text.edits.TextEdit; + +import io.spring.javaformat.config.JavaFormatConfig; + +/** + * A code formatter designed to work with IO streams. + * + * @author Phillip Webb + * @see Formatter + */ +public class StreamsFormatter { + + private final Formatter formatter; + + public StreamsFormatter() { + this(new Formatter()); + } + + public StreamsFormatter(JavaFormatConfig javaFormatConfig) { + this(new Formatter(javaFormatConfig)); + } + + public StreamsFormatter(Formatter formatter) { + Optional.ofNullable(formatter).orElseThrow(() -> new IllegalArgumentException("Formatter must not be null")); + this.formatter = formatter; + } + + /** + * Format content from the given source {@link InputStream} and return a + * {@link StreamsEdit} instance. + * @param inputStream the source input stream + * @return a streams edit + */ + public StreamsEdit format(InputStream inputStream) { + return format(inputStream, StandardCharsets.UTF_8); + } + + /** + * Format content from the given source {@link InputStream} and return a + * {@link StreamsEdit} instance. + * @param inputStream the source input stream + * @param encoding the source encoding + * @return a streams edit + */ + public StreamsEdit format(InputStream inputStream, Charset encoding) { + return format(inputStream, encoding, Formatter.DEFAULT_LINE_SEPARATOR); + } + + /** + * Format content from the given source {@link InputStream} and return a + * {@link StreamsEdit} instance. + * @param inputStream the source input stream + * @param encoding the source encoding + * @param lineSeparator the line separator + * @return a streams edit + */ + public StreamsEdit format(InputStream inputStream, Charset encoding, String lineSeparator) { + return format(new InputStreamReader(inputStream, encoding), lineSeparator); + } + + /** + * Format content from the given source {@link Reader} and return a + * {@link StreamsEdit} instance. + * @param reader the source reader + * @return a streams edit + */ + public StreamsEdit format(Reader reader) { + return format(reader, Formatter.DEFAULT_LINE_SEPARATOR); + } + + /** + * Format content from the given source {@link Reader} and return a + * {@link StreamsEdit} instance. + * @param reader the source reader + * @param lineSeparator the line separator + * @return a streams edit + */ + public StreamsEdit format(Reader reader, String lineSeparator) { + try { + String content = readContent(reader); + TextEdit edit = this.formatter.format(content, lineSeparator); + return new StreamsEdit(content, edit); + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + private String readContent(Reader reader) throws IOException { + StringBuilder result = new StringBuilder(); + char[] buffer = new char[2048]; + int numChars; + while ((numChars = reader.read(buffer)) >= 0) { + result.append(buffer, 0, numChars); + } + return result.toString(); + } +} From c7fa27d7dc5dca23b686468be981140d97040414 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 19:39:43 -0800 Subject: [PATCH 022/136] Polish README.adoc --- README.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.adoc b/README.adoc index 5ffd15a1..0ec03fe8 100644 --- a/README.adoc +++ b/README.adoc @@ -222,6 +222,7 @@ https://repo1.maven.org/maven2/io/spring/javaformat/io.spring.javaformat.eclipse or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. + === IntelliJ IDEA The IntelliJ IDEA plugin provides custom formatter support for IntelliJ IDEA. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script or if a `.springjavaformatconfig` file. @@ -240,6 +241,8 @@ The plugin is automatically enabled when one or more of the following conditions * For a Maven-based project, `spring-javaformat-maven-plugin` plugin is defined in `pom.xml` * For a Gradle-based project, `io.spring.javaformat` plugin is applied + + ==== CheckStyle-IDEA plugin The https://plugins.jetbrains.com/plugin/1065-checkstyle-idea[CheckStyle-IDEA plugin] provides Checkstyle integration for IntelliJ IDEA. From 6bfc715f401a9a7de7c7c930c57df00e44444a46 Mon Sep 17 00:00:00 2001 From: "Howard.Zuo" Date: Sat, 20 Jul 2019 18:51:49 +0800 Subject: [PATCH 023/136] Create Visual Studio Code extension Add Visual Studio Code extension to apply spring-javaformat conventions. See gh-142 --- .gitignore | 8 + README.adoc | 6 + spring-javaformat-vscode/README.md | 19 + spring-javaformat-vscode/format.gif | Bin 0 -> 1830053 bytes spring-javaformat-vscode/pom.xml | 20 + .../.vscode/launch.json | 11 + .../.vscode/settings.json | 4 + .../spring-javaformat-format-service/pom.xml | 121 ++++++ .../format/FormatterWebApplication.java | 35 ++ .../format/controllers/FormatController.java | 42 ++ .../format/controllers/HealthController.java | 43 ++ .../spring/format/request/FormatRequest.java | 36 ++ .../spring/format/services/HealthService.java | 50 +++ .../io/spring/format/tools/FormatContent.java | 62 +++ .../main/resources/config/application.yaml | 5 + .../spring-javaformat/.prettierrc | 6 + .../spring-javaformat/.vscode/extensions.json | 7 + .../spring-javaformat/.vscode/launch.json | 36 ++ .../spring-javaformat/.vscode/settings.json | 15 + .../spring-javaformat/.vscode/tasks.json | 20 + .../spring-javaformat/.vscodeignore | 10 + .../spring-javaformat/README.md | 6 + .../spring-javaformat/package.json | 42 ++ .../src/SpringJavaFormatter.ts | 28 ++ .../spring-javaformat/src/extension.ts | 31 ++ .../src/formatters/JavaFormatter.ts | 10 + .../src/formatters/MarkdownFormatter.ts | 28 ++ .../src/services/FormatService.ts | 103 +++++ .../spring-javaformat/tsconfig.json | 17 + .../spring-javaformat/tslint.json | 15 + .../spring-javaformat/yarn.lock | 388 ++++++++++++++++++ 31 files changed, 1224 insertions(+) create mode 100644 spring-javaformat-vscode/README.md create mode 100644 spring-javaformat-vscode/format.gif create mode 100644 spring-javaformat-vscode/pom.xml create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/pom.xml create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java create mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml create mode 100644 spring-javaformat-vscode/spring-javaformat/.prettierrc create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/launch.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/settings.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json create mode 100644 spring-javaformat-vscode/spring-javaformat/.vscodeignore create mode 100644 spring-javaformat-vscode/spring-javaformat/README.md create mode 100644 spring-javaformat-vscode/spring-javaformat/package.json create mode 100644 spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/extension.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts create mode 100644 spring-javaformat-vscode/spring-javaformat/tsconfig.json create mode 100644 spring-javaformat-vscode/spring-javaformat/tslint.json create mode 100644 spring-javaformat-vscode/spring-javaformat/yarn.lock diff --git a/.gitignore b/.gitignore index ab75a6c8..20cd4cfc 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,11 @@ spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/bin build.log pid .factorypath + +# npm +node_modules/ + +# vscode +spring-javaformat-vscode/spring-javaformat/out/ +spring-javaformat-vscode/spring-javaformat/runtime/ +*.vsix diff --git a/README.adoc b/README.adoc index 0ec03fe8..38658a8a 100644 --- a/README.adoc +++ b/README.adoc @@ -268,6 +268,12 @@ Once the configuration file is created, configure your IDE to use it: +=== Visual Studio Code +The vscode extension provides custom formatter support for Visual Studio Code. +The extension is automatically activated whenever a `.java` file is opened. And it requires a few seconds to warm-up while you start with the first workspace. + + + === About the Conventions Most of the coding conventions and style comes from the Spring Framework and Spring Boot projects. Spring Framework manually formats code, where as Spring Boot uses automatic formatting. diff --git a/spring-javaformat-vscode/README.md b/spring-javaformat-vscode/README.md new file mode 100644 index 00000000..e6dea6c9 --- /dev/null +++ b/spring-javaformat-vscode/README.md @@ -0,0 +1,19 @@ +# spring-javaformat-vscode + +`spring-javaformat` extension for visual studio code. + +![](./format.gif) + +## Prerequisites + +* Install [node.js](https://nodejs.org/en/download/) +* Install [yarn](https://yarnpkg.com/en/docs/install) +* Install [vsce](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#vsce) + +## Generate extension + +Just `mvn clean package` + + +> `spring-javaformat-1.0.0.vsix` will be generated there + diff --git a/spring-javaformat-vscode/format.gif b/spring-javaformat-vscode/format.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd1fdacd84d888b9401a0a0d286fe2b44f072578 GIT binary patch literal 1830053 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�qqOu0ZwO~N;|2!N{!Y_&qA`Ok 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

qX$1Fw*+9wcl%#kpGwArO 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

O0iCLVB;aGKO&9dFhP&$sYVUB>3M)a8 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%0AFcz8F>t2)|yI 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 z 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
~*E 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 z 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Μ3t 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 z z!VMJ?RgjU=7K2Lj%IS(KzLHYX6Vp?dG==eN*$5bW3YdD!*y##b1;|TFC~_#uiL1Sm z);3^Kb*6{;Khd*h)No*gsmMv_tB9HEh}o%&Iv9!i83=h;i3T_d%gL+BDe5T6nJB%| zhiaO>QZ!dl)mPOp)`BUi!Ax~kRSo2fjdj#u+6LM>W`;&)<~lHAV{>(78+C1aZACkn zs=dCZtEIA)sm5z#QwLLBAE>K=LZGRdmAi(mm${Xzj!S@nSGb+NnyZpJvZjH8zNPKOV5aOB{5F8cZm9L7n)l7HN&UMu-@-V3OHu)4_(HCkp z6#gQrSR|`mv}{zgc3KoOFV?y)(RU;R{68fP@I=SUrh-DV3RT-gOGsp#LA&7PmjPn)DbmmR57kC>gQ0T!^ z_L>K26ohm&ihpgC5nvqcVU^%({Vv45Al$4E*JB*#b)q>u#S#Jc%FnWmjrFfc4XZD3 zOsaBC$9QHpzRv6LEgA~0`WlXzjQE%nDNr8A`yqw5C4)OJ(y0h;R)KbHPOzy@e%+C3 z*OKPblh6I7glndTW2K&buY+|c%dsynaI7d~p~Q8jJba_ZW4q4lpyBm-n=iII02v)0 z9h;t<@-8JMIV~+C1JRnBUj+a7`F%l2S$S3MhmUobhNkA$d{j?V>tIp*U}efgZQ4vj z)^c0kkIv5SuEL$zo{7Z4+0?P+w8`&Ti#z%2$L}{zKX>;QZ2ewBewwd@|3G#2l^zaO zobD&|pC%9gNg3(x?iw5#{`z(De*HRmzkFR-SopsFeSQ7=-p{?$)8q5=zhEo?A56zF zIY5eshc9QehZrQK!hP_+j5hKSjoE*UwjU296-T#3@rqVNHwwZeH~9=5MWCtl2y7EG zBII5Jp%6s&K=IjA!4z`Q8ni4g9*V?2P9zxMQ6KQ4=u1=U#Z!N)>2_)xPbD~&9rR6v@ic2MKq3_dejOny%);F`GvDLmAm>%qmxkE-0s{*TdS2*FNwa((A3 z9dL;jD|hq#WG0ok;AL_H??8YnXeP9zckmqn-o8@-qZ=WRHn|z7knJjBn<(sE-zqPZ zV=^E&&hJ%~)fBdM@3#8Lt*cjAW)gj9beDs= zRX|j#YOCkbOg}qv=GCCMr7{1ah3&k86zU<2Q2va92~)4khaw%$FU-7*;Z$JMs~BPH zDCh1ntC%1-byeFaM_nh)wP&{(*$sdHvSvqF$9z=6@wnJ-&7TRWi^D%(p)=y$lL}Ps zf2UN~YyVEGiyr-*fhqHx&FUGtpUoLL)}GDZE84RKD-_T9qFsi&{}iaC_I%l`Jh2;x zm~QfX)px=D;v47`in|tifjtUXCcfplTn~K?0pfW-ybHjA(2>3QMsNxMt`W7IwrqqU zwY7xaR);}fu)7jlb@dPsOBn||GPOpw#-+quh@f(6^ zi3qiL0I1F;ZKY0~8;)^s#%K$=i9gTeUHvX%fkqM&Eq()#)}Js){`Fz;)cCtsUUzqO z`03>C`gDj7d-Hd}6MK8PTZg^7xj1=wLI5rR5U6zH(44}->IFEYfl;*Fr;(5ZD}Wk% z50S|!f_kg~B$zyztbNgpz0MufC|7{C<-;R>CIw<%?$U@3#dcr5wtyMl`~i5{eRl z7ph-Iw27u^eDwhM*;C2kzJ=*6W2L;+dkNvQn;`utIQ15FqB+gOH+%)%0vY#n$R++{ zO(v8HmA@KyG5M2SBDKxoe2U{1teYS-iF$ceNG^VEo9l5|Cb3Wn0MGV4y<11gT)v)= zlzEePIaV%n@df)e{OZqp0BHr3Ktk0$t{(L58HX?v6zw)^8#vFXz)h*Dtwp9zPu{5{ z^uS~)Dfn+OBWb0Ivg-7kY(1ctTBWMt$n?9mzoq<%m1?{Gy_Iv@~{4u zLrJS(DAm~_nzITOjVhgtk=Zhdvr1TEm0r2(T$RaLmC<;W!KabA55Z^ER;1NNL#p%j zGU;X3bCt#mBlFE|XSH65)n>b@3vJ719|Fg#EiOhDx~|UZ;I~{RJyrAFH0Kz!MvV>C z=;ENn`Nx#R8asBir4f_IRmfWxYrfH?iQw~w0@7M1Wwqt$?DNJ7janDO(dGHJ^CnDU zt(&9T$})EOy!p*|jiG4#%G%ZWr*6^@UMRKI4VsG<+c|f`p!n4tiHp|B#1FpZYTx!v zE^0@%xqRwIza0l(w6Bxa1rDiMOgaQqukh3bFO068w_S9eCf0=-23ypY1$14G*M(n< ze!siA_>8XgG&mt%$DzIK25VvvRAW}@MAX%I9+)V0^&dp0m%Y^CN60!F>y`(yqzc`f zcxXT*CcN;8l-ExR)!aoYp*~XH(ryYt^-Y?U%Rw<--XojtO$Nj6QixbD#YD>-scBQ6 z=Qc=c5w6SniK*u7Qu&36Dmr3M{-fok@=LR}ghbR}CGNyi>=x)h%0c4IGfZ>E1C#`gK+QCS?%<@vuqM>8^-Fe?Azy1R8 zi26@e(|bnyxaP$wAVxDFc<`?uh-qZY!4U?XC}2A*`9>5Kpx0BX04EUh55{9e3y1AkeU1P^g;HGYObfzpl&@9tcqV*#`vLw-yc$&D;%MQK%mDRPSt?P?g!OP z`UMMT+I6PHj*aE=N0$T`s@m=MCM-*nNuN4)HBJQDd!BU0I5+E8@j6E3RQZ&-eELM= z>e-?9Mco2`=Wy!zo|g_pO7$zth6wnj=V(>h57{=P3XJbd%kg^HtaS$T%<5tsIKyhT zju=jOU#v-PaIr?caKTK6Jf~e3wLGpG9RWFq+I~F&2TwMo>PYwDg4{2~3!3gR-UM_{ z_QWUuEm?9^UmvYj*_kA^(B84}FG%|i^>Y6gPC}nMjoEInvAD=jM1j@7_xs&- z*+kBvv<$1K9lJ9r(?-b6l~q{un=hTy3YA5)_5RLy9Zat76&7@-!&e%lx5+=;!;ZM5 zdyB7sOqy&UCpqaeS2nw*9qjs!`Xj~T6t%AcZB2?^m5_Sl}+sp<|^MBzzN;vS2Ji=H~Q`oHcRvf+bz4;%WR z&UL0Ruc1wZzhFp_Kx9t0?#W}ag&2RKG#!m@ztfB-W*Onn6}{#6oLC8TAHm44Qhcyf z(K=$$dT68DGKU<07fyY5i%&Yr7>7)P=)EQ%2Yr0Q0I&MT9uAkJywP5~(IE(s-oh#Q zY`MMcPJ#!*#0mxpGb2~WQ_YtuLMg)qX1&8%xK%rce_A@Cu$<2XYKB&}8owt`d=`FFV zi-~KOiJk+n3I6a~hqz7ZnAO2JJH?Q?d7Y1-NG?{=*4-rP%t-wUvS}+#LT!xrE0MdM)%{igYYc(H!CibiTuU)~mopeX(&fUH_UScVPhP*p}%?WJ1$OSgLRj$0qM$N_ct z*u{KFkDXAT(^%iZ$;-XPPLsfiVmC%08gCiqw~Eodxg-y`&~c(7GZ9bo(oN&9NRf`l z$6zuOmNHjR_m@B#R3w!v+KsXmVERSp3Fo`qrL6ofsf@4ECcJzulziB--YJ(Q*=)yQ zh8>@mf*LDao1JtYpx>%yMn%V@5PKzX+h_9nrI{-x2nr`Yw@>6v&wAdJ^}aQCY$;c} z#gp?anotGEoE7(T*Z@-=^4va{n>BgaIQWc1R~ZW+-JQ`ZuvSrJsAzFeX?Vri)Y_Bh42^71VHq9Y1- z(5)(M{;B8sPtX08e$YR%)yW`Qu&95Q4nH)5Q;{<-BmR2WqXBgkv@M*8cnL3vn?rMF3vlks#buoRq5tp zsYP1}&O)^nK3-!$auv+Cp;8Canz8@M(Ll8JbTWyUA1_3rcC7%!zx)1QtBx=<&{;WD zGyso#F=TEY5pWr>dF5wa?mxC@?_5rP^-0IqFiO`zjY~i9@QQ?IPR*G;oM-#}O;9x` z1OvV{CziDn#0QdA>09pWS)1tJ_n$K|*2v-m`T6lksB}rYU4<2Km0^;6ly=mvy0Sa3 z&C~0}f^ZFu^&pJ(gZuG>rVS$4kcQ01A2ozO<{PJ9!yBNqjdG^85~F%jD_O<{b@J_v z>MM=-290Wdjk!-6*bf>FLYj<5&0*DgIyp@i*G*Qm&1FqZujZO;LYkd&nq6qE`m2Hl z+nT*-KY2@j3RP@Yv2XUx`4rs#DYW{X`zYLV%^v<_KubIu4@a)d0VN+j=Tf5W=-v~(YU-;Zl6~=Cayag{2YwHF+m_u zsgYfTnttab*#Lw{pSW`!OWU<^VB|6AoDTxQE^!0{Iw3iox~2GqFp{H5;xWmt^N`P% z?MBmV`M}|>6$b;cNwOn2?myFRP-u6MpC=yJ&dC6G8{O&F)M*0meq`43*vx>BU03wf zmVC8~VwLP+Xb-bg?=yA%H@l8^@ky?%J*=y}yf?jylyD7x_@j*8@_#){Bz+PceNtoH zGY25@=Yb+_`oofXt&?QAlYRG$R&q5~>NK{H!-apL2kUBJGD+4C?N;v?Fk9{22rMEJ z?VoQofB=YouMoEu;F@;~x`lQZR=V1#7rNmC-`@{)LGaykhl1(4>|TLoLOYI4^?4aT zw-(^boOXuf4##2X+B~`Y&G&j-@rjO7h~v$^ypw95BpgaM8?Ybf&A9neklRYQA5C&K z1nKByq#LQ~7)hip)io&v8r8p+(pTix%O4wQ$sG;OsWuv}P8Au|(I1ud8*MWi8?0$2 zjvr1jGk`FD4h$Weq#M6@K1Rm=<>(YRojbmK*fBe%yYjsIRmb>-)I{^jxTGI(D}V^C zGI6*%QRO;uO!xKoSo^8e*YnV?HKt!LJHFl=wqC7%1<+3>U4O+fp9GD6!V8-u>YQ}R znIyTLgd{eR(N8@xpMpwGJ$zjdqyp+cfXD z6876^LFt(zEM-TpTF1>fj@(Xnx%!OE?TkHJrx7|Q2pt_&P@ph24egv&zirI%@7kkv z+2pV@py~Hsoi)mvd)WM09Sr)xR+w8eXCpliDC?G*8@5%Scj=t}m);|pURsek?({vuN^c>k-Y0DDWBqL*%6xIcFWLpvFW?t9;-)9yzL-M4gxcCG%j>;%haQO}q2%$LjPO`K}Ot-j5ae_Q@AZW31GdZ9Ecdb8Xdwo;nD zyuGsc>TI#)cBMNph&3xTXKE{AYn%6sc3kfZiDB36e~i{c`1^U@_bXC^%g*n2 zx8H+F*KuUlQ|7+og|CBU^g#LRBx~!UP3vU$j8@a~Q2NK?@E=2oKWMssz{h?t-2KpP za+c-acxJKjAEV9R;Og4oUfbZk`yWOtvngb;DH6UZmj5546%VJE38$B0*t+j?|Bumz zZ>i*OsdjCtul*0BW!Tn{+19hzHVFS8M%%S*wzmB$+>rTr+eT)`&SJ-bck^Zb&Xm`V z+uDxD-HsQ-uD8stuf?u^_-a-1S^Rt#{xkD#Bb)(ma`chl_D@EJ{WP|XynFiSv|p6JFRrxzm3Ut%cE5_@ zKxlA(;$Xj=_n^hXwvoX|2aYce(=~z|_S_u^;Nx@*kIC{6IAIP)lV%d|fsaphXbbRW zKj6_$8Z_VKVDb-Ek4+?a?AF(yJc_tx>mVKLRe_sb^c>M2IFaxGnTGM9YV5HTC7!0& z$z{?B#V67OMlkOH-T~wk=sD-x1O!E#f=_hfyTPjKI=<_z7U%c{z zyne)gCV)@y;OTi6^qkM{-1$UzNoLrHjtIthv0`!2_S9qsM$X4a`P`oL43cQ1co}Yg zDH?q#iPcA7$X4Kb+ZZy&?{sT>BXT^yZ2n$BPK$BTl6l}7(@l)MhhP#jkjzH7n9HyBG{!v_hE$E_;- z3yIEGjc50?OJ1e(+Aq)k)UD7i)hsoc+t;r#Zt~b(o;xtaSPvwzn$8~@H#$Fcs8-&r z$P8W@mhgF~;4W+M%lkeS-_t_Mkclc3O{H~;qxZ{*!cCZ5pTamC_>_0?lb$?hw6HE4 zIFeHG^Pk1eH${(d+Wh>Vu0a>t&JyFC=2LyJdr+8oY=b^krxj|-bNw^E>FI3<1szg# zKbOQ~b^S{kZ4P_oVtq-U*x0LJp+!I@<}nxT%>#p<98(CWEa_R$!fnXqukEkpmf!Ef zZvLH}?0)}_jQ|K&l`~9m)tBWv>{JnV4gR(nN;lk~;CTkQkswJAGO>2c2j9!v-WYCI zaFo8$PuF}LAFm-ke=DFn10>DFCeMeif&(lMVL~Y-k{J)B#CR-zq*H*1qXvoM>eoL> zt{338h^MePJySX?C{FtRfp++n#3O6F`xw&_`J`RgG)L0&h~i_W0~$p4C&m2&WGgAz zo7l2+kE`vDbFfZwCjghy7bZt6{1=8*c&P8ItwihR`x!XkG?*ojG`Sb;w853~yv@J8 z`eTsM6d~RujHyEI5os^1FA{3c%A!M0{5pS>K`#9T7>Z;iK*(@taLUdvIh0#bOo2t& zA&7!p-^o3aPqJ~nZ^#fFkPnQmPbz&Fi3%huG*BJpKTCw^aV{9eRfsr~_{ggjsZIR% zq14uz{6x|(SB#U(WuBg0Si*512U;PBMJ}zP9+D9wfV2#gG>c@}F|{q=rL-CR@2+DQ z1m=?1fLMRrOFoJ4cZ(fTp;34XDe~_CS@B5DjxgIb>5?%Tr;?*67BaHLC?CZWw~FZC z4v1v`V)t{@)0`+HRZJu$*ab^W!qQ#gk^MATGEzi0p9NKmzMTP;(;?-+6J-^9 z6vNBmbXc(jkLV6cV2bQV+$zqhdrZaEpg=MfhtW*W(+R{$^I!9{s#<_71!ehU%> zse9G*2_LUA5=PAB7U+wbCENvtYh=yGt=2IXEGg(Y_$IkOgGH`ze1noL7C&XeqYz?N z#^(tvky9ad$@`~)J!Z6`Q;gz|8q1=WO$tbPyIM&0+^+CwM6aXlUlQY?O%zx$vlNjF zw~#RY!X0HDzt00DZe>)GM1O2PO4o{2v$J`acd5Xkq#Z}&{9TyKI||sU$o)_QGAbCt zGtIDe=UIJ}>B#bFQSqDVtm;&}ARXpNmX62*xP?+HA!K~#VL@XtwXxXnQdyv?UYSmM zwVnNQ^UBA(Bq}U!|8Q;u=Lh~#mW11eZbFT$mA-7hVQjZ!0T{lkLPiNV6q$bc%Fz4b z1L-sHgH|K$H&}?&hp-fisk9Q3(Z4E*3iV9vbSiE9{~!-1t8u4`*Vw7nap;{2sgCxd zW!3+whVJOTzut0uc`M$fWew4+$vadt7D3K_IVV1$s*?;zXy4c9I3_obvBBu=eHq+TmG@VoKT|b(*VoUPJ z(ifXp)fBAh-t$WBQa5{^5aTh2^Y>;PX0q!#$vMJ5h!L-QA^{ot|DuTuN~^}CtWqhy zUPjl12hC9%$Ik;iglgIl6^e0_D@9|eMhEb3@+r{}0y;tp1Yz%kr20rc&K?~4LiOei zzyiJ-@yxUTPq53|HfX*2R10H62>gU76g4<)}9m_-48Q=5l^9tvCl@B3~F#FyT`{Y?S92knFBeAtcT@sw9$0*u_`efQ9cAZ zK-n#<6QWlxiV3f$$!f}pc9wc5HP`+T*s4-IUWG4xLytf*w-K9KHuJ+#C5?5 zuzVH6iu{OoTGa#b*5f?`GLv5EP{4+HP+;SC+(^dZ?hSzi2TNMHNaFRTqM2`(24Xl5 zP??O>y%1AHgoK{V6TC-9!vl7}aG%^=vt7yER^12r@1l1X)LL1cV=ylDfiF6L zz5SuCLm~aqFhcY9H=i0u^ZNoViQ_aKpN9wYaX0ngnWT`@B zsS{+M*!2+A#6Rhfr5lsQCy{0N3#Gr2Wh9YfqPy?5mt&EVd!{bOY9@CYFT)-x$B`h% znJZVjl5QGQ0 zQ_xsds4P%u!1OB?;|LG;ro-V(i*eLmNGC54f6Ei37y>5}?vOcP{7780L(yz(U>*sl z-cz(phNYa1d*86T@mc1K_A9i-ceRK_CE8gN}))7<8#2h+>S2m_)@?09|X8 z)TR_)(8h>{Pki=^(uo3JqXJ`-97snTB$f7j zxZ*BQ$aD@})ZoR4*Q>`uG7WD$Q>K!P7YO${RrePN zfA~Fy56~c?EeLdiPydZK7f94w2Vw7he*pEw4>w%I;t*Ut+7nLjLp{1r<<-Uw2nCPS zgAnXI()1`m9Q7R8}bZ&ogxN4XQ;&i^m--S~1vL zqa{GED@ggsR|;oJ0)efQ0)xS7krlxDP~}t-1%N(r#%qFQIy5=F#|1}~xuMIW2=w8#9!{^+JGDj3HH9lG#J>^t zmK1UMp`UMSoz;{^wg68;pVn3qgmKIXcIumr>o@8R`TF8|?2p)(0mM4TFvDY*#j$#? ztRT!J(g`pL)tE>fk7U#nHK~pqo{WSUIB2j&8sPq?RG&ycnyh z>21G+1~E3nxf)RcS-deo78pb^vbbr?CI_Kc1hYKMi9F#bE+=$YD5@b16v#h;TpSAj ztG45-S)Q_hDp<(rFpN5#h@nTbRVW3L8Wr)F6qgc#TfWA)-$!|(tJRp5FI60T%w|Aj#jOzF3vhyGI9 zZH$^U4&l)US15&n&3a08@}*7sq|N%riEimstp*xV17m1KrAleyjL2vd%wT-j41BOG zx6SIxQ;exyjSDnr;8`lEm{n6mmnV!MG9#Px&0+eFMKDtVDuyMKrhG?+Q7zN7Mqjbv zm*(rY--b2JHh3&H=fGmDQIXVYZC<#$e#mRLHQ`$#TYO?WR^ll?G_emVZ+#KTSZqmT zp6Caj=0P`@6Zv+kIS7G;olL#WzbC?wZz&B+yUnB4O`r3u##Ifzm$Ja#S_1sh1AZnJ zJXVfi15CwQUCY|X;Wd{gu@hl1DjW46o#R)NS-s-;AN{zu8pdH;Lr5>qk0PbU zw_?n9WVfaM+;_z3L==hDlYDEypo(EMfNsK?&SI4=#;hTYoInZecxHk^8=x+$;%KT7 zV4EloOT?m82^?*BW9pHedcKrIhza`ivK*m1xKdSfZ}=C0#UW4+^nP~3#rJrVmNR|0ik7Yj)2*v zN0}@0f~l>x5CDXIS>pA{^)W=_S1raql;f{;weq4~gO{1&!`;oGLOT5^-L z{Cld7fKBn3MTz?&_;Z7)z-Yr1e492SLTwU*KzxTz{;64hvi9|=v}}|D`Rqktz%do+CHy&sfMA2e*+AZi0SpAK-2pQ2?4@*U>w-Ne1PyHKK7c_Zb=Y zS&z=C`M7CK_l0ox#pAZQiMaVB_x}{_&ZnipIPCI-`}aHd_4%4_U2$t<9-A^ATgT-; zn&UP!?-{MfUQ*F^a~uOn&t8|u;e-ck_Hk8(2W0kt80|aS<1(TV+pb@lo@W-Ga-1iX zVkci5JpbJ@+ClP*cSM&TJa5-L@A8wclj3fUJ%LZXaM%wnz^6F(jMnnB{L-@m>IF*n zBD8d~xEZh@8AM>bEdL&sc%7E-5mJG_>cpK8^1Xie{)Z3uIyD;@*FPp{kcd1WEULVSn)QHU0Nr{gfk#TPg#xLr)h}$du!#J>&8x5vClV;NI5^5#AgxE#B9Fi2_#} z#JtO(0@y%k+)KR63K{# z%O!GoMlq6s=92>gD`n7${PB={7<*CJxjpv$!|-3Lr$O0u|32h6Sv2kOHrx9?!%O&nmc))uejk*>7hL?k z74v}&TmWzH^3L2P3bp>t0r*#37hJ6@?~p7`nAv(*cvX!J#w_&K)a3_dx5WfpVzfe< zPI^CLOH7CHVUX8FmLY9**ITaFgCXePPa$0=*X@1RmseYz7a_fTp*6Un>2R+;%h191 zlKl(d0ngAc??dxKZsJal$xA}VzlXvbLOX|UdUivno`zNY4xN4(Hv3(CMk{RI^ES*h zY#}*pX@PI?eb~z9u+ge8?CSThHAAj%Ct>U4;f7aXKls8oGmgt&hHqPjD^+?C4|&lKc9`VcY(NpZ}&!u~vm60rgzp5GUenmuFI>vF< zp?&cD8ojWWU+*8lu>yQ8*LY|uV$cI_r&Gq>D58hq;`OIY{pbhmIyFwemg}ZWAe%SX#cEQS5EFJ$S?B+=VGJFLcROJInQc~_wID9>jm#x z2Y;TpS&2T|JE)K z6JSIlujuhr9ttRhN1(h3~|wLG%DlNXz4(`+tgDZ5+jk%v%M;sj3p3rRgTYOeGmEZJgzK!B?DaSqKTP%F^s$ zt}4CQY_96swkxihk2Z}}HBHOG&p)*4s8)aIyt;ah={X+$e*kDem%pp9#Tt7ovdOwf ztg_8I`z*B4YR0Uz)mnQkw%KaCEw|lz`|Whpf;%p`<(hkLLE@sjF1zizYplBO$~!N; z^^zK|z4_|9FTZ)>+b_TY3p_B6{}OyK!U-!Zpur0}{4m53N7t}ZQecroL|AC7F~$#p z076Sapb>;iBBOD#6H6)op@fi2QLu8L7DzlZ%{7MvK@2(T976>K;k+}@a=JuuQ?1N{ zN<{3;v-CWrc)T>BC2g|~8ZJ$}4%UV&wFo0gv}C~sVT&zx)C6t7$RY`Gt%OSrsGvdv z2c4k82_!Y(0uDCoy?3qlnPyZ$2LA0?d~>p8G|~`#kb@MmH2t(ZAFKocI_t>bQUyUU zan3p^E5)_fEY-mX>7|#x!9!=KjnLW)K>$a~9W`K!Fqj}@0x-g~aC0cdw9^aU!3&Qn za&CZe{PE+xfIRb60&e(Ph*Jd1;}1#Eu}Vy=b52YZU>$o;ptm&oB6XO5ejPF|qedk)w4)t)8z2m0IH|!{A5_GH6$C+C5gbQJO9rue2a!T1Q&~0$ zutI4|W5+B1q<|61t)l{iC@g09J@paE9LP4%K>=YBvm7Lw2-h~C1g??J4su+81>``^a-!}aa9AhWFUtVf;1p^yMssrej$uXbVQKAGbBbcS|_n2 z(q{?6;ZBV9NOrj574et{JA?xQs2Kzm^Jv8<=V4NkniQo`6Cy%DunJa8GHN++$17ps zN|0Sdd*|roHV|PBtX*>ffK*aWvI!&r2#Cz+o<3OH@j-+1g5C);* zQ4vA^jmn)vIJ7K;1*ghZig1k%Xsg2=N*6mgl#>nuCEYne$cQ`8p$>{*gdz+=&xhER z5q6-%VePs)g2bV)q%jBk&Y5S%JRxP*d$(qMtT56BWD5tN`} zATZ4d5=0Od{N@6jfHf>)H4!a?YdI29!3!e9yW4nTAhxF*&6#l^LBQG)2(pA+D)R|g z1206#DF=dBfNKNpjuM1Jfw~sN0hcWZ9TmI5hv?Iv15v^~)n?&@09GM!aBPDyOORUs zkZ>X$K%ojXV$s;LxWzmoj%h;UIvjVLFf;D~HEAJ_vIY z;#`Dmf|8Q+$kfWA9PhGs0ZT~7Ik32ZX$qpd7E}%d{)-SQTG1d^ma@;pyb!EiF0A-X zb1lKS&w|*s4i5pL9r(!zuoeWN1HD6^89@hw2z0Ur$smVAm=F-oAtESL0YxNA(T!-K z9l3BZrZY_=-SEaYz$u%CXhO7-80{5SU0TPM4CLYtS*E9+2lfh*O}hQ|q!pemxKfa1Ou&DK;`YhY%z}lg$h99y)|GHSQARzUZiLM7Xv_f?(MH&~m`84ZP)>Ns$@jqX&A2?nX)&gE>{fyB?>yf$T!5T+NH9Vc zs}Ol}d(H2i1fTE)We>>d&6KXeoRN*02 zu0fQBg@I^%0TORDa0#OKiY2@@e}@m%`N{x1`lP&TeWfq#A=xdBHr{4B$)>ZIpYxonIQyLJ(EH>z|@d~6JQ(X zTT-~w=t&&ipH#oj7Jp_iCpzpEH>$RJPiP#Flpz8=!x)H>^2?GjH1ntZMN9-Ud z03jx3qIs|gLfFSq*u?jZ1d;7nj}gR4?Ok`Al#r!gDH4Q{5emi`MBfdBOC8xpXb)Er z1O;#o7h+Qt8H9M9L(6bZQ-vJp6$HyI+b=G})EMA!ObzIjp|Js7MHHVN)|o*_R)Ce3 z2tLHgJM*`v=u}JWtsk+13Ca0R#D`z zc^8^po&_aDe4PV;Q2-hU2QE**n1F@kUeqM?C}L15sXb>sSw z&O*fx3ced67KA{7<3X@YHVWE7V1n6AMDvLqN30k;W~ElLhLli=l^BW;idsI>gweo4 zJg`G6xWY-LR6$6=(!|3nxB@$L5<#jZTB@Z@?HDSsf-3+OTCxHvRM!H004nU%6Ur1T ztO6=TBq~voEWCm%U4cbRTQMO*B5)2!b_Xt<10o>*!Ze*jQw0I%ltX7O6*;uoK-ioi zAi`!Mf*};bH9-I_r2{!k6)y4LK)~cStmaWojRQKB$Q6VH+GGV<9q^$I9n3*qeVCzj zTOG`S93T`^E`Xm66lfvTa|#sK85$hO!5lQ!W641rTtHLa(|6VZdA?hC(g8VrUD)MY zM2t}MZ3I?srG4I~WTZ)q)!0BJToL*N;z)rj!6l$zfh)~}EJPAPLV$q2g1LaapuGB~2?eN<}$RH%P)q+!1zZ51g%PE~=s}o3FbD&r zJ;Wq>gdi0|qOvKemTGy#X-F`T0JVTH00Ry3kspm6MtndEg~F(sDz4`0bD%0nsOqZv z(W@Q=tNuc;c0{GMP@3whvM#H2@ajkS>Z<+%EsUKC{DLjW>PEN#DCEK|FsrwID|9%k zM?fpMmaDm*Yh{RQN1y^bbR4?AE4;@4>s_d;yw`xf%MbrR)DlEiCti(zL!&-#HPAtY|ti~Ed#a6_{ZY;=#Y{GUdMSQHt zo-E4lE6GlT$)>E!zU;ZKtVFad%+{>U=Bmv0$iv<&&-QFq<}5_e?2f#E8dO0=0Ku)A z#1}LJ4g?V5$TWr~wfi?bnXP z(l#wZJneo|?a=w`YyAw+_~}6C#u31+Sn`C>4v5>p%|^5VJV*mY5U%0sL_PdNGav*Z z{DVHA1cvn?Oi;iEzyTa6!TcQmr`sJTpTX0XN(2kiLPr!g0v;p5Tp9;Vy-J*)$n8qhU z7@Y70h}a!Y{Hv}{Qq%EJk13b(CMVxQ? z;;uok@9rwZ`|`vFOzl9BPI~Ud>+o6rPQ(Bg@Bt_A0_Ow-NCP~~Fg$<*5Fi9gSbL_okdq(Y!jumw-V3?Knd+%BJd zL24+3KBz1TajjumK|k0xR&dHn2jXpGN?} zJBaT=5J3%BL>6zc`u>v_KSUVw#2qwZ)|IeM#19;|F+|vLLgeua--HZ*!yBl942#1J zA4CrCu&ERfQPiE0VDC*N@mE{{6GO$mNd(~vvOy3sIAjGEUjzmGgBWXs{I*1e*+J}t z(Lh*oM~sdfKLj1S#0ZdrBs{=EJb)yS!U&8jAG>ZyNW(is4dUu@B3nc+|1u1p@j{Sr zPk>M*laAXxb2Lx?b2VS{thR1P00BIR!xb+;D%37QuqrTMt0`*=4J`y0blkR36vdRDul7~F`qO=DDxS$OfxHy5yA8vowNsx0x1~pLxcb+kizh8 zgwarR#`!Tv5VAKY1o;jdNpplqZ}lvh^ckh}K&*5{xIs&M1Q|tyOe+M2L9+2Nf+U|2 z99z{|#|%%$QTyn$5*am8EA>J!wNqn+g|@Iad*4}M~kU2P@?M;aX{k^-Iw>%Pyke&n~rH6XM(R2i64ZCqj*H9IE!Dz z2TYQOas)WQgBBM=b_;o?qS!+8!#`Ld(P7qZW!f+}dk4Ck}Ygfcf^`#13OM6mBa)I&CWce*S8 z2&MPKy7xmr;DeNZfi=i?`yNCyWCOm#JHKaxrB}q{9+vHu&VdcvJ#`j2P3MB$6=@9} zo;}2I+7)4uQ=UPX9FP`-Gr}@o80jd2U!5^tzZ+04f|ANnfg$IaFG9-z-y%>vdzKUG zHnm?bbyG_-RA;l{JupV3LbFpaH$=NMqya(TGB=NV?3(+qal5xyFrSD!xhs7{pu4)W zyOkHoyT|*y*ZaNCHS#7sNilfkJ$0LcD-`UwWg=)?XaK7tiAnyopixZblsOLU1-sG?_cl_CS09J;O3P zw60r1(m_0-L>ENg?fL@PKJE`DJ-ZSr@K6q%)GA;EiIFKpcmq7xazPMs4LAA%RKX07 z@-1uoL8t*de1mcjLFY?E41hO-+yJF(@B%DuJt)QtWI6nUN4_USG@Nxt@TB?x1Oz#Z z7*SYoa6u9a2p7O1Xb@o>Ms^rFNWySI9Y%97cBDX%krIST2wwC^5JE?c8sVsfu!vC{ zgco2kT8I$lqB;;A+(f7-CPD}r=^*?_P~<_9j7%aNK}wQJsS6~L8Zj0BE5=syKx73m zuT@sD3?aaKmr`XLc<{QxK$r?1IH^S9N>u~z8`^_JB8){C!{5Iz2ygWJ*NkDkfA!G5 z(D(1KN;m)XVU6}ronNd(jiO|Dbc0ctNf|nv;@tmVA`ZmOv*gavCbHCsP7)5(`Ne;$2$ z_3PQUcmE!KeEIX~*SCKke}3~2ob~tb%ngVzy5YYj^qcC7BM#K8h8Gr`ZjZ^IKLj^2`BAjQ!sVrm%BUa{t#XMnzQNgeOvd)r9t#^nZYpt$2 zQcD`Cq=Bc6^sf2G8jPHw451?+#?Z7Px|V#tDrbR%d@oPuH~5>gsjt`SlqQEw|B zr}`=^_Nsu#o2j^oi?>U^!4aMyRT{EL^o~rDp(U?ez{!80L`cfWs$>#N%+!OasRe+_ zl@3O3L#WPh&~3bKO-X-=tC#qc$;0bWzP3eN??1wt7*z z<$y5j$51Jh5rqfceHY$%<(-$_dhNXz-+c9p;RqgLsG$k}LYyJwItae_&kYCTO;Fzk z^+hPcc;ZCpD~T~85k`zW1o62MON4kHi&dNl6^yW$heh%lkkJIcF3nV`O;y3@+#5UE zlntri`ew)T3>%E0CLlwr8Cn@Kj7p5Gw9M8m3F?Shtn3hOCW7FY_#mXR`jVkJ7%B8K z&o*NOO^kZ|^`JoWG}KM0dTkpaF}X&_Yp|)ZYB}Q|<;ts%*UL^S2;PB54UE*{CT4hY zR%z#+&HEW6q5mP;XoQfKtn!YsRL@%6$ksD7hAt2rSVp3iDmAS9l=IL9v}K4SXR}`W zpgBA0{LRqm{u-m?@`kFtE8>A}x+CBbrz1AtL42zJV1#Mm;pnBGp8D#ozaIPSwO;@N zfq^~<0yhAJz~KIBSXjY)9gaT2l%yiNX0-3S`dTWK;v{cNEr}% z5HceyAx2J!xmBrTbLr7Y+rq>M-4zmwQdC6$O?Wu0sibZycv55(339q79wZ5SV#pwc zLJ-~chIYUKVnley5G`_1GhPIvdZYl0=eQyV)0qLf45zNC{6ZL&*xoLA*-Kyk5}3gh zrhSe8peT*6N&UeZei)`cg*_}n8I#J1;!#a&RRNBLwv$(^#lbUtK^6 zQ~MJUSE|xRnvPh;a$8qbS}0s$B$KjRz*6LZRjr~flwm7k5Mg={nbK42`>0~5nk>|z<)SjRpVvihmPz*6Om8z{{gLS0ZZ@wGl^z6dMubBAWO z*^&LV=$qlhiiI%55CWFR1TyNtSa=F5Q85Ilnmve5voeEJ3{D&%?MNLjixm=v!-TR@ zTIMj4Q1g(4p-6OSuNILj7+z~2xLbhNqPx+#l5&VG{jOAw$dDvTP`f9^$_-=q(L2@k zZX#HY2)>9@tWe5Qn9`KuFfz;kH8O;^^Zf1cgeyVF6n84eO>RLCa!^1vEj^hmYqAPy z#i=+Fu3}ZmK*F0Xrl3`m43RKM=wRX5@vt-FeW~55B45qWca`P2LM%e|SM&_dEeufw zk+6bGN<~h`Q)c9x@x2Fe_FkUVmufjCBEOUtBOiFq2Q-#i(5`lz zt}Um^*fo}y?RRkqfq_{jhBLp=<&4uY3>dOfv_Br?ai(RSUn3-~7|}JaOiPRoyT&7Xv7=3fL@|p2@N|&C_=h-Smtit8(x}^4ble*R%y~}=|1fVq&EjI zMjSy3NGt~uMz`;zzKNc0mnxohc_)u0j%u+?(BeYDxW+jy6^}EdRSaH$gF8ZUv6wvG zEj_eKpyd~b!2FT_!=8%TG^~tHH;U>5OEF&&iW@#xtLsc6rqsUj*+6{Ne#{@Ld703m_3Y zu;xlwpalXh^0G9gVsJ4d+%K3AhAqaj;|Q`->I{J=^4-~yD)dFi%Toyn|1k}f#K17o z;0+hJkeJ2bUNOo|A#BfjX!0i-l>!*S$jgk)|o)068Z~7p^ z`Z@yp{z3cy7=rt}k1@a}{KSszFd|l7Wh&5bV(f1bl)wTkfCA#=DB{2Y7-9qJZUO8s zu0Tl$F=8MV;WsFtOZqO^5W)s=PzRT3YC3EIrOg2$Py)#V0uqlsCMXTS$BeXNDk?!3 zeqjbZh!8T54cpKS-w+PVqnHT64ZZ*j#3!>Ps6XoPVEV&A;AP(G1@-Pl^*TcL*x?mk zK^BImwHN{fhDY02;T2NkAmArtUcnXELECmuoEotb$BaA^I2pps#6;dG#!RH;`fg4mI6}SPYz9Gk=3Nq?JD%`*@`k@}e0Uxq2XbfW? zvLQVG^g*f);s~a}8nWRr`XL*x!5X4rxI!o#t`Su*qE-Ik4_&Ui5aPNHBD?H>hF-2$ zns6fMKo01D05M`I2*QT+(f{bGP$(b{>hYrLfF9#OK$IX3=D;4|aSq}jR~%xY=s+VT z%A|a5?rOpgY6vDy=L+GA0kp`)!~(_`U;?>Gr_Mtg%z_(IK^hp(%@|_M*60;uF)nD) z7KI`gcd-|LF&MqC>r&_#lW`eMuo?g18KZF;S;ZQ$ajCYk8@~}U!Z91h5$qtt99`m~ zRO$xtF{0`~BYmicOlJ=2piD}NtPTwV;7<{}5-1o!PjUs()M_ZYYAe+*q7q=F0bC=MSJG9yzm*R2Bj&_5E!B`gy_IPYBo zkzNMTUJ7ybVqtim!yQ<`3th`XoMNjbrx4X|cO{=pfhq6X^0F!m`MH0uaLXfa-3Ns?wd zt&%+ZK_zY={D#pbjxkQw&%7K;AXKU~GO0`Ape8_~4xY_RC^Dk#08RFiHpmJjd;GAkIscS_QI)%W^i%h9!UECj#D{L zlsO^5Ig=AQr4ur$Q!1`AJDZX_y|W&`Q@O^IJoo85)AJ|6hdosy34me|?%)m<35Sd# zD=X;;DPT$0PC&s**&tLA;Km8_E+L52NRgDJN=K!12SAGhDl8N$Fcfd|>(ow#iF{t5z_>?G>BTeW1vGaF0%$WerQ!o}00gk+Q1^5}Ou%`_ z?fifM1{igxKmZ7Upump6^caE$jvxk>2?CCQQfaGSK=lhoHE?wB>MY;_DBuTIwb|Z< z0`${7D4^2o4I`vckXHZn#BUE|7 zR42wX=1)pJqE%Pb0&sP>a?o2F!gR28?~Gzw(?eIYf>(W&ULe5gD8zYK04p}G8t&9y z?-gJ3)n5Pf^hi%%>4Q6fVYdF2V5P?cvMj>Gv@Md#1 z)c7V?A(m#*W0Xp#!?b5;b*}&7!)9?-VRv?yXh9fgA%OztM}yXCuNG^wwmnuBURqXb z#i9j%L2AF2Y}F$KBq0(Q79%_$5+s3Vdp7nk0>8?(JcvR-C;%e=;gXl^)+q88Kh8F7 zJA!T9c9$waY_E<6!j*0pmvI}{PPz77yw-6imvSG*VJWb3x27f*fpbBk<+f)4BdT+g zG;>SWbWay`BMWlfMRHTubzk>AP=Or^wIe=&9b6N3!AA)sG9%|e2^9BXAYgZEh%A3M zcaIl&lUI4&Wpy8$hGSTUXPAbU!-Z=YhjUnmcbJDG_=bBJh=W*&hnR>T69QrYiIX@6D!?UPKvVlv zUVgYfaKHtowurA7i?djZx0pVf;6MC>&VU0C_Yio^cY@=k7uum1LZOVg*p1&9j^mhy z55^6^z>e)$v-kr*G!+c`BUYK|jNwHKLZKMip%<)JjuTmt7nzY)_+SuBD%$OsoUHVy z2M5}r9dMwLH<^<=*^?nyd}1Ig1ct%{rj5}4M7bm04OW^A z5OEoe+kus#8JxpeoX2@i_4tbe1ha$+Jhizqxfxz^p&dAZoadRI>)D>ojbHo)U<8I> z7$OGxg9~23i2;P2nb)1)MGM-27&Q5w8`_~C8lr!xdkUHwzxW7ld7G;T0zjdVdm$He zAfiKBq(_>h;|0lv>jp}7>?|vzHTn}UxgDaQq-UC@YucvKW3tw8lt-_nr^f{fITy6R z2Tu8>i`uA<8k|oWD<&(++PQi_p&fDosi&H%s~Vyu87ssGl9PFQmf5Pm8mzUJgdj5K_9~-hG`-Jn9mMP$mxjK3vppa!+vOC+eKf9TAc|JB8lW7;UPaCyU zJCQ{@KGGPISYuL7bTeydtxVJdCiyOIl?rGTfZUmzW3X|{~N&3t-k}Dzzf{K7i+)|T)`Kd!K)|18yvzT zT)vN3Q%P1Ro_MeMTEaJ+!#jMq#+b7IZ23P3fr-(_!%rN=8TEn#cv$P@mr4<8za_PFR)szb6m)WyuFKwl11Ff^f<%Wt+|QZ$)B9K1?I3BLSRT% ze42bc9vsTIoXf!)Jarl?u=yYkhR5X%%ex%S(;Tu1WIQgq4oOzYne52TT+Qp;&S%@m zHIt&(*_fRnj1BtE16|NPyALsQ0b)R49Ei`$I;}VB%m*FPBb}rVrk@car-h=J%X-f9 zL(3)I(?1=Sfn3R)0r$jw0l0vo9UatHoz-o+n7R)mhWQ{&9ixN1)o&fw9hyM?eAM;g z$}!8r={(nmo!H4a&MiH}E85BbD8SSYq|=KX+M^wZy;!fo=hrcvrMU<6OkCQ#-P>O| zdCb64rVrpQFPc@1ko!##p-)We9uI{phJ>UNw;HmoA z1D@auevt>>;1gcqwHVHM;^N` zp5#v+)Q=a8p-sN8&=F@!TW1i+~-g;-==5t=>kr(H8-sgY5bbB7?ho0!++vJNL z>64!4k6!7U-syv$>7QQer{3s;ObW0dmc#-Jwtnlg{=VXNdmtbPmV*M&01c=f?G2p5 zk099p!kX(n$hHD^!R$Hz^etGe%$FeG9M)m%{Q?cvVH_0e1XSPzI-&toKm`!FJw5;j z6hG}BKaRuQKfqjq`WQyx9?0Z=EDlu)WWny4P997pup2&~v)p2zN$ z6q(!531Zm#HNqR)&aGQ_t`NgD=z60w=dc1b+c+y2TBrM>g*uFyH?OlHp#vq%oimC9 zltS~K3bixhe$av)=ZoMpq$KRu$cZh41zR5!s?@;r>)XGNKfnI{{QLX=4`6@-4oF~u z1}^Y|GlX#e)Yo4U1?JIU?6~quJg5N$0%niR)5>J?R5)RU7dFIMLm;fe%3-1%l!H5% zu>*@~^MD}JA?qNr&`sn3B}i}MAkx~63prs3BIXFmkQ26*10*`-kh6{x7g4YXBa75Q zM|Db!*4&kJRLKY(2{9MPLUAxsM?y+8XGfOLF=SLF7AYl63suRt;(>bZ$!DK_{t0NH zf(}Y(p@tr+-wn>VvA_{uxbZ~|4>jl(U=U))%19uX2GT(p&a+{M2YECPD>ZHU5s4;E z^y!Kam}+=fn`44r9* zbV)4#l!OHd!Lc1eYc8@-m0KR0aiDa zqYxtN7=q9e>6}w6LQu-4D>~~0s}PjQA#`L;7sO38^op*S z$+|$u30*Ae0(k2^58ocI3Ub8@xl(FYLEx6qaM;A2z z2M4_jjW_N=a|E5x>Ovz_rMU==&InPn2tx};Cal|mQxN3RPAF;*PkiylACG+U$}g|B z!GsW1gMtmwy_Vf`MYxcKwfc<^;2uh*koF9H>=5?}nYKw*6x_xg1W-PKPzCFt1D?$5 zpuy0sI4-0z%L>^hC627FIdjlfLnr_TIn==pcW6%P7C<`(9E}l4o8Tf8fk6y{$$$s3 zg)nBpkp`^m1TOhqFOG4HTeyIEENr0*UkJk(%5a7>M2W!?HX4Dr${>}J+uc&75Yu46 zQ;O>z#zqCi^UY(33n8D0ikJ}bWrbG z!Gk!!XfyGP{OFRBNrvBp&<{6$V4h~k&J9) zeg?*ch1_L_e(527uou30Y!8YHV8syy*SJj9>TsPYA14nYM6EzcN)zPEop!bq7Vuc zM!}KX?4~!r3C?helZJ`{gRXSQ5bCMLdU6@uX!drH4`8N{2zkXP-H8!+HW6{A1QkQ< z*(t1aaRDmRT;{lFIfg8Oa|#*OIToTbsz6{oX+lWR6aq(tcn1PR`wm9`89~g4U;bht>~^`%}mh=0}uaMX4%v)F?3T=)i?AM+s}HXhNLk z)`zqQ7#x{vRa`JHn(B40eC?}W{|eZKG+|LSfq)yF!BdRrv~G!w3#m-yDNZG%B(Nx~ zC+~@=Q%QDw{CuK6=LRc!LZArrY{{(*0i|0Wof|D_r5C^|AsLqx=9W zP-M>!v0@ddDD7tuBa2ta=n6p@){(F}nsVR<5r}}&IRY3GK@{Q;h_Kl<5MhWx#B2fM znBR$Oqq1IJq)Kg)!X>_COcW7w;Z6gT7+Sx_o04C?uA&m=w zz%QQzfg}ibA-{y$0nhjx<{|_I)2zt5;w7*7V0qTGuC=Xijq9s$bU$H!3uQvGl81aC z*c4HT>9#WLV`BvZLD*_gn62z$Ti^l|NbcNtq7@2I`ysc3^+T}6E~`KwDmcisxzCO6 zbgO&a>uju;lgRF_G$2k7X#gz_T)MVNjwW312u? zaBz&M93$EXueil8j`57okl<}GxW@=}hO7(3=kRs7rn7RIj?z-EH-( zYklin@4DB+^7OBZee7f}yV;>0_Oq*f?QCzm+t;1;vedwBZ?C)E?~eDpr!DSenY-Tq z4*0+ee(-+c`&j%=_{1xI@r-YLyX%5@$4h?ll&`$y8)A5|ME>%e@4V+f|Mtv>W%Hmf zz3ESn`lgE>ETm7p>t7H1*jIe@UunJUZ;$)j>;7yIh`|w#AgQ^%;P(WvBwcK;wgz+n zrMqvw^PdlR?;dPH3K`hJ6cqgGVVy0=p9>ZOJ(m+)LKB*JGW5@n{`9N;1$S{n6K-$= zp0X_>M>woAoNX4`d!_qvfk0>FasuQ>2`kY5JL+eE2Z(@F*B4Fj5EK9gL~&R+^mxZd zcl2=u{}&gNpb3+ZfF0<89|&{p(rLefpfusZGj4};3Dz`8g_pSSBPr~ zLVY$wFpPzQ^zmN+re>}{hOS_A2w@sI;9mB%XPxFEql6G8VG2?xgIH*XcZi4EwS$fF zD3MYThqZlTp?_WRgKuF^EVvM+;SR7sBb^p#7n3&$@hPR%5>uFmmxzg(I8!3XHV88j zCHR6{F^F7Ih;DI+521+CGKqilAuy=_2?eN$u_%kPxJYc{25tj4h~*FzAP_OIQ(tHw zr|1xyrM zQ(-XT1s9{Z6{Xk~6&XYqIVtfV4{nBDRnY;OkO|CZl0ONQK}jDrl@QTWjcY?#ap96$ z0h4UOI7VoZ{n!v5u?bXZ6_zOflv$~jTj>^q#gd%{hza49p$HaBnH5brbo{lCH2DyC zRw3j#kaftFb4izV*%jVJ2;h~JA#r_u*@ZnQ7ig&#AYdVp!3wW%hN#4r46)WKmYx}y z+87wa=7LlKj#x2%De#)T>6^b97-oqTf=M8ZLz+~vjFzx`z{#A=>6~OCoL51d0uo&c$&xi*2Q7U9Vs7kC<#<(~J6 zpZQr8-&qy%xgR<33b26xn6as!1!|z($)8l=p9jjI4eFr%k)Teopbtu+6>6apiH{em zp&QDfbrGRKF`*qQq9aP8HUyt(5u$`hne&D)paMSGr`jof0&$ctV1Lth1HYJ| z$66l{U&!4;kgs=8vWnwqKo zaFko&1}B;oJkSh*Vgawp5Nwo3X_X%k00*q9G$EB0u8J+0<{Wm=tq!pP{u&ng%C8E+ z0>S_c>qs@i;0wIktIWxMi}HT)mqQqP1YBT$iYkikdKQSPpdgDD72sjpFbINx2pXn2 z2N4MCu&^k>sL`4h4UnmKx*z(W4iq5<{~)p)L9PnX1pAPw^WN5O)w)|H=sT>Hq_DB?-hFVY?MzYZhHw5pxBx3Q;xc zQL)^)fDZwD3IPUx37By~vJz^tXHhxhFcq-XY3D!=eL@47I#6wtW7gG^ZuU#QVVsvog&y0Jg_KUh^(_|A2)y-Hk&^y!x0tGtuSG2bJJ{2aRixK5ivjm7ZC%r z2?2E105{;1zPGS$0J#*wv=u=CJYYIB;5I{x5R=;vSlR$QFuN~Md<`+VpQ|wHTWtK> z5HDc=xplD<(aR9B+knkcy023a5Rkg*#IKMxUOYj-2~i~td=PDA5krv@9MrlC;2oxh zzO&1~(t^Pip}`bkzz$Kt6k!xdF%fjq6c6zNJm9;OiGwXsg2elo6B!scaYYJa2(@t= z>EIi#@kP0^1VTJZx5OL10UQev1n8h>hd>-sJQWZi2uA`fzR^_^kqx1Xu9|8M3gH6T zfVrQV4WfY!KnnrZV6>ka4F|yk|6r$>TMw6sx&0tFhE)&f+7H~C5MuDfVVtS@fDzVE z4`&?4Itu~Qpvd)5tP2qhXS@&1P`y(d1DP7f6mbOg;18L)51Wh-ncTCEtf|?+ZwC?o z4T((1|8NZp;Rcvm$o6;*K-_xfMQHV46Vuc<>F0!tnX zAs*yGufU~g#XPnMF+j%_%tCg|AGH8VkZE?1M(xbZLxvFX+$Hl|%@BZUaFAROkj~6J zY6*cJbW0KK@g5E_$N!+qHB6UU=n{v;seKCNGhV@xho zeYAEx(jIINpBfH>><{*MuJtg;);hI6`wz#~422xkb_^7Y+Yi>N4{!Ys_K*-y{nnLD z)mDuVwd@auE!CpD0Bd{={gBpD{SOkz1yC*3cAX8gn-Dp`4z+FDw+)pG?9Fi?&0(^y z2kp&S;?3Z(0d(LdVPf3IT|dv962XNf;j9pA5(fjM2vy=%i?9fGP#tb`2Mts^uFEEL zpw1iw0m=Ow$xR2c0|&+}N86m-Abi2$z1>35C2o@4_k0j?gk%rV%~s<7M&6u8RRT0u z;@!=>0PC&HR)XH}{m=6KCf1DGnxi<_w(t=Jun5Pht_fqbpm2L_qS z)uny3-0=c^tmm71=Q5#&prPrF;R-DwH5AMU8m`|M!5qDn5VVv3z!L#9cK{x*OBCON z-yRGeN9Mt7QcNI)5lWC9RbuK1fnyHAEvri|%^^EfGSLf=wlzTk-u*=$_Iu2C7aCRSoVp4Lph&IlH4QgQnbueOWzpbwl&;_t|beQA#e z@hI(g1T5a-@UD3>&U*en7CL?#}N_EYc{(c}$5 zzWtz?m}}_g>TZ|35rY08e_iHtld1K7<`kjk4N(K1n#!GqxjbmCah(u-Jhin<=U#LF$#UT|@C`KZy(ZOu(B*y* zsO}JOrK+gPT;9QH%z^c!qrwz)5LL2FX98pj0W?}~?iRf5!oC1ie@sJW0l&TgOM~Cu zv9(0D2-XGx8Rg9i0aptV>|g&hc@N>oUM>s4_X{z%SCcjI-kY|Fi`S?S!|DuRkmBXV z@1qCs`&as6;RH}}8#T@ltE4bC)8iDeP!F{b3$+fCT2Kh_RY+a|y`j9HXuS+k%XppH z|3Lf;Fy#(Wy_NpSHPOf0*T?Ic@)NQ04AIy*f9U@(4G6*U3gHZQe%3Vq5SVJ{2Z5<3 zDCm8?0FyiPHUG3MpQ%$Z<~hH{*pDEY3iP{t>29I_Oxwck06~XQoCO69GGdg(V8IIr z7d~7d5aC3Giwr7ZqzEELix(Y2G`NTng@Sbw7KFnH4oHI=7|ecw+5TOlsa&7Ie#{I1I{$2thBIs7>gnrF2x7E<>fCk@4{_SR ze){a+@1Ct7gyr!Ix}nb?Yoeinrsnf7P%T&>x2^*WwcR8AB8khNhhVWQcEwz6fMWT zcnE^bY=h{9Pfzn~Qqd?qHB;fxS*H;Hh@M!79Ha(84ldOK0qNFdqkW_Op&Yed-A(z4h9A??9Hi?I&Gz)1B~z z#tv>E(<_r#15Jlx`S)D zN>14+q{xJb$b~S1dFdh-n7QT}iJU_=m#p;qXPUNzs7sg651K&~VY3Aca4ASJ$;cMK zKanUTYWU+{r;LIYjA+eI;uA`iSV9Z4$fW~oF#+5}I6@MZ(1a&MVG31fm>W0)44oPk zQu4Mp#q=#wf4gDe%%-b{kYgQA|DZ|Z)*%D9EP*v3G2%HOa-2adqypP02O6FbguBUw zb0A6G!X7dpeueHI)nbWqNVkA&eaBo7=#Cg3vX6hbZXvKM7Y!FsuzJxXjSrEIi3;+9 z?tqad%~In-n)NK={VPJpqfqi7QiI~5#d!-6k;9nRD3{bh2}#i4LIiR^w~!A<=A#Kv znsy}iAw?uIW5oBGR5J@22_#=*NdzC#K(wT!l~8e#91v2)f;5Gb25Ab)p60+ONv&p7 znZ((`SgPaNEuK#B>4|`71DSiU4V782$2SK=NXRt z$4vLru!VHAcaT~H{-p8}UM_@4ygV6FT9!%pf$}HaGv)i@w?LZ-1erNPk}_kNk@6uE zB0TXJk(|^rVSUbF{TX-Bk0PwfYbS7K?ZpNJ}e3m4E^Jz zA4Mcc2BZ)FxS$ye;le-s!Ks2YSC0juKzI6)ScAmi3)ozM3%YaNJvM8m{(7l==u^dm zN_GJd5JO8B@W>GHw7>sgZ=?JN2MZL~cMAw#9m48N2hgZ|Wd#Y4>>!)2c&wB$D@iKl zSF@gY#FzzP(aLDz68%+eAZTsL_dpyZ#hQeG3jk7(WCMW$yND5VK(PY^a!b1wgiiP) zF;flFvN)jlW-6{=Gq)yUkRVDJWrGW$48@W!*hh|q#d4Olyk#zT8E%Vx%oiMk*vMc8 zv0~0!3@3Z#{}Wl(QEqM&Zq{LrZBQeis|juYeuEA~7y=P_Hi+Vo0s%o3;t+^n)i(M( z2+l&_H})*Z?0f5U}HZJB)Z^^ak!@&&_D2DjcnA%Iv2ff zv;GkdR_oLt0Q!eMSY3~~g~&O%&c=C`^N?=U;~LHx(02=R1X<_09^EnIe~hb-YpA0; z`iKmC4++y67`GqUxJEbvT#!_M>pb1*^?q~uJcy)jI=jB@VPYJzIM`-;2-z8x0tife z%Rx%EN$Q|qR0leQ4}&j@Dk@cJvz9G_4s!?}kc8TmMa)4;DqhF{gEWUaK$zk?(lV$#77wVRoFW80xW6liM<82tqz8SNPf-|Gg;6qEF z!w@&1$!9Hhj>UzDRYZ)trS-m!qsUW<4`Jev2XPK`kYgO=sPsHFJ#3m#pw$M;h6^A< zYLJNWq1pl-1X4|(Y~Z(zAi2S>mor8@LR-7sT}U(7xSU)MZz0owc0aD0uKro0*{-(D z5k%jQY1l^FuaE9Rs?7T1cBa|%u}0wdyVHL_FGQQ4?};p6l11F%4vGj9gds2o?%Bba z|MzVQMF8&9^MT9`LcXy36u#k`Y5XN&xr0!tN|7}!gaR%`h*$3)vZ4>k;4)sNhu8p< zn+P2tru&kJ{L>tov$@y6zkOSP{iBHfd#YPnvF}R>`hy4*0HL?wAZntCk%FnKBf%0h z!4pJ5EwhY4qksw+JH#kEv^zUSNjm|nfFPivw{U7Uki5Ns03JAk7bJ{^ zSOlZ%3YMUN3!s48qA?3l!^X1!BQp#Nu*0~B!yXKg0xPON9JD@s3qC9=3joBr|ER-3 zl*7ItM3yKE5JUZ!P2|K*^u$jDMNMI|)2P8VqrwwBj=FOq#S6t&91LA* zxz3s(SER*X09yEkUn~$B$VY*M$cU84iJUrjG(}W# zMiM*@)+h(UTMa~bNQ&G<2XL{V0vQMs$&^&dm1N15bV;|d$aplBj3hxP|3HLo7zah$ ztd}%Kj;Vt?AUHT!M4lwdqBP2*M9QReiqO11pTvvkY1gv+>;%ekb>ZAweVSWCQY%ev&tzVyq# z1kAt`%)ung!ZggoM9jog%o4oI#mGy?+{?w3%*mw8%CyYOtjJM(N{qzJ&h*UB1kKPC zO%!TO#du89jLgwg&DCVh)^yF+TuROKO3sAM+O*Bv#Le9F%+gGZ)9lUE)Xm@&&fz4^ z;v`DmL=4|dPT(}o=5)^IgwE&$MdUmT<*ZKTl+Ntb&h6yR?(`<=|1=Ei3{UJl34o$2&8aTdxNH?il zj_2x>BXEOgXol6%M+?}18@*9QY?}s90Tn>6yJ!P=kOsL3(jgVB76l2JLJSm8fe<>- zC#_2`3p-eYq|C4{(1=jNm{2XPP{KGZz*vGOzzZ_~gfcDDK7fcaFw-*i0}{7&n@51KF$#Bz+y@BEEGaj6PiqJ)IN?{}9Sg8k$9rgP}x=4LHEW zAV^`rgts69{$vSmfCn~^3r=l=!2(obBUHn%#9(MTC{Hi%ph5GB7_(~EL)vPi=7nOFo%M00Nc_F zN8`Jk!995Ef&t#ei!)T&8(_vWJjFAt-A;L2 z=L%lWwZ$56UWkw~EtJ~oeaX7XNLsxCtd&^4|2f&^tUyv9C zbV!7Put{=Ym0m%I`aK6wxq&-l4Qez9wS9|_UDmqjjwWaZS?dRLbqfkez>t~LH~<+1gQPiN5vu_d)O`q} zSpZ#PGJ^;>C4kqE!5<5lYtXFV;QQ6XQ_nmI!{Kv`7@B=nh-6-fE6WQK8bxgV-p}TCM!v z>kQvWQH?|>yqjc|aaf4qz|hu02Z1UGK|lmVFo#%)=Xh?Sg;3w~y~))$gtP^OkNsb^ z72pp6wqLUy>!^ltAsxs2w9)&tPg_w6um}1G2OZw7Ey|EjYZl*v3s_)>j|ORwh6TD{ zwP3U1haR^h5U)?WwqKs3FG@BL{|1qM*avXQkMn32s57Hp*5O=>3@-RIgMR32kd2bQ zwxQnB)bWRUFzMnmh=M8T=@@3_libwHXb7%{Y~ws&gEo6u2%`ozls;zdV(MQr$9+kc zdJsL-1L~$8YNDnK2&j@caASm^gGJqsfr~jc2@!Xd2!iwLHL>H2vzeokAPrj}cO4*@ zbJw2j3OkUJ{9~CaAvhOvCfY@dHjoBs_y&0JhRxpWQwWiMO@(*x233%TeqCBfN(EKW zhEx96{*eZF5C?8R?ansRxPa=iHZIZwkn>pT5>9CQQ!e@twiFH#<>Kj_9^;peY6$-2 zW?;2x1_`w8<+X;SoSp_M|IUVJK;!9U33mYaOKTHw@8fgBT=; zm>t@gwaAzcZ2K=wtby-!hj#wvxU#X45v7NaCHv!R@KUQW zfvV1$)Pksm4uT7B|A2?1eTbx0T7fNyDmY~z0EwhsZHQ0xix@C2)VqQ8 zx;29d56xQ+k4c?=*eD2?&#%t4zi8F;VO2qCA4y`8aX_@dvj^9hD*x?aG%z+T!kj;w&Hd27q`{?V>Nw zLZ~*}GQW$#|ITAMAF^2l+djXN)3q8qNaQ<5B?Zd!IPcjrUkF`VU5FqX#*yUQm1Iv2 zky8c%kkDO_nC(!-i!8#UG5?PqmkbDJc(-KzWPu(#?Z&T>D>@_Gn-!r*t$XLX%|YF_G&GIWkWVvm6@ zh=B2Nw-DDwYNR&;9k=iL=gK3u03>E{aDQ3R1>how2MMqT74{e-4_RXI{&^esea5oAI! z9}i~xXD#6oi98l!Qwj55y@W3$#yD8--!p{K{)G#9Fqp6wLXRR%s&pySrcR$ijVg62 z)v8vnV$G^`E7z`Gzk&@bcI+2tgfJScVfG*dvuM?F94qw85xGulys&#WuU@Cy)(J`o zVcohL2obFtbnwtRLkkTx4k?3hIdYaQmm`eU3?M#BH30G>wPDoz4_GqlwTX$&d{(hWp3G;Lm6XAvCj=t)4#J z3S0I|YCPl@iMVsu*2&YROM@o=H8=`EB5Z`}{#jo@Ln3R0w09>o-a_SlbY6Gq859$M zZ1Kkuf>Xi4h#d&o!AKkk#lZ+8ig4JWhIJ^Up#>q)!H66PQ4k>`N?^zc9S21SqCzo- z1c8Q&bjaZ%A|f=0hK$TH;zB0~BTRfs36x5W@4!=^L2AIm%|Z|`IYUTDFd1bPP|a7M zf%H}MpnA<5WX(SdhV)ZV4x+ZePCX%X(?2gM6w^v|o+(&^1|?V1K^jei)GxwR|00~B zha#G&qKh)xsH2ZU8mXj7mG#hd&NzdS8_x8XmNTUtN|&T~O-kyd5TH|7LP4y9PH=*( zgNQ+_niJeXlJW>(2kVc?RyPR@DHFQvP(=AZlLC^TMPd(h_>0o$B z38;`q*>bz>pZ}0~U3&|hmXlD;{v$C$FgQx z`loJK+?S}4nhJa4kuuS$0|`MUD?(4KL(T#Y;Hs-a6c8r!LWmWj6tSO$HrhsP1_vHR z_Z_#8wF;T(Em9D;u~WcK!4kgs!)-7(2cLY3s{ssS{|oNaQY#E zAtw6jx8`9Kkcb%M1Ez%BCqEmr75)$cGKBPRU`HX`-#TRw@L0tH|2z7T9WIa%Ik<=^ zI#USG6mkI#8P6b4gTn$WzzConjS(_Zh>aMLLZwgugd;SF35wJKr9c24@37TD+5it} zC2c?_9(n59|`123I#T3NC<#GYAj% zArbR9DI|lU1n25#$2;ONk9yoAA18GKXMjO4n4*YUFlER?V# z%sFzEkQ=Py9193UtU|&&--YBaflyv&n1?K=G$cOAdE*z|A{Y8Q$~%rFC-c%U_#!d zF==+}d+K@SL82MUz@1Ey&7{f(WT=EBOzj{_V8k6n$cT6zq=X4+rwtL3gbghKggu*) z427~Iqd5fv6`G+z8c-w@D5VPU@P<&h0S`7L1O`H+qD3*P6s~2>DGdoE7H#RkEiQn4 zC8d^oOiE2QmGNT9EZI!EWI--;OAKF#=~0TLf<6K@s6rhoQHyHS%C%*5&GaA* zXb8E|^pAZcBsqXH2!Y_05HqdGG|u|wIU7hA`>YDgup$>jx>1BkVHrkLMahLnKDo5CIlEoLDCVI1P?1A1WHn(VU?Cb zC3vV!FwFoCW)-WDES}VF5pnFq{@U2QbK)R#6r*_apNJs`J6LvXMFrEwe37fy`=EK*2?a7IGpvPDG~ zN=Sr!G@+326Q2fAnuWq@kPQ&mAWFDwi9CG}ObEjkN>N3WLc%q#B?N3@Q^>DFQiTX4 zgxBK@v_t}>kQk&gI9vc7e8&W>kANWH^Yv= z10Gm9A(aruFN6Yt+Yq9``rbFc`|a<4|7%6Ug!n>PAbb?KD2kC;g`}f6yr|l3qa5eh z1|o2Ejwgf!G3a1%NMN;&au@;;+c+y*GLsH+h&(gpPza5YVq>|c#2(l1o{-H{o8G?H zJld%T=)UDWeQZY~j15yi>R}CQghMshXw;K=(~x~+BO7k)M;xmx%%N*}e(%wTcC^(+ zUP{F1+aY2NRMV|%gk#J$*T=sO)N|45W9CI~NK7dZ9rM(~H_LK^YT~YrhUfz=fc8(A z7f|-vWCQJL$2)f#0=jfBIw4>ddp)S=8&&#jX%;eUg*H@&IuMN!3z_E&=Rk)##F}Qm z{cY5e_M=UQB=mKd!|W46`bB)+{|-AEwLx}d2Rg`s4jaTLkqVp?BTh6Gs?Y`qirC$R zD6u|BIEC`D1`cVYA{A+1%RAn|4OOIq8%q2J3>+Qykhq~CMGpr)-W)G29yta=*M~av zp_(*8U?=@h$2EkW@Aa97+~wV9Er1wIL)U#oHdwF1bl(&?3REnm4z)5h9Qc>DGCcFiX;U=1>j1njGR#L3OY0y4Iu_$ ze4Gwe5@Af7@C-{S!PO}}g>9sixH#KFR2JqfgfsZYKllTrHG>t%JH9(RWh>JBq zKuYk`0yIPWU12uFlooO!1s=rUg;QSDp#R|{feu%0qz~j(DQa}LM zz=IHd1449EMs3tVbi*-1V>BvBYn)9qf|zl`#9hlDWYxMhHsqP0wMNj^uy&b_3 z2xV13fKHlV1AIa29K;DNLafP}hSUh9;UooI08BCk2-%vwf#p$%B}_tq1&pPuErbaW z#ZM6<5WoOVN+k#Y0TAHiQ!2$t#sFRtqf#D4Pbwr)ibYH8LmUwTIB6D9u)s9^gR~%I zWm@KCVrFI<6+=E`sidUlI6?0Srd4>PP=I7usFY@^<_Ch%DjI|Xpb(?%h$})$KLW!K zttRD|2_AMy|5P4?Fd~IU%w%p7XK@jm&;mf} ziIvIce*$QL3MdFJ=T$wYbJ~$pRR9`PQi|C{8T3JfMyMVr1P4fHgzf=YI29Lk*?@Xz z9%YCkGz|nO!R{dnMQECa(59rcz%T6QhxWx!v>{uh-#;v&K~#c^5@S=sXpj2nj{@l( z6=(|{=%F;H2Q>|>Xb zX_=bo|CuJ73L0sV8p@GQ${}pSHW&iQ@mnDN3nQXwp7zDd)WIFp0Uf{rS&oGg)WPo| zl%6iw7t9>nWkWQuDWXDZq)O_fu9BLz>7(|An^Nkga%!h~>ZgKgsEVqj4rzvAs$OX7 zsH*C!vTCck>Z`(Ptm;vzBIu}`s;uH_uIlQp@@lX8YOK=gntJB15^J#<>#-thvMMWi z2J58`>#{;?v`Xu=QfswZ>*X}7aHJ}#-s-h_>$ieyxQgqzB5Ss0YPXKXwvy|*vTM7# z>$}1$keVyEK5M+%>%HP@zUu3~66Czvg}TZG!1C+B5^TX5?7<>z3fgMDCTznx?88EA z|HMixd048pqN`X4?8Iv9#&T@OdaSSdYrtM?SY)iEASDg0SIP=%9<`+%y?`2M4O8&t zSR8>HL_;%tfkQ$-69^a&q--;wAO~)M5^!baU`L~I>K8OaQF_G-0PR8Ez;J%-)DkQN z#K2R|WDIES)@to&c16gh>&Svd$%e%d5Zu|KtwS~@OO=y6R;(TE$a#uI1E_!s@TXHW zQB<hGNSb;o$!#y!_6X^ zr0fLJdIc-d5Eozy7bvcV9zioi!xyY9R&31bhJ_2DZR`?UeKY~uy5WF)0TCSm{}|9o z3=o{Hh+xm5NLfUK8(5VXxWOQbpzOvjTQKkJKE?7fFKjF?5mj$%Ja6vO5awzwlr8`d zWG}&$82B=887;5(8Uz<;Z$dNx57=xo2=4;Wt=&>>s7jb2{onc^5~hf4Re&wV_ODlv zEm-ueJpMy{8U%BML<5{8fxK-U#jShRrunKz(MIE1Pf0Ws4;~HNCGK9u0n(WDM-TPl5FKlr85L@Uo^lp zMBx?sW@`{JqI9lZfG$FafogCeNh!(^SfSrih0iJl+x){48_Iha@Eh5~|H8;)JyD z@e+cW0SiuLxfk7)L?RQJya|IZ+-?0v>I;aD8#KWU9Hk%u5*V1WDa&wH{4dECF;@)m zSEK~cMcpiaw#6JNeR5XAuKn@Un!!(lDcQwTfAc0uy#F!og1&Dz{ zMg$yx1qfBej{NEAZBTncg*6}7Kq&#$Jt@F)QBSC~^O3x!EMaHH5;&5u z;4C>YN{K}j^NG$)gZFr@UEox0TthV6-O@>gHBj?Ha6vnJ#Szf5|3-AnEH5E8VZ(O# zhWd2L8rO};1jiePjQZ8XG(>|Kni;c6A@I_&_tXO|=dnc4vP3_{X}omQE#YZ6i5HtM z7l1+c(1aU+0qG*dJ4Zu2&+|dJ0WG@`)Xj2f(7+dn!B60aPC;p9+4GeVAOr^BNC%ig z%-b()GAHM0QZ<2EehQ?l^4PZWR=l!ToG@18GJ}E8FF!?o4x>^Skp?3~u|w*a|UKm^!uZXX?MX%}1RK}J|Nb0=M;}B6(!}g+b~n)k zjx7YmIOJ)3byFZWQkY3L?Zk~D#NFT*LSVK-2nN$iH&PgPU*&dc83ZL8ME@jHRE0!- z)&f{ls^_#eLX=L>R@K77x1_Z7RlN0ez}xnmJeTwn5+nP4wkQScH%n#CC%bd|1VD%g0`|)IJDUb}K}WH-(|s*FP|vUjdAhfcFAS z7E?3;Wb!1_qPK^N&U60JdLznNqjOqo#aeg8e3RKc;xdqbM?Fw+KWw8zOQ1ifgQqWq z3(e384Yom)2yvB2;?BVaEy60+(2wwPYs^9CEsfm90V>vkr8R(d8O2c`fhu@ImULhD zP0>MElo}vGH)IJxD8x5h`#Y$CP^iH(LL)e&!e~ZAH_9VRZJ~`KMTMiE9qI$E2NxZL z-qKu_1t9w(7&dd|I*hy!LTmud{0JS~kOkJ01~U?NTyU4e*_?Y?IzlrJSVb5fC>*(LlW~` zH}yjUxPcw6qe9$(_xM9SyucH;22U@dtwhsqfB~zU2l}StXEnn*X~c97nn}GjAqbra z*ZUO$+1)(l7Vg72nhDzy2w$YcQ-*yuL{B!z@f&$Bf#7kCxO{EY15cT~B1%NsQ$?Cf zIzBIeJ;=Kn-}Xk^XiE6aoWDo>F2qmpq0JY!L>#w77`RdZ`cZtFQ}MM>C^|y0(rAwU z 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

+|>}|4hVwAFNPNAWED+@E?>1&be?RL{X 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 z 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 VC;jBtVJcZid_7iB>n;x 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Àu7JV49V@1X73gWl0?hspavP3 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%0A`hhTNP_u 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

u9sy`f?&mgP6;2WJQdViLnxZiWhJ24%R&{F39U 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

$~H_GQU%0 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 UWdaP0f1u0l52KuvqPq$JJD4J_MgRZ+ literal 0 HcmV?d00001 diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml new file mode 100644 index 00000000..4f966c97 --- /dev/null +++ b/spring-javaformat-vscode/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-build + 0.0.36-SNAPSHOT + + spring-javaformat-vscode + pom + Spring JavaFormat Visual Studio Code + + ${basedir}/.. + + + spring-javaformat-format-service + + diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json new file mode 100644 index 00000000..40ef0758 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "configurations": [ + { + "type": "java", + "name": "CodeLens (Launch) - FormatterWebApplication", + "request": "launch", + "mainClass": "io.spring.format.FormatterWebApplication", + "projectName": "spring-javaformat-format-service" + } + ] +} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json new file mode 100644 index 00000000..0e0c2a50 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.formatOnSave": true, + "java.format.enabled": false +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml b/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml new file mode 100644 index 00000000..24085434 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-vscode + 0.0.36-SNAPSHOT + + spring-javaformat-format-service + jar + Spring JavaFormat format-service + + ${basedir}/../.. + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.8.RELEASE + + ${main.basedir}/spring-javaformat-vscode/spring-javaformat/runtime/ + + + + + repackage + + + + + + org.codehaus.mojo + exec-maven-plugin + + ${main.basedir}/spring-javaformat-vscode/spring-javaformat + + + + exec-yarn-install + compile + + yarn + + + exec + + + + exec-package + package + + vsce + + package + + + + exec + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + checkstyle-validation + validate + + **/*/FormatterWebApplication.java + + + + + + io.spring.javaformat + spring-javaformat-maven-plugin + 0.0.16-SNAPSHOT + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.1.6.RELEASE + pom + import + + + + + + + org.springframework.boot + spring-boot-starter + 2.1.6.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 2.1.6.RELEASE + + + io.spring.javaformat + spring-javaformat-formatter + ${project.version} + + + + io.spring.javaformat + spring-javaformat-formatter-eclipse-runtime + ${project.version} + provided + + + diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java new file mode 100644 index 00000000..58f9980f --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java @@ -0,0 +1,35 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * 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 + * + * https://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 io.spring.format; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableScheduling +@SpringBootApplication +public class FormatterWebApplication { + + public FormatterWebApplication() { + + } + + public static void main(String[] args) { + SpringApplication.run(FormatterWebApplication.class, args); + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java new file mode 100644 index 00000000..2ea27463 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java @@ -0,0 +1,42 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.controllers; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import io.spring.format.request.FormatRequest; +import io.spring.format.tools.FormatContent; + +/** + * . + * + * @author Howard Zuo + */ +@RestController +public class FormatController { + + @RequestMapping(method = RequestMethod.POST, value = "/format/code") + String formatSource(@RequestBody FormatRequest req) { + + return FormatContent.formatContent(req.getSource()); + + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java new file mode 100644 index 00000000..43ccceda --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java @@ -0,0 +1,43 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import io.spring.format.services.HealthService; + +/** + * . + * + * @author Howard Zuo + */ +@RestController +public class HealthController { + + @Autowired + private HealthService service; + + @RequestMapping(method = RequestMethod.GET, value = "/health") + String heartbeat() { + this.service.setLastHeartbeat(System.currentTimeMillis()); + return ""; + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java new file mode 100644 index 00000000..d74555f9 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.request; + +/** + * . + * + * @author Howard Zuo + */ +public class FormatRequest { + + private String source = ""; + + public void setSource(String source) { + this.source = source; + } + + public String getSource() { + return this.source; + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java new file mode 100644 index 00000000..574652a8 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.services; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +/** + * . + * + * @author Howard Zuo + */ +@Service +public class HealthService { + + private Long lastHeartbeat; + + public Long getLastHeartbeat() { + return this.lastHeartbeat; + } + + public void setLastHeartbeat(Long lastHeartbeat) { + this.lastHeartbeat = lastHeartbeat; + } + + @Scheduled(fixedRate = 1000 * 60 * 5) + public void liveCheck() { + if (this.lastHeartbeat == null) { + return; + } + if ((System.currentTimeMillis() - this.lastHeartbeat) > (1000 * 60 * 5)) { + System.exit(0); + } + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java new file mode 100644 index 00000000..4079c720 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java @@ -0,0 +1,62 @@ +/* + * Copyright 2017-2019 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.tools; + +import java.util.regex.Pattern; + +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.TextEdit; + +import io.spring.javaformat.formatter.Formatter; + +/** + * . Format specified java content + * + * @author Howard Zuo + */ +final public class FormatContent { + + private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); + + private FormatContent() { + + } + + public static String formatContent(String source) { + if (source == null || "".equals(source)) { + return ""; + } + + try { + final Formatter formatter = new Formatter(); + TextEdit textEdit = formatter.format(source); + IDocument document = new Document(source); + textEdit.apply(document); + String formattedContent = document.get(); + return trimTrailingWhitespace(formattedContent); + } + catch (Exception e) { + return source; + } + } + + private static String trimTrailingWhitespace(String content) { + return TRAILING_WHITESPACE.matcher(content).replaceAll(""); + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml new file mode 100644 index 00000000..8a9d523c --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml @@ -0,0 +1,5 @@ +# 基础应用配置 +spring: + application.name: Spring-Java-Formatter-Web +server: + port: ${port:9987} diff --git a/spring-javaformat-vscode/spring-javaformat/.prettierrc b/spring-javaformat-vscode/spring-javaformat/.prettierrc new file mode 100644 index 00000000..133b8992 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "printWidth": 110 +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json b/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json new file mode 100644 index 00000000..0a18b9c4 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "ms-vscode.vscode-typescript-tslint-plugin" + ] +} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json new file mode 100644 index 00000000..f5197783 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json @@ -0,0 +1,36 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "npm: watch" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "npm: watch" + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json new file mode 100644 index 00000000..baa30361 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json @@ -0,0 +1,15 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off", + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json b/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json new file mode 100644 index 00000000..3b17e53b --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscodeignore b/spring-javaformat-vscode/spring-javaformat/.vscodeignore new file mode 100644 index 00000000..ed3f9d37 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/.vscodeignore @@ -0,0 +1,10 @@ +.vscode/** +.vscode-test/** +out/test/** +src/** +.gitignore +vsc-extension-quickstart.md +**/tsconfig.json +**/tslint.json +**/*.map +**/*.ts \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/README.md b/spring-javaformat-vscode/spring-javaformat/README.md new file mode 100644 index 00000000..5f38bf4f --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/README.md @@ -0,0 +1,6 @@ +# spring-javaformat + +> Format .java files in spring-javaformat way + + + diff --git a/spring-javaformat-vscode/spring-javaformat/package.json b/spring-javaformat-vscode/spring-javaformat/package.json new file mode 100644 index 00000000..0cc76709 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/package.json @@ -0,0 +1,42 @@ +{ + "name": "spring-javaformat", + "displayName": "spring-javaformat-vscode-extension", + "description": "Format .java files in spring-javaformat way", + "version": "1.0.0", + "publisher": "howardzuo", + "engines": { + "vscode": "^1.36.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/spring-io/spring-javaformat.git" + }, + "scripts": { + "vscode:prepublish": "yarn run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./" + }, + "categories": [ + "Formatters" + ], + "activationEvents": [ + "onLanguage:java", + "onLanguage:markdown" + ], + "main": "./out/extension.js", + "devDependencies": { + "@types/glob": "^7.1.1", + "@types/markdown-it": "^0.0.8", + "@types/node": "^10.12.21", + "@types/vscode": "^1.36.0", + "glob": "^7.1.4", + "tslint": "^5.18.0", + "typescript": "^3.5.3" + }, + "dependencies": { + "axios": "^0.19.0", + "markdown-it": "^10.0.0", + "portfinder": "^1.0.21", + "ps-list": "^6.3.0" + } +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts new file mode 100644 index 00000000..d382b919 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts @@ -0,0 +1,28 @@ +import { + DocumentFormattingEditProvider, + TextDocument, + FormattingOptions, + CancellationToken, + ProviderResult, + TextEdit, + Range +} from 'vscode' + +import { formatMarkdown } from './formatters/MarkdownFormatter' +import { formatJava } from './formatters/JavaFormatter' + +export default class SpringJavaFormatter implements DocumentFormattingEditProvider { + provideDocumentFormattingEdits( + document: TextDocument, + options: FormattingOptions, + token: CancellationToken + ): ProviderResult { + if (document.languageId === 'java') { + return formatJava(document) + } + if (document.languageId === 'markdown') { + return formatMarkdown(document) + } + return [] + } +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/extension.ts b/spring-javaformat-vscode/spring-javaformat/src/extension.ts new file mode 100644 index 00000000..6b848bd1 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/extension.ts @@ -0,0 +1,31 @@ +// The module 'vscode' contains the VS Code extensibility API +// Import the module and reference it with the alias vscode in your code below +import * as vscode from 'vscode' +import SpringJavaFormatter from './SpringJavaFormatter' + +// this method is called when your extension is activated +// your extension is activated the very first time the command is executed +export function activate(context: vscode.ExtensionContext) { + // Use the console to output diagnostic information (console.log) and errors (console.error) + // This line of code will only be executed once when your extension is activated + console.log('Congratulations, your extension "spring-javaformat" is now active!') + + context.subscriptions.push( + vscode.languages.registerDocumentFormattingEditProvider( + [ + { + language: 'java', + scheme: 'file' + }, + { + language: 'markdown', + scheme: 'file' + } + ], + new SpringJavaFormatter() + ) + ) +} + +// this method is called when your extension is deactivated +export function deactivate() {} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts new file mode 100644 index 00000000..e66942c6 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts @@ -0,0 +1,10 @@ +import { TextDocument, Range, TextEdit } from 'vscode' + +import FormatService from '../services/FormatService' + +export async function formatJava(document: TextDocument): Promise> { + const code = await FormatService.getInstance().formatCode(document.getText()) + + const range = new Range(document.positionAt(0), document.positionAt(document.getText().length)) + return [TextEdit.replace(range, code)] +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts new file mode 100644 index 00000000..e8c334f7 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts @@ -0,0 +1,28 @@ +import { TextDocument, Range, TextEdit } from 'vscode' + +import FormatService from '../services/FormatService' +import MarkdownIt from 'markdown-it' +import Token from 'markdown-it/lib/token' + +const md = new MarkdownIt() + +export async function formatMarkdown(document: TextDocument): Promise> { + const source = document.getText() + const tokens = md.parse(source, {}) + + const editsPromise = tokens + .filter((t): t is Token => t.type === 'fence' && t.tag === 'code' && t.info === 'java') + .map(async token => { + const startIndex = source.indexOf(token.content) + const code = await FormatService.getInstance().formatCode(token.content) + + const range = new Range( + document.positionAt(startIndex), + document.positionAt(startIndex + token.content.length) + ) + + return TextEdit.replace(range, code) + }) + + return Promise.all(editsPromise) +} diff --git a/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts b/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts new file mode 100644 index 00000000..062ba02e --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts @@ -0,0 +1,103 @@ +import * as child_process from 'child_process' +import * as portfinder from 'portfinder' +import psList from 'ps-list' +import axios from 'axios' +import { resolve } from 'path' +import { window } from 'vscode' + +const JAR_NAME = 'spring-javaformat-format-service-0.0.16-SNAPSHOT.jar' + +const RUNTIME_JAR_PATH = resolve(__dirname, '..', '..', 'runtime', JAR_NAME) + +export default class FormatService { + private static instance: FormatService = new FormatService() + private port: number = 9987 + + constructor() { + const hideFunc = window.setStatusBarMessage('spring-javaformat service initializing....') + this.init() + .catch(err => { + console.error('ERROR:', err) + }) + .finally(() => { + hideFunc.dispose() + }) + } + + private async init() { + this.startNextScheduledJob() + const proc = await this.getJavaFormatServiceProcessInfo() + if (proc) { + const matched = (proc.cmd || '').match(/-Dport=([0-9]+)\s/) + if (matched) { + this.port = +matched[1] + } + console.log('spring-javaformat service is running with other workspace, no need run again') + return + } + const port = await this.findAvailablePort() + this.port = port + await this.run(port) + console.log('spring-javaformat service running') + } + + private startNextScheduledJob() { + setTimeout(async () => { + const proc = await this.getJavaFormatServiceProcessInfo() + if (!proc) { + const port = await this.findAvailablePort() + this.port = port + await this.run(port) + } + await this.sendHeartbeat() + + this.startNextScheduledJob() + }, 1000 * 60) + } + + private async getJavaFormatServiceProcessInfo() { + const list = await psList() + return list.find(l => (l.cmd || '').includes(JAR_NAME)) + } + + private async findAvailablePort() { + const port = await portfinder.getPortPromise({ + port: 20000, + stopPort: 60000 + }) + return port + } + + private async run(port: number) { + return new Promise((resolve, reject) => { + const childProcess = child_process.exec(`java -Dport=${port} -jar ${RUNTIME_JAR_PATH} `, {}) + + childProcess.stdout.on('data', data => { + if (data.includes('Started FormatterWebApplication')) { + resolve() + } + }) + + childProcess.on('error', reject) + }) + } + + async formatCode(source: string): Promise { + try { + const result = await axios.post(`http://localhost:${this.port}/format/code`, { + source + }) + return result.data + } catch (error) { + throw new Error('spring-javaformat service is not ready, please hold for few seconds') + } + } + + async sendHeartbeat() { + return axios.get(`http://localhost:${this.port}/health`) + } + + static getInstance(): FormatService { + return this.instance + } +} diff --git a/spring-javaformat-vscode/spring-javaformat/tsconfig.json b/spring-javaformat-vscode/spring-javaformat/tsconfig.json new file mode 100644 index 00000000..7efb850e --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "esModuleInterop": true, + "lib": ["es6"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/spring-javaformat-vscode/spring-javaformat/tslint.json b/spring-javaformat-vscode/spring-javaformat/tslint.json new file mode 100644 index 00000000..8b382dcf --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/tslint.json @@ -0,0 +1,15 @@ +{ + "rules": { + "no-string-throw": true, + "no-unused-expression": true, + "no-duplicate-variable": true, + "curly": true, + "class-name": true, + "semicolon": [ + true, + "never" + ], + "triple-equals": true + }, + "defaultSeverity": "warning" +} diff --git a/spring-javaformat-vscode/spring-javaformat/yarn.lock b/spring-javaformat-vscode/spring-javaformat/yarn.lock new file mode 100644 index 00000000..976bbb83 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat/yarn.lock @@ -0,0 +1,388 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/linkify-it@*": + version "2.1.0" + resolved "https://registry.npm.taobao.org/@types/linkify-it/download/@types/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" + integrity sha1-6j3WTEgFWXMReQth6HLL0e0s2AY= + +"@types/markdown-it@^0.0.8": + version "0.0.8" + resolved "https://registry.npm.taobao.org/@types/markdown-it/download/@types/markdown-it-0.0.8.tgz#9af8704acde87fec70475369ba0413d50717bd8d" + integrity sha1-mvhwSs3of+xwR1NpugQT1QcXvY0= + dependencies: + "@types/linkify-it" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "12.6.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" + integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + +"@types/node@^10.12.21": + version "10.14.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7" + integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== + +"@types/vscode@^1.36.0": + version "1.36.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.36.0.tgz#ae60242e893d9eda9a0d96d51ef56f1a3fae14ed" + integrity sha512-SbHR3Q5g/C3N+Ila3KrRf1rSZiyHxWdOZ7X3yFHXzw6HrvRLuVZrxnwEX0lTBMRpH9LkwZdqRTgXW+D075jxkg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +axios@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +chalk@^2.0.0, chalk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +commander@^2.12.1: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +entities@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +glob@^7.1.1, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-buffer@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +linkify-it@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/linkify-it/download/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha1-47VGl+eL+RXHCjis14/QngBYsc8= + dependencies: + uc.micro "^1.0.1" + +markdown-it@^10.0.0: + version "10.0.0" + resolved "https://registry.npm.taobao.org/markdown-it/download/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" + integrity sha1-q/xk8UGxci1mNAIETkOSfx9QqNw= + dependencies: + argparse "^1.0.7" + entities "~2.0.0" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@0.5.x, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +portfinder@^1.0.21: + version "1.0.21" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324" + integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA== + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +ps-list@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" + integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== + +resolve@^1.3.2: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + +semver@^5.3.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tslib@^1.8.0, tslib@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tslint@^5.18.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" + integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +typescript@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= From d0595398ed844ed064616405211c4b83fc5aba0d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 18:20:42 -0800 Subject: [PATCH 024/136] Polish 'Create Visual Studio Code extension' Refine extension to use stdin/stdout to communicate with the Java code rather than using an HTTP endpoint. This commit also restructures the way that the extension is built and reduces the number of Maven projects. It also drops Markdown formatting support. See gh-142 --- CONTRIBUTING.adoc | 17 +- README.adoc | 8 +- pom.xml | 29 +- .../spring-javaformat-maven-plugin/pom.xml | 10 + spring-javaformat-vscode/pom.xml | 2 +- .../.vscode/launch.json | 11 - .../.vscode/settings.json | 4 - .../spring-javaformat-format-service/pom.xml | 121 - .../format/controllers/FormatController.java | 42 - .../format/controllers/HealthController.java | 43 - .../spring/format/services/HealthService.java | 50 - .../io/spring/format/tools/FormatContent.java | 62 - .../main/resources/config/application.yaml | 5 - .../.gitignore | 7 + .../.prettierignore | 5 + .../.prettierrc | 2 +- .../.vscode/extensions.json | 5 + .../.vscode/launch.json | 31 + .../.vscode/settings.json | 12 + .../.vscode/tasks.json | 21 + .../.vscodeignore | 15 +- .../LICENSE.txt | 202 + .../package-lock.json | 3749 +++++++++++++++++ .../package.json | 43 + .../pom.xml | 129 + .../vscode/VisualStudioCodeFormatter.java | 57 + .../SpringDocumentFormattingEditProvider.ts | 78 + .../src/main/typescript/extension.ts} | 34 +- .../src/main/typescript/tsconfig.json | 7 + .../src/test/typescript/runTest.ts} | 32 +- .../test/typescript/suite/extension.test.ts | 44 + .../src/test/typescript/suite/index.ts | 47 + .../src/test/typescript/tsconfig.json | 7 + .../test-workspace/Test.java | 0 .../tsconfig-base.json | 9 + .../tsconfig.json | 11 + .../spring-javaformat/.vscode/extensions.json | 7 - .../spring-javaformat/.vscode/launch.json | 36 - .../spring-javaformat/.vscode/settings.json | 15 - .../spring-javaformat/.vscode/tasks.json | 20 - .../spring-javaformat/README.md | 6 - .../spring-javaformat/package.json | 42 - .../src/SpringJavaFormatter.ts | 28 - .../spring-javaformat/src/extension.ts | 31 - .../src/formatters/JavaFormatter.ts | 10 - .../src/formatters/MarkdownFormatter.ts | 28 - .../src/services/FormatService.ts | 103 - .../spring-javaformat/tsconfig.json | 17 - .../spring-javaformat/tslint.json | 15 - .../spring-javaformat/yarn.lock | 388 -- 50 files changed, 4566 insertions(+), 1131 deletions(-) delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/pom.xml delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java delete mode 100644 spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore rename spring-javaformat-vscode/{spring-javaformat => spring-javaformat-vscode-extension}/.prettierrc (75%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json rename spring-javaformat-vscode/{spring-javaformat => spring-javaformat-vscode-extension}/.vscodeignore (52%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts rename spring-javaformat-vscode/{spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java => spring-javaformat-vscode-extension/src/main/typescript/extension.ts} (51%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json rename spring-javaformat-vscode/{spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java => spring-javaformat-vscode-extension/src/test/typescript/runTest.ts} (52%) create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/test-workspace/Test.java create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json create mode 100644 spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/launch.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/settings.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/README.md delete mode 100644 spring-javaformat-vscode/spring-javaformat/package.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/extension.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts delete mode 100644 spring-javaformat-vscode/spring-javaformat/tsconfig.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/tslint.json delete mode 100644 spring-javaformat-vscode/spring-javaformat/yarn.lock diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 93f7b6d3..a5c92957 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -167,6 +167,20 @@ To add gradle classes, convert this module to a gradle project. +=== Setting up Visual Studio Code Extension Development +The `spring-javaformat-vscode-extension` extension consists of a formatter written in Java and an extension written in TypeScript. +If you want to work on the TypeScript code it can opened directly with Visual Studio Code. + +Maven delegates to `npm run package` to actually generate the extension. + +Code is formatted with prettier. +If you need to reform the code you can run `npx prettier --write .` + +There is a basic test included with the project, but since it needs UI elements it doesn't run as part of the regular build. +If you make changes to the extension, you should run "`Extension Tests`" from vscode. + + + === Importing Into Other IDEs Maven is well supported by most Java IDEs. Refer to your vendor documentation. @@ -174,13 +188,14 @@ Maven is well supported by most Java IDEs. Refer to your vendor documentation. == Understanding the Code There are quite a few moving parts to this project and the build is quite complex. -At the top level there are 5 projects: +At the top level there are 6 projects: * `spring-javaformat` - The main formatter project * `spring-javaformat-eclipse` - The Eclipse plugin * `spring-javaformat-gradle` - The Gradle plugin * `spring-javaformat-intellij` - The IntelliJ IDEA plugin * `spring-javaformat-maven` - The Maven plugin +* `spring-javaformat-vscode` - The Visual Studo Code extension Under `spring-javaformat` the following projects are defined: diff --git a/README.adoc b/README.adoc index 38658a8a..1c44e6e0 100644 --- a/README.adoc +++ b/README.adoc @@ -269,8 +269,12 @@ Once the configuration file is created, configure your IDE to use it: === Visual Studio Code -The vscode extension provides custom formatter support for Visual Studio Code. -The extension is automatically activated whenever a `.java` file is opened. And it requires a few seconds to warm-up while you start with the first workspace. +The Visual Studio Code extension provides custom formatter support for Microsoft Visual Studio Code. +The extension using the [`DocumentFormattingEditProvider`](https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider) API. +Once installed it may be activated by using the "`Format Document`" action available in the editor context menu or from the Command Palette. + +To install the extension select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. +You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-vscode-extension/{release-version}[Maven Central]. diff --git a/pom.xml b/pom.xml index 877c2775..98a2d21b 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,11 @@ + + com.github.eirslett + frontend-maven-plugin + 1.12.1 + com.github.wvengen proguard-maven-plugin @@ -362,6 +367,25 @@ + + + + com.github.eirslett + + + frontend-maven-plugin + + + [1.12.1,) + + + npx + + + + + + @@ -597,10 +621,11 @@ spring-javaformat - spring-javaformat-maven - spring-javaformat-gradle spring-javaformat-eclipse + spring-javaformat-gradle spring-javaformat-intellij-idea + spring-javaformat-maven + spring-javaformat-vscode diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 168ef7a9..74e7c00f 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -15,6 +15,16 @@ + + maven-clean-plugin + + + + out + + + + org.apache.maven.plugins maven-invoker-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 4f966c97..41197ebf 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -15,6 +15,6 @@ ${basedir}/.. - spring-javaformat-format-service + spring-javaformat-vscode-extension diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json deleted file mode 100644 index 40ef0758..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "configurations": [ - { - "type": "java", - "name": "CodeLens (Launch) - FormatterWebApplication", - "request": "launch", - "mainClass": "io.spring.format.FormatterWebApplication", - "projectName": "spring-javaformat-format-service" - } - ] -} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json deleted file mode 100644 index 0e0c2a50..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "editor.formatOnSave": true, - "java.format.enabled": false -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml b/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml deleted file mode 100644 index 24085434..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - 4.0.0 - - io.spring.javaformat - spring-javaformat-vscode - 0.0.36-SNAPSHOT - - spring-javaformat-format-service - jar - Spring JavaFormat format-service - - ${basedir}/../.. - - - - - org.springframework.boot - spring-boot-maven-plugin - 2.1.8.RELEASE - - ${main.basedir}/spring-javaformat-vscode/spring-javaformat/runtime/ - - - - - repackage - - - - - - org.codehaus.mojo - exec-maven-plugin - - ${main.basedir}/spring-javaformat-vscode/spring-javaformat - - - - exec-yarn-install - compile - - yarn - - - exec - - - - exec-package - package - - vsce - - package - - - - exec - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - checkstyle-validation - validate - - **/*/FormatterWebApplication.java - - - - - - io.spring.javaformat - spring-javaformat-maven-plugin - 0.0.16-SNAPSHOT - - - - - - - org.springframework.boot - spring-boot-dependencies - 2.1.6.RELEASE - pom - import - - - - - - - org.springframework.boot - spring-boot-starter - 2.1.6.RELEASE - - - org.springframework.boot - spring-boot-starter-web - 2.1.6.RELEASE - - - io.spring.javaformat - spring-javaformat-formatter - ${project.version} - - - - io.spring.javaformat - spring-javaformat-formatter-eclipse-runtime - ${project.version} - provided - - - diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java deleted file mode 100644 index 2ea27463..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/FormatController.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.controllers; - -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import io.spring.format.request.FormatRequest; -import io.spring.format.tools.FormatContent; - -/** - * . - * - * @author Howard Zuo - */ -@RestController -public class FormatController { - - @RequestMapping(method = RequestMethod.POST, value = "/format/code") - String formatSource(@RequestBody FormatRequest req) { - - return FormatContent.formatContent(req.getSource()); - - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java deleted file mode 100644 index 43ccceda..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/controllers/HealthController.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.controllers; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import io.spring.format.services.HealthService; - -/** - * . - * - * @author Howard Zuo - */ -@RestController -public class HealthController { - - @Autowired - private HealthService service; - - @RequestMapping(method = RequestMethod.GET, value = "/health") - String heartbeat() { - this.service.setLastHeartbeat(System.currentTimeMillis()); - return ""; - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java deleted file mode 100644 index 574652a8..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/services/HealthService.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.services; - -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Service; - -/** - * . - * - * @author Howard Zuo - */ -@Service -public class HealthService { - - private Long lastHeartbeat; - - public Long getLastHeartbeat() { - return this.lastHeartbeat; - } - - public void setLastHeartbeat(Long lastHeartbeat) { - this.lastHeartbeat = lastHeartbeat; - } - - @Scheduled(fixedRate = 1000 * 60 * 5) - public void liveCheck() { - if (this.lastHeartbeat == null) { - return; - } - if ((System.currentTimeMillis() - this.lastHeartbeat) > (1000 * 60 * 5)) { - System.exit(0); - } - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java deleted file mode 100644 index 4079c720..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/tools/FormatContent.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2017-2019 the original author or authors. - * - * 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 - * - * https://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 io.spring.format.tools; - -import java.util.regex.Pattern; - -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.text.edits.TextEdit; - -import io.spring.javaformat.formatter.Formatter; - -/** - * . Format specified java content - * - * @author Howard Zuo - */ -final public class FormatContent { - - private static final Pattern TRAILING_WHITESPACE = Pattern.compile(" +$", Pattern.MULTILINE); - - private FormatContent() { - - } - - public static String formatContent(String source) { - if (source == null || "".equals(source)) { - return ""; - } - - try { - final Formatter formatter = new Formatter(); - TextEdit textEdit = formatter.format(source); - IDocument document = new Document(source); - textEdit.apply(document); - String formattedContent = document.get(); - return trimTrailingWhitespace(formattedContent); - } - catch (Exception e) { - return source; - } - } - - private static String trimTrailingWhitespace(String content) { - return TRAILING_WHITESPACE.matcher(content).replaceAll(""); - } - -} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml b/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml deleted file mode 100644 index 8a9d523c..00000000 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/resources/config/application.yaml +++ /dev/null @@ -1,5 +0,0 @@ -# 基础应用配置 -spring: - application.name: Spring-Java-Formatter-Web -server: - port: ${port:9987} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore new file mode 100644 index 00000000..2c32c547 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.gitignore @@ -0,0 +1,7 @@ +out +runtime +dist +node +node_modules +.vscode-test/ +*.vsix diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore new file mode 100644 index 00000000..717380fe --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierignore @@ -0,0 +1,5 @@ +out +target +node +.vscode +.vscode-test diff --git a/spring-javaformat-vscode/spring-javaformat/.prettierrc b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierrc similarity index 75% rename from spring-javaformat-vscode/spring-javaformat/.prettierrc rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierrc index 133b8992..995d5360 100644 --- a/spring-javaformat-vscode/spring-javaformat/.prettierrc +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.prettierrc @@ -2,5 +2,5 @@ "tabWidth": 2, "semi": false, "singleQuote": true, - "printWidth": 110 + "printWidth": 120 } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json new file mode 100644 index 00000000..c0a2258b --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint"] +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json new file mode 100644 index 00000000..3baae646 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/launch.json @@ -0,0 +1,31 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "build" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": ["${workspaceFolder}/out/test/**/*.js"], + "preLaunchTask": "build" + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json new file mode 100644 index 00000000..5c3ffd3c --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/settings.json @@ -0,0 +1,12 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off", + "java.configuration.updateBuildConfiguration": "interactive" +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json new file mode 100644 index 00000000..0a101bd2 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscode/tasks.json @@ -0,0 +1,21 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscodeignore b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscodeignore similarity index 52% rename from spring-javaformat-vscode/spring-javaformat/.vscodeignore rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscodeignore index ed3f9d37..4b30b77f 100644 --- a/spring-javaformat-vscode/spring-javaformat/.vscodeignore +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/.vscodeignore @@ -1,10 +1,17 @@ +.gitignore +.prettierrc +.project +.classpath .vscode/** .vscode-test/** +.settings/** out/test/** -src/** -.gitignore -vsc-extension-quickstart.md **/tsconfig.json **/tslint.json **/*.map -**/*.ts \ No newline at end of file +**/*.ts +target/** +node/** +src/** +README.md +**pom.xml \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt b/spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt new file mode 100644 index 00000000..ff773796 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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 + + https://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. diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json new file mode 100644 index 00000000..580537c9 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -0,0 +1,3749 @@ +{ + "name": "spring-javaformat-vscode-extension", + "version": "0.0.36-SNAPSHOT", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "spring-javaformat-vscode-extension", + "version": "0.0.36-SNAPSHOT", + "devDependencies": { + "@types/glob": "^8.0.1", + "@types/mocha": "^10.0.1", + "@types/node": "16.x", + "@types/vscode": "^1.75.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@vscode/test-electron": "^2.2.2", + "@vscode/vsce": "^2.17.0", + "eslint": "^8.33.0", + "glob": "8.1.0", + "mocha": "10.2.0", + "prettier": "2.8.4", + "typescript": "^4.9.4" + }, + "engines": { + "vscode": "^1.75.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/glob": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==", + "dev": true, + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", + "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.75.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.75.1.tgz", + "integrity": "sha512-emg7wdsTFzdi+elvoyoA+Q8keEautdQHyY5LNmHVM4PTpY8JgOTVADrGVyXGepJ6dVW2OS5/xnLUWh+nZxvdiA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", + "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/vsce": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", + "integrity": "sha512-W4HN5MtTVj/mroQU1d82bUEeWM3dUykMFnMYZPtZ6jrMiHN1PUoN3RGcS896N0r2rIq8KpWDtufcQHgK8VfgpA==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "dev": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", + "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "dev": true, + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json new file mode 100644 index 00000000..2d2f913f --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -0,0 +1,43 @@ +{ + "name": "spring-javaformat-vscode-extension", + "description": "Spring JavaFormat Visual Studio Code Extension", + "displayName": "Spring JavaFormat", + "version": "0.0.36-SNAPSHOT", + "publisher": "io.spring.javaformat", + "engines": { + "vscode": "^1.75.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/spring-io/spring-javaformat.git" + }, + "categories": [ + "Formatters" + ], + "activationEvents": [ + "onLanguage:java" + ], + "main": "./out/extension.js", + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -b ./", + "watch": "tsc -b ./ -watch", + "pretest": "npm run compile", + "test": "node ./out/test/runTest.js", + "package": "vsce package --out ./target/spring-javaformat.vsix" + }, + "devDependencies": { + "@types/glob": "^8.0.1", + "@types/mocha": "^10.0.1", + "@types/node": "16.x", + "@types/vscode": "^1.75.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@vscode/test-electron": "^2.2.2", + "@vscode/vsce": "^2.17.0", + "eslint": "^8.33.0", + "glob": "8.1.0", + "mocha": "10.2.0", + "prettier": "2.8.4", + "typescript": "^4.9.4" + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml new file mode 100644 index 00000000..bc9637cb --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -0,0 +1,129 @@ + + + 4.0.0 + + io.spring.javaformat + spring-javaformat-vscode + 0.0.36-SNAPSHOT + + spring-javaformat-vscode-extension + Spring JavaFormat Visual Studio Code Extension + + ${basedir}/../.. + + + + + maven-clean-plugin + + + + out + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + ${basedir}/runtime/spring-java-format.jar + false + + + *:* + + META-INF/MANIFEST.MF + + + + + + io.spring.format.vscode.VisualStudioCodeFormatter + + + + + + + + com.github.eirslett + frontend-maven-plugin + + + install-node-and-npm + generate-resources + + install-node-and-npm + + + + npm-install + generate-resources + + npm + + + + prettier-check + validate + + npx + + + prettier --check . + + + + vsce-package + package + + npm + + + run package + + + + + v19.6.0 + + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-source + generate-sources + + attach-artifact + + + + + ${project.build.directory}/spring-javaformat.vsix + vsix + + + + + + + + + + + io.spring.javaformat + spring-javaformat-formatter-shaded + ${project.version} + + + diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java new file mode 100644 index 00000000..811ccc78 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java @@ -0,0 +1,57 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.format.vscode; + +import java.io.File; + +import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.StreamsFormatter; + +/** + * Called from the Visual Studio Code extension to format source code. + * + * @author Howard Zuo + * @author Phillip Webb + */ +public final class VisualStudioCodeFormatter { + + private VisualStudioCodeFormatter() { + } + + private void run(String[] args) throws Exception { + File location = new File(".").getAbsoluteFile(); + log(String.format("Loading formatter from location '%s'", location)); + JavaFormatConfig config = JavaFormatConfig.findFrom(location); + StreamsFormatter formatter = new StreamsFormatter(config); + formatter.format(System.in).writeTo((Appendable) System.out); + } + + private void log(String message) { + System.err.println(message); + } + + public static void main(String[] args) { + try { + new VisualStudioCodeFormatter().run(args); + } + catch (Exception ex) { + ex.printStackTrace(); + System.exit(1); + } + } + +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts new file mode 100644 index 00000000..d8fc9788 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts @@ -0,0 +1,78 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 path = require('path') +import vscode = require('vscode') +import childprocess = require('child_process') + +const JAR_PATH = path.resolve(__dirname, '..', 'runtime', 'spring-java-format.jar') + +export default class SpringDocumentFormattingEditProvider implements vscode.DocumentFormattingEditProvider { + provideDocumentFormattingEdits( + document: vscode.TextDocument, + options: vscode.FormattingOptions, + token: vscode.CancellationToken + ): vscode.ProviderResult { + if (vscode.window.visibleTextEditors.every((editor) => editor.document.fileName !== document.fileName)) { + return [] + } + return this.runFormatter(document, token).then( + (edits) => edits, + (err) => { + if (err) { + console.log(err) + return Promise.reject(`Check the console in dev tools to find errors when formatting spring-javaformat`) + } + } + ) + } + + private runFormatter(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { + return new Promise((resolve, reject) => { + console.log(`formatting ${document.uri} using spring-javaformat`) + let stdout = '' + let stderr = '' + const cwd = path.dirname(document.fileName) + const args = ['-jar', JAR_PATH] + const process = childprocess.spawn('java', args, { cwd }) + token.onCancellationRequested(() => !process.killed && process.kill()) + process.stdout.setEncoding('utf8') + process.stdout.on('data', (data) => (stdout += data)) + process.stderr.on('data', (data) => (stderr += data)) + process.on('error', (err) => { + console.log(`spring-javaformat returned error ${err}`) + if (err && (err).code === 'ENOENT') { + return reject(`failed to find run spring-javaformat due to missing 'java' executable`) + } + }) + process.on('close', (code) => { + if (code !== 0) { + console.log(`spring-javaformat returned error code ${code}`) + return reject(stderr) + } + console.log('spring-javaformat returned without error') + const fileStart = new vscode.Position(0, 0) + const fileEnd = document.lineAt(document.lineCount - 1).range.end + const textEdits: vscode.TextEdit[] = [new vscode.TextEdit(new vscode.Range(fileStart, fileEnd), stdout)] + return resolve(textEdits) + }) + if (process.pid) { + console.log('sending document data to spring-javaformat') + process.stdin.end(document.getText()) + } + }) + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts similarity index 51% rename from spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts index 58f9980f..0fe3b9a9 100644 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/FormatterWebApplication.java +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,22 +14,20 @@ * limitations under the License. */ -package io.spring.format; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableScheduling; - -@EnableScheduling -@SpringBootApplication -public class FormatterWebApplication { - - public FormatterWebApplication() { - - } - - public static void main(String[] args) { - SpringApplication.run(FormatterWebApplication.class, args); - } +import * as vscode from 'vscode' +import SpringDocumentFormattingEditProvider from './SpringDocumentFormattingEditProvider' +export function activate(context: vscode.ExtensionContext) { + console.log('Activated spring-javaformat extension') + context.subscriptions.push( + vscode.languages.registerDocumentFormattingEditProvider( + [ + { + language: 'java', + scheme: 'file', + }, + ], + new SpringDocumentFormattingEditProvider() + ) + ) } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json new file mode 100644 index 00000000..431716b1 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig-base.json", + "compilerOptions": { + "outDir": "../../../out", + "rootDir": "." + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/runTest.ts similarity index 52% rename from spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java rename to spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/runTest.ts index d74555f9..19b689c6 100644 --- a/spring-javaformat-vscode/spring-javaformat-format-service/src/main/java/io/spring/format/request/FormatRequest.java +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/runTest.ts @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,23 +14,19 @@ * limitations under the License. */ -package io.spring.format.request; +import * as path from 'path' -/** - * . - * - * @author Howard Zuo - */ -public class FormatRequest { - - private String source = ""; - - public void setSource(String source) { - this.source = source; - } - - public String getSource() { - return this.source; - } +import { runTests } from '@vscode/test-electron' +async function main() { + try { + const extensionDevelopmentPath = path.resolve(__dirname, '../../../../') + const extensionTestsPath = path.resolve(__dirname, './suite/index') + await runTests({ extensionDevelopmentPath, extensionTestsPath, launchArgs: ['--disable-extensions'] }) + } catch (err) { + console.error('Failed to run tests') + process.exit(1) + } } + +main() diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts new file mode 100644 index 00000000..e73b4c89 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/extension.test.ts @@ -0,0 +1,44 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 * as assert from 'assert' +import * as vscode from 'vscode' +import * as path from 'path' +import * as fs from 'fs' + +export const WORKSPACE_PATH = path.resolve(__dirname, '..', '..', '..', 'test-workspace') +export const FILE_PATH = path.resolve(WORKSPACE_PATH, 'Test.java') + +suite('Extension Test Suite', () => { + test('Format file', async () => { + const initial = 'public static class Test {public static void main(String[] args){}}\n' + const expected = 'public static class Test {\n\n\tpublic static void main(String[] args) {\n\t}\n\n}\n' + if (!fs.existsSync(WORKSPACE_PATH)) { + fs.mkdirSync(WORKSPACE_PATH) + } + fs.closeSync(fs.openSync(FILE_PATH, 'w')) + const document = await vscode.workspace.openTextDocument(vscode.Uri.file(FILE_PATH)) + const editor = await vscode.window.showTextDocument(document) + await editor.edit((builder) => { + builder.delete(new vscode.Range(new vscode.Position(0, 0), document.positionAt(document.getText().length))) + builder.insert(new vscode.Position(0, 0), initial) + }) + editor.selection = new vscode.Selection(0, 0, 0, 0) + await vscode.commands.executeCommand('editor.action.formatDocument') + const actual = document.getText() + assert.deepEqual(actual, expected) + }) +}) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts new file mode 100644 index 00000000..3301b793 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/suite/index.ts @@ -0,0 +1,47 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 * as path from 'path' +import * as Mocha from 'mocha' +import * as glob from 'glob' + +export function run(): Promise { + const mocha = new Mocha({ + ui: 'tdd', + }) + const testsRoot = path.resolve(__dirname, '..') + return new Promise((resolve, reject) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + console.log(files) + if (err) { + return reject(err) + } + files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))) + try { + mocha.run((failures) => { + if (failures > 0) { + reject(new Error(`${failures} tests failed.`)) + } else { + resolve() + } + }) + } catch (err) { + console.error(err) + reject(err) + } + }) + }) +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json new file mode 100644 index 00000000..7412944e --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/test/typescript/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig-base.json", + "compilerOptions": { + "outDir": "../../../out/test", + "rootDirs": ["../../main/typescript", "."] + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/test-workspace/Test.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/test-workspace/Test.java new file mode 100644 index 00000000..e69de29b diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json new file mode 100644 index 00000000..7c273362 --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig-base.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "lib": ["ES2020"], + "sourceMap": true, + "strict": true + } +} diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json new file mode 100644 index 00000000..a6df75bd --- /dev/null +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], // this root tsconfig just exists to compose sub-projects + "references": [ + { + "path": "./src/main/typescript" + }, + { + "path": "./src/test/typescript" + } + ] +} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json b/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json deleted file mode 100644 index 0a18b9c4..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "ms-vscode.vscode-typescript-tslint-plugin" - ] -} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json b/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json deleted file mode 100644 index f5197783..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/launch.json +++ /dev/null @@ -1,36 +0,0 @@ -// A launch configuration that compiles the extension and then opens it inside a new window -// Use IntelliSense to learn about possible attributes. -// Hover to view descriptions of existing attributes. -// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "npm: watch" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/out/test/**/*.js" - ], - "preLaunchTask": "npm: watch" - } - ] -} diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json b/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json deleted file mode 100644 index baa30361..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/settings.json +++ /dev/null @@ -1,15 +0,0 @@ -// Place your settings in this file to overwrite default and user settings. -{ - "files.exclude": { - "out": false // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "out": true // set this to false to include "out" folder in search results - }, - // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off", - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "editor.formatOnSave": true -} \ No newline at end of file diff --git a/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json b/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json deleted file mode 100644 index 3b17e53b..00000000 --- a/spring-javaformat-vscode/spring-javaformat/.vscode/tasks.json +++ /dev/null @@ -1,20 +0,0 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } - } - ] -} diff --git a/spring-javaformat-vscode/spring-javaformat/README.md b/spring-javaformat-vscode/spring-javaformat/README.md deleted file mode 100644 index 5f38bf4f..00000000 --- a/spring-javaformat-vscode/spring-javaformat/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# spring-javaformat - -> Format .java files in spring-javaformat way - - - diff --git a/spring-javaformat-vscode/spring-javaformat/package.json b/spring-javaformat-vscode/spring-javaformat/package.json deleted file mode 100644 index 0cc76709..00000000 --- a/spring-javaformat-vscode/spring-javaformat/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "spring-javaformat", - "displayName": "spring-javaformat-vscode-extension", - "description": "Format .java files in spring-javaformat way", - "version": "1.0.0", - "publisher": "howardzuo", - "engines": { - "vscode": "^1.36.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/spring-io/spring-javaformat.git" - }, - "scripts": { - "vscode:prepublish": "yarn run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./" - }, - "categories": [ - "Formatters" - ], - "activationEvents": [ - "onLanguage:java", - "onLanguage:markdown" - ], - "main": "./out/extension.js", - "devDependencies": { - "@types/glob": "^7.1.1", - "@types/markdown-it": "^0.0.8", - "@types/node": "^10.12.21", - "@types/vscode": "^1.36.0", - "glob": "^7.1.4", - "tslint": "^5.18.0", - "typescript": "^3.5.3" - }, - "dependencies": { - "axios": "^0.19.0", - "markdown-it": "^10.0.0", - "portfinder": "^1.0.21", - "ps-list": "^6.3.0" - } -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts deleted file mode 100644 index d382b919..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/SpringJavaFormatter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - DocumentFormattingEditProvider, - TextDocument, - FormattingOptions, - CancellationToken, - ProviderResult, - TextEdit, - Range -} from 'vscode' - -import { formatMarkdown } from './formatters/MarkdownFormatter' -import { formatJava } from './formatters/JavaFormatter' - -export default class SpringJavaFormatter implements DocumentFormattingEditProvider { - provideDocumentFormattingEdits( - document: TextDocument, - options: FormattingOptions, - token: CancellationToken - ): ProviderResult { - if (document.languageId === 'java') { - return formatJava(document) - } - if (document.languageId === 'markdown') { - return formatMarkdown(document) - } - return [] - } -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/extension.ts b/spring-javaformat-vscode/spring-javaformat/src/extension.ts deleted file mode 100644 index 6b848bd1..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/extension.ts +++ /dev/null @@ -1,31 +0,0 @@ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below -import * as vscode from 'vscode' -import SpringJavaFormatter from './SpringJavaFormatter' - -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed -export function activate(context: vscode.ExtensionContext) { - // Use the console to output diagnostic information (console.log) and errors (console.error) - // This line of code will only be executed once when your extension is activated - console.log('Congratulations, your extension "spring-javaformat" is now active!') - - context.subscriptions.push( - vscode.languages.registerDocumentFormattingEditProvider( - [ - { - language: 'java', - scheme: 'file' - }, - { - language: 'markdown', - scheme: 'file' - } - ], - new SpringJavaFormatter() - ) - ) -} - -// this method is called when your extension is deactivated -export function deactivate() {} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts deleted file mode 100644 index e66942c6..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/formatters/JavaFormatter.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TextDocument, Range, TextEdit } from 'vscode' - -import FormatService from '../services/FormatService' - -export async function formatJava(document: TextDocument): Promise> { - const code = await FormatService.getInstance().formatCode(document.getText()) - - const range = new Range(document.positionAt(0), document.positionAt(document.getText().length)) - return [TextEdit.replace(range, code)] -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts b/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts deleted file mode 100644 index e8c334f7..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/formatters/MarkdownFormatter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { TextDocument, Range, TextEdit } from 'vscode' - -import FormatService from '../services/FormatService' -import MarkdownIt from 'markdown-it' -import Token from 'markdown-it/lib/token' - -const md = new MarkdownIt() - -export async function formatMarkdown(document: TextDocument): Promise> { - const source = document.getText() - const tokens = md.parse(source, {}) - - const editsPromise = tokens - .filter((t): t is Token => t.type === 'fence' && t.tag === 'code' && t.info === 'java') - .map(async token => { - const startIndex = source.indexOf(token.content) - const code = await FormatService.getInstance().formatCode(token.content) - - const range = new Range( - document.positionAt(startIndex), - document.positionAt(startIndex + token.content.length) - ) - - return TextEdit.replace(range, code) - }) - - return Promise.all(editsPromise) -} diff --git a/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts b/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts deleted file mode 100644 index 062ba02e..00000000 --- a/spring-javaformat-vscode/spring-javaformat/src/services/FormatService.ts +++ /dev/null @@ -1,103 +0,0 @@ -import * as child_process from 'child_process' -import * as portfinder from 'portfinder' -import psList from 'ps-list' -import axios from 'axios' -import { resolve } from 'path' -import { window } from 'vscode' - -const JAR_NAME = 'spring-javaformat-format-service-0.0.16-SNAPSHOT.jar' - -const RUNTIME_JAR_PATH = resolve(__dirname, '..', '..', 'runtime', JAR_NAME) - -export default class FormatService { - private static instance: FormatService = new FormatService() - private port: number = 9987 - - constructor() { - const hideFunc = window.setStatusBarMessage('spring-javaformat service initializing....') - this.init() - .catch(err => { - console.error('ERROR:', err) - }) - .finally(() => { - hideFunc.dispose() - }) - } - - private async init() { - this.startNextScheduledJob() - const proc = await this.getJavaFormatServiceProcessInfo() - if (proc) { - const matched = (proc.cmd || '').match(/-Dport=([0-9]+)\s/) - if (matched) { - this.port = +matched[1] - } - console.log('spring-javaformat service is running with other workspace, no need run again') - return - } - const port = await this.findAvailablePort() - this.port = port - await this.run(port) - console.log('spring-javaformat service running') - } - - private startNextScheduledJob() { - setTimeout(async () => { - const proc = await this.getJavaFormatServiceProcessInfo() - if (!proc) { - const port = await this.findAvailablePort() - this.port = port - await this.run(port) - } - await this.sendHeartbeat() - - this.startNextScheduledJob() - }, 1000 * 60) - } - - private async getJavaFormatServiceProcessInfo() { - const list = await psList() - return list.find(l => (l.cmd || '').includes(JAR_NAME)) - } - - private async findAvailablePort() { - const port = await portfinder.getPortPromise({ - port: 20000, - stopPort: 60000 - }) - return port - } - - private async run(port: number) { - return new Promise((resolve, reject) => { - const childProcess = child_process.exec(`java -Dport=${port} -jar ${RUNTIME_JAR_PATH} `, {}) - - childProcess.stdout.on('data', data => { - if (data.includes('Started FormatterWebApplication')) { - resolve() - } - }) - - childProcess.on('error', reject) - }) - } - - async formatCode(source: string): Promise { - try { - const result = await axios.post(`http://localhost:${this.port}/format/code`, { - source - }) - return result.data - } catch (error) { - throw new Error('spring-javaformat service is not ready, please hold for few seconds') - } - } - - async sendHeartbeat() { - return axios.get(`http://localhost:${this.port}/health`) - } - - static getInstance(): FormatService { - return this.instance - } -} diff --git a/spring-javaformat-vscode/spring-javaformat/tsconfig.json b/spring-javaformat-vscode/spring-javaformat/tsconfig.json deleted file mode 100644 index 7efb850e..00000000 --- a/spring-javaformat-vscode/spring-javaformat/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "outDir": "out", - "esModuleInterop": true, - "lib": ["es6"], - "sourceMap": true, - "rootDir": "src", - "strict": true /* enable all strict type-checking options */ - /* Additional Checks */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - }, - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/spring-javaformat-vscode/spring-javaformat/tslint.json b/spring-javaformat-vscode/spring-javaformat/tslint.json deleted file mode 100644 index 8b382dcf..00000000 --- a/spring-javaformat-vscode/spring-javaformat/tslint.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "rules": { - "no-string-throw": true, - "no-unused-expression": true, - "no-duplicate-variable": true, - "curly": true, - "class-name": true, - "semicolon": [ - true, - "never" - ], - "triple-equals": true - }, - "defaultSeverity": "warning" -} diff --git a/spring-javaformat-vscode/spring-javaformat/yarn.lock b/spring-javaformat-vscode/spring-javaformat/yarn.lock deleted file mode 100644 index 976bbb83..00000000 --- a/spring-javaformat-vscode/spring-javaformat/yarn.lock +++ /dev/null @@ -1,388 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/linkify-it@*": - version "2.1.0" - resolved "https://registry.npm.taobao.org/@types/linkify-it/download/@types/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" - integrity sha1-6j3WTEgFWXMReQth6HLL0e0s2AY= - -"@types/markdown-it@^0.0.8": - version "0.0.8" - resolved "https://registry.npm.taobao.org/@types/markdown-it/download/@types/markdown-it-0.0.8.tgz#9af8704acde87fec70475369ba0413d50717bd8d" - integrity sha1-mvhwSs3of+xwR1NpugQT1QcXvY0= - dependencies: - "@types/linkify-it" "*" - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "12.6.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" - integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== - -"@types/node@^10.12.21": - version "10.14.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7" - integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== - -"@types/vscode@^1.36.0": - version "1.36.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.36.0.tgz#ae60242e893d9eda9a0d96d51ef56f1a3fae14ed" - integrity sha512-SbHR3Q5g/C3N+Ila3KrRf1rSZiyHxWdOZ7X3yFHXzw6HrvRLuVZrxnwEX0lTBMRpH9LkwZdqRTgXW+D075jxkg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -axios@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -chalk@^2.0.0, chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -commander@^2.12.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -entities@~2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -glob@^7.1.1, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-buffer@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -linkify-it@^2.0.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/linkify-it/download/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha1-47VGl+eL+RXHCjis14/QngBYsc8= - dependencies: - uc.micro "^1.0.1" - -markdown-it@^10.0.0: - version "10.0.0" - resolved "https://registry.npm.taobao.org/markdown-it/download/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" - integrity sha1-q/xk8UGxci1mNAIETkOSfx9QqNw= - dependencies: - argparse "^1.0.7" - entities "~2.0.0" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -mkdirp@0.5.x, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -portfinder@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324" - integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA== - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -ps-list@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" - integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== - -resolve@^1.3.2: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== - dependencies: - path-parse "^1.0.6" - -semver@^5.3.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -tslib@^1.8.0, tslib@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tslint@^5.18.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -typescript@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw= - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= From f7e720a73aa072905c4a0b0f8dddcf505ccc884f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 Feb 2023 20:34:46 -0800 Subject: [PATCH 025/136] Don't run npx before npm install See gh-142 --- .../package-lock.json | 16 ---------------- .../package.json | 1 - .../spring-javaformat-vscode-extension/pom.xml | 6 +++--- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 580537c9..4d147a7a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -18,7 +18,6 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", - "prettier": "2.8.4", "typescript": "^4.9.4" }, "engines": { @@ -2853,21 +2852,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 2d2f913f..b37ff6b9 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -37,7 +37,6 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", - "prettier": "2.8.4", "typescript": "^4.9.4" } } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index bc9637cb..67243d61 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -59,21 +59,21 @@ install-node-and-npm - generate-resources + initialize install-node-and-npm npm-install - generate-resources + initialize npm prettier-check - validate + compile npx From 6555254902c98370ed333e73f2e19a5c0bde4871 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Feb 2023 09:21:30 -0800 Subject: [PATCH 026/136] Fix link markup --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 1c44e6e0..dcff9917 100644 --- a/README.adoc +++ b/README.adoc @@ -270,7 +270,7 @@ Once the configuration file is created, configure your IDE to use it: === Visual Studio Code The Visual Studio Code extension provides custom formatter support for Microsoft Visual Studio Code. -The extension using the [`DocumentFormattingEditProvider`](https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider) API. +The extension using the https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider[`DocumentFormattingEditProvider`] API. Once installed it may be activated by using the "`Format Document`" action available in the editor context menu or from the Command Palette. To install the extension select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. From b543266abf2a87cf76ba916a27da7caf99b6a0ae Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Feb 2023 18:53:57 -0800 Subject: [PATCH 027/136] Reformat code --- .../gradle/SpringJavaFormatPlugin.java | 16 +++++++++------ .../javaformat/gradle/tasks/CheckFormat.java | 5 +++-- .../intellij/monitor/GradleMonitor.java | 4 ++-- .../EclipseDocumentAdapterTests.java | 1 + .../io/spring/format/maven/FormatMojo.java | 11 ++++++---- .../io/spring/format/maven/ValidateMojo.java | 6 ++++-- .../io/spring/format/maven/VerifyApply.java | 3 ++- .../checkstyle/SpringConfigurationLoader.java | 6 ++++-- .../SpringHideUtilityClassConstructor.java | 5 +++-- .../checkstyle/check/SpringJUnit5Check.java | 14 ++++++------- .../checkstyle/check/SpringJavadocCheck.java | 5 +++-- .../check/SpringMethodOrderCheck.java | 2 +- .../checkstyle/check/SpringTernaryCheck.java | 20 +++++++++---------- .../checkstyle/AssertionsAuditListener.java | 2 +- .../checkstyle/SpringChecksTests.java | 6 ++++-- .../SpringConfigurationLoaderTests.java | 4 ++-- .../formatter/ExtendedCodeFormatter.java | 5 +++-- .../formatter/ExtendedCodeFormatter.java | 5 +++-- .../formatter/linewrap/WrapPreparator.java | 1 + .../formatter/FormatterIntegrationTests.java | 2 +- .../formatter/StreamsFormatter.java | 1 + 21 files changed, 73 insertions(+), 51 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index e5f27015..9453cb7c 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -56,24 +56,28 @@ private void addSourceTasks() { TaskProvider checkAllProvider = tasks.register(CheckFormat.NAME); checkAllProvider.configure((checkAll) -> checkAll.setDescription(CheckFormat.DESCRIPTION)); tasks.named(JavaBasePlugin.CHECK_TASK_NAME).configure((check) -> check.dependsOn(checkAllProvider)); - this.project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets() - .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); + this.project.getConvention() + .getPlugin(JavaPluginConvention.class) + .getSourceSets() + .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); }); } - private void addSourceTasks(SourceSet sourceSet, TaskProvider checkAllProvider, TaskProvider formatAllProvider) { + private void addSourceTasks(SourceSet sourceSet, TaskProvider checkAllProvider, + TaskProvider formatAllProvider) { TaskProvider checkTaskProvider = addFormatterTask(sourceSet, CheckFormat.class, CheckFormat.NAME, CheckFormat.DESCRIPTION); checkTaskProvider.configure((checkTask) -> checkTask.setReportLocation( new File(this.project.getBuildDir(), "reports/format/" + sourceSet.getName() + "/check-format.txt"))); checkAllProvider.configure((checkAll) -> checkAll.dependsOn(checkTaskProvider)); - TaskProvider formatTaskProvider = addFormatterTask(sourceSet, Format.class, Format.NAME, Format.DESCRIPTION); + TaskProvider formatTaskProvider = addFormatterTask(sourceSet, Format.class, Format.NAME, + Format.DESCRIPTION); formatTaskProvider.configure((format) -> format.conventionMapping("encoding", () -> "UTF-8")); formatAllProvider.configure((formatAll) -> formatAll.dependsOn(formatTaskProvider)); } - private TaskProvider addFormatterTask(SourceSet sourceSet, Class taskType, String name, - String desc) { + private TaskProvider addFormatterTask(SourceSet sourceSet, Class taskType, + String name, String desc) { String taskName = sourceSet.getTaskName(name, null); TaskProvider provider = this.project.getTasks().register(taskName, taskType); provider.configure((task) -> { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 6487ff6d..1ae2e597 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -53,8 +53,9 @@ public class CheckFormat extends FormatterTask { @TaskAction public void checkFormatting() throws IOException, InterruptedException { - List problems = formatFiles().filter(FileEdit::hasEdits).map(FileEdit::getFile) - .collect(Collectors.toList()); + List problems = formatFiles().filter(FileEdit::hasEdits) + .map(FileEdit::getFile) + .collect(Collectors.toList()); this.reportLocation.getParentFile().mkdirs(); if (!problems.isEmpty()) { StringBuilder message = new StringBuilder("Formatting violations found in the following files:\n"); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index 6ad8d657..9c716249 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -32,8 +32,8 @@ import io.spring.format.formatter.intellij.state.State; /** - * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} - * declaration in the build.gradle file. + * {@link Monitor} that looks for a {@code spring-javaformat-gradle-plugin} declaration in + * the build.gradle file. * * @author Phillip Webb */ diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java index 09a8a0d9..11ae23e8 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java @@ -48,4 +48,5 @@ void replaceAppliesToIntellijDocument() throws Exception { assertThat(adapter.get()).isEqualTo("help"); verify(intellijDocument).replaceString(3, 5, "p"); } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 5e7e85c8..75e56569 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -130,8 +130,9 @@ public final void execute() throws MojoExecutionException, MojoFailureException } private Stream resolve(List directories) { - return directories.stream().map(directory -> FileUtils.resolveFile(this.project.getBasedir(), directory)) - .filter(this::include); + return directories.stream() + .map(directory -> FileUtils.resolveFile(this.project.getBasedir(), directory)) + .filter(this::include); } private boolean include(File file) { @@ -168,8 +169,10 @@ private List scan(File directory) { scanner.setCaseSensitive(false); scanner.setFollowSymlinks(false); scanner.scan(); - return Arrays.asList(scanner.getIncludedFiles()).stream().map(name -> new File(directory, name)) - .collect(Collectors.toList()); + return Arrays.asList(scanner.getIncludedFiles()) + .stream() + .map(name -> new File(directory, name)) + .collect(Collectors.toList()); } private boolean hasLength(Object[] array) { diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 534fb7f7..32bf370b 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -50,8 +50,10 @@ protected void execute(List files, Charset encoding, String lineSeparator) getLog().debug("skipping validation as per configuration."); return; } - List problems = getFormatter().formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits) - .map(FileEdit::getFile).collect(Collectors.toList()); + List problems = getFormatter().formatFiles(files, encoding, lineSeparator) + .filter(FileEdit::hasEdits) + .map(FileEdit::getFile) + .collect(Collectors.toList()); if (!problems.isEmpty()) { StringBuilder message = new StringBuilder("Formatting violations found in the following files:\n"); problems.stream().forEach((f) -> message.append(" * " + f + "\n")); diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 65fc2ec0..3707cfee 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -50,7 +50,8 @@ public void verify(File base, String lineSeparator, boolean spaces) throws IOExc String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); String indent = (!spaces) ? " " : " "; assertThat(formated).contains("Simple." + lineSeparator + " *" + lineSeparator + " * @author") - .contains("public class Simple {").contains(indent + "public static void main"); + .contains("public class Simple {") + .contains(indent + "public static void main"); } public static void main(String[] args) throws IOException { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index e78bf500..31ff7d1a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -52,8 +52,10 @@ public Collection load(PropertyResolver propertyResolver) { System.out.println(getClass().getResource("spring-checkstyle.xml")); Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), propertyResolver); - return Arrays.stream(config.getChildren()).filter(this.moduleFactory::nonFiltered).map(this::load) - .collect(Collectors.toList()); + return Arrays.stream(config.getChildren()) + .filter(this.moduleFactory::nonFiltered) + .map(this::load) + .collect(Collectors.toList()); } private Configuration loadConfiguration(InputStream inputStream, PropertyResolver propertyResolver) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java index c7dcaab1..5bd30954 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java @@ -39,8 +39,9 @@ public class SpringHideUtilityClassConstructor extends HideUtilityClassConstruct annotations.add("org.springframework.context.annotation.Configuration"); annotations.add("org.springframework.boot.autoconfigure.SpringBootApplication"); annotations.add("org.springframework.boot.autoconfigure.EnableAutoConfiguration"); - Set shortNames = annotations.stream().map((name) -> name.substring(name.lastIndexOf(".") + 1)) - .collect(Collectors.toSet()); + Set shortNames = annotations.stream() + .map((name) -> name.substring(name.lastIndexOf(".") + 1)) + .collect(Collectors.toSet()); annotations.addAll(shortNames); BYPASS_ANNOTATIONS = Collections.unmodifiableSet(annotations); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 9fc9251f..7a6aa9c1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -97,11 +97,11 @@ public void beginTree(DetailAST rootAST) { @Override public void visitToken(DetailAST ast) { switch (ast.getType()) { - case TokenTypes.METHOD_DEF: - visitMethodDef(ast); - case TokenTypes.IMPORT: - visitImport(ast); - break; + case TokenTypes.METHOD_DEF: + visitMethodDef(ast); + case TokenTypes.IMPORT: + visitImport(ast); + break; } } @@ -172,8 +172,8 @@ private void log(DetailAST method, String key) { } public void setUnlessImports(String unlessImports) { - this.unlessImports = Collections.unmodifiableList( - Arrays.stream(unlessImports.split(",")).map(String::trim).collect(Collectors.toList())); + this.unlessImports = Collections + .unmodifiableList(Arrays.stream(unlessImports.split(",")).map(String::trim).collect(Collectors.toList())); } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 31a1c360..1eb0c25e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -166,7 +166,8 @@ private void checkSinceTag(DetailAST ast, TextBlock javadoc) { } String[] text = javadoc.getText(); DetailAST interfaceOrAnnotationDef = getInterfaceOrAnnotationDef(ast); - boolean privateType = !isPublicOrProtected(ast) && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); + boolean privateType = !isPublicOrProtected(ast) + && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; boolean found = false; for (int i = 0; i < text.length; i++) { @@ -231,7 +232,7 @@ private DetailAST getInterfaceOrAnnotationDef(DetailAST ast) { private DetailAST findParent(DetailAST ast, int... classDefs) { while (ast != null) { - for (int classDef: classDefs) { + for (int classDef : classDefs) { if (ast.getType() == classDef) { return ast; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java index c486888f..eac7102f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java @@ -33,7 +33,7 @@ public class SpringMethodOrderCheck extends AbstractSpringCheck { private static final List EXPECTED_ORDER = Collections - .unmodifiableList(Arrays.asList("equals", "hashCode", "toString")); + .unmodifiableList(Arrays.asList("equals", "hashCode", "toString")); @Override public int[] getAcceptableTokens() { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java index 0bf7a2e9..4b987450 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java @@ -61,9 +61,9 @@ private void visitQuestion(DetailAST ast) { private boolean requiresParens(DetailAST expression) { if (expression != null && expression.getChildCount() > 1) { switch (expression.getType()) { - case TokenTypes.METHOD_CALL: - case TokenTypes.DOT: - return false; + case TokenTypes.METHOD_CALL: + case TokenTypes.DOT: + return false; } return true; } @@ -86,13 +86,13 @@ private boolean isSimpleEqualsExpression(DetailAST expression) { private boolean isEqualsTestAllowed(DetailAST ast) { switch (this.equalsTest) { - case ANY: - return true; - case NEVER: - return false; - case NEVER_FOR_NULLS: - DetailAST equal = ast.findFirstToken(TokenTypes.EQUAL); - return equal.findFirstToken(TokenTypes.LITERAL_NULL) == null; + case ANY: + return true; + case NEVER: + return false; + case NEVER_FOR_NULLS: + DetailAST equal = ast.findFirstToken(TokenTypes.EQUAL); + return equal.findFirstToken(TokenTypes.LITERAL_NULL) == null; } throw new IllegalStateException("Unsupported equals test " + this.equalsTest); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index 6b6daeb6..e91a1fd5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -111,7 +111,7 @@ private void recordLevel(AuditEvent event) { private void recordLocalizedMessage(String message, String... args) { recordMessage(new Violation(0, Definitions.CHECKSTYLE_BUNDLE, message, args, null, Violation.class, null) - .getViolation()); + .getViolation()); } private void recordMessage(String message) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 311d7f50..0dc76eb5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -113,8 +113,10 @@ private void printDebugInfo(File file) throws CheckstyleException { } public static Collection paramaters() throws IOException { - ArrayList parameters = Arrays.stream(SOURCES_DIR.listFiles(SpringChecksTests::sourceFile)).sorted() - .map(Parameter::new).collect(Collectors.toCollection(ArrayList::new)); + ArrayList parameters = Arrays.stream(SOURCES_DIR.listFiles(SpringChecksTests::sourceFile)) + .sorted() + .map(Parameter::new) + .collect(Collectors.toCollection(ArrayList::new)); parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); return parameters; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index bb42d4f0..51b5bf72 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -54,7 +54,7 @@ public void loadShouldLoadChecks() { @Test public void loadWithExcludeShouldExcludeChecks() { Set excludes = Collections - .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); + .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); Collection checks = load(excludes); assertThat(checks).hasSize(4); TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; @@ -75,7 +75,7 @@ private Collection load(Set excludes) { new PackageObjectFactory(getClass().getPackage().getName(), getClass().getClassLoader()), excludes); context.add("moduleFactory", filteredModuleFactory); Collection checks = new SpringConfigurationLoader(context, filteredModuleFactory) - .load(getPropertyResolver()); + .load(getPropertyResolver()); return checks; } diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index f02bbf08..b00234a5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -107,8 +107,9 @@ protected void prepareWraps(int kind) { } private void applyPreparators(Phase preWrapping, int kind, ASTNode astRoot, TokenManager tokenManager) { - this.preparators.stream().filter((preparator) -> preparator.getPhase() == preWrapping) - .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); + this.preparators.stream() + .filter((preparator) -> preparator.getPhase() == preWrapping) + .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); } @SuppressWarnings("unchecked") diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index f02bbf08..b00234a5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -107,8 +107,9 @@ protected void prepareWraps(int kind) { } private void applyPreparators(Phase preWrapping, int kind, ASTNode astRoot, TokenManager tokenManager) { - this.preparators.stream().filter((preparator) -> preparator.getPhase() == preWrapping) - .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); + this.preparators.stream() + .filter((preparator) -> preparator.getPhase() == preWrapping) + .forEach((preparator) -> preparator.apply(kind, tokenManager, astRoot)); } @SuppressWarnings("unchecked") diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java index 5ddaf1ca..6878ca6f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/linewrap/WrapPreparator.java @@ -1684,4 +1684,5 @@ private void handleParenthesesPositions(int openingParenIndex, int closingParenI } // @formatter:on + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 80abe8ef..7b9678a9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -63,7 +63,7 @@ void formatCodeWithV11BaselineCanFormatOn11OrHigher(String version) throws Excep @ValueSource(strings = "8") void formatCodeWithV11BaselineCannotFormatOn8(String version) throws Exception { assertThatExceptionOfType(ContainerLaunchException.class) - .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); + .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); } private void runFormatter(JavaBaseline baseline, String version) throws IOException, Exception { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java index 6f03d89c..289577a4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java @@ -121,4 +121,5 @@ private String readContent(Reader reader) throws IOException { } return result.toString(); } + } From b618560fd4c69117d14f69e4c3cdbfafcc5d0060 Mon Sep 17 00:00:00 2001 From: Parker Mauney Date: Thu, 25 Nov 2021 13:09:35 -0600 Subject: [PATCH 028/136] Detect and preserve line separators Update `Formatter` so that line endings are now detected based on the contents of the file. This mirrors the behavior of the Eclipse plugin when used in the IDE, specifically the `nextDelimiterInfo` method in `org.eclipse.jface.text.DefaultLineTracker`. See gh-340 --- .../ProjectSettingsFilesTests.java | 3 ++- .../javaformat/gradle/CheckTaskTests.java | 16 +++++++++--- .../src/it/.gitattributes | 2 ++ .../io/spring/format/maven/VerifyApply.java | 2 +- .../src/test/resources/.gitattributes | 4 +++ .../test/resources/expected/correct-cr.txt | 1 + .../test/resources/expected/correct-crlf.txt | 9 +++++++ .../test/resources/expected/correct-lf.txt | 9 +++++++ .../src/test/resources/source/correct-cr.txt | 1 + .../test/resources/source/correct-crlf.txt | 9 +++++++ .../src/test/resources/source/correct-lf.txt | 9 +++++++ .../javaformat/formatter/Formatter.java | 26 +++++++++++++++++++ 12 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index a75b92b1..20c06744 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -95,7 +95,8 @@ void applyToProjectWithFileMergesToDotSettings() throws Exception { }).given(projectFile).setContents((InputStream) any(), anyInt(), any()); files.applyToProject(project, monitor); verify(projectFile).setContents((InputStream) any(), eq(1), eq(monitor)); - assertThat(out.toString(StandardCharsets.UTF_8)).isEqualTo("a=b\ny=z\n"); + assertThat(out.toString(StandardCharsets.UTF_8)) + .isEqualToNormalizingNewlines("a=b\ny=z\n"); } private ProjectSettingsFile createPrefsFile() throws IOException { diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index a5554177..0420e1c2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -23,7 +23,7 @@ import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.Arrays; -import java.util.Collections; +import java.util.List; import java.util.stream.Stream; import org.gradle.testkit.runner.BuildResult; @@ -72,8 +72,8 @@ void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds( GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - Files.write(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), - Collections.singletonList("// A change to the file"), StandardOpenOption.APPEND); + appendToFileNormalizingNewlines(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), + "// A change to the file"); result = gradleBuild.build("--debug", "check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @@ -146,4 +146,14 @@ private void copyFolder(Path source, Path target) throws IOException { } } + /** + * Uses a read/modify/truncate approach to append a line to a file. + * This avoids issues where the standard append option results in mixed line-endings. + */ + private void appendToFileNormalizingNewlines(Path sourceFilePath, String lineToAppend) throws IOException { + List lines = Files.readAllLines(sourceFilePath); + lines.add(lineToAppend); + Files.write(sourceFilePath, lines, StandardOpenOption.TRUNCATE_EXISTING); + } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes new file mode 100644 index 00000000..525113da --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes @@ -0,0 +1,2 @@ +# Test resources that need a predictable eol +apply*/src/main/java/simple/Simple.java eol=lf diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 3707cfee..3f8e76e1 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -30,7 +30,7 @@ */ public class VerifyApply { - private static final String LF = System.lineSeparator(); + private static final String LF = "\n"; private static final String JAVA_FILE = "src/main/java/simple/Simple.java"; diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes new file mode 100644 index 00000000..95175246 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes @@ -0,0 +1,4 @@ +# Test resources that need specific eol +**/correct-crlf.txt eol=crlf +**/correct-cr.txt eol=cr +**/correct-lf.txt eol=lf diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt new file mode 100644 index 00000000..a72e4bf3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt @@ -0,0 +1 @@ +package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt new file mode 100644 index 00000000..5a609678 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectCrlf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt new file mode 100644 index 00000000..3b6208a2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectLf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt new file mode 100644 index 00000000..a72e4bf3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt @@ -0,0 +1 @@ +package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt new file mode 100644 index 00000000..5a609678 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectCrlf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt new file mode 100644 index 00000000..3b6208a2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt @@ -0,0 +1,9 @@ +package correct; + +public class CorrectLf { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 83f6406c..c76873cf 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -17,6 +17,8 @@ package io.spring.javaformat.formatter; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; @@ -56,6 +58,11 @@ public class Formatter { */ private static final int DEFAULT_INDENTATION_LEVEL = 0; + /** + * Pattern that matches all line separators into named-capturing group "sep". + */ + private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("(?(\r\n|\r|\n))"); + /** * The default line separator. */ @@ -123,6 +130,9 @@ public TextEdit format(String source, int offset, int length, String lineSeparat public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator) { + if (lineSeparator == null) { + lineSeparator = detectLineSeparator(source); + } return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); } @@ -148,6 +158,9 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) { } public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) { + if (lineSeparator == null) { + lineSeparator = detectLineSeparator(source); + } return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator); } @@ -159,4 +172,17 @@ public void setOptions(Map options) { this.delegate.setOptions(options); } + private String detectLineSeparator(String contents) { + Matcher matcher = LINE_SEPARATOR_PATTERN.matcher(contents); + if (!matcher.find()) { + return DEFAULT_LINE_SEPARATOR; + } + String firstMatch = matcher.group("sep"); + while (matcher.find()) { + if (!matcher.group("sep").equals(firstMatch)) { + return DEFAULT_LINE_SEPARATOR; + } + } + return firstMatch; + } } From f50024aca40d369443a5966e6eba81ce828590f6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 15 Feb 2023 20:05:04 -0800 Subject: [PATCH 029/136] Polish 'Detect and preserve line separators' See gh-340 --- .../javaformat/gradle/CheckTaskTests.java | 28 ++++------- .../src/it/.gitattributes | 2 - .../io/spring/format/maven/VerifyApply.java | 18 +++---- .../formatter/AbstractFormatterTests.java | 49 +++++++++++++++++-- .../src/test/resources/.gitattributes | 4 -- .../test/resources/expected/correct-cr.txt | 1 - .../test/resources/expected/correct-crlf.txt | 9 ---- .../{correct-lf.txt => lineendings.txt} | 1 - .../src/test/resources/source/correct-cr.txt | 1 - .../test/resources/source/correct-crlf.txt | 9 ---- .../src/test/resources/source/correct-lf.txt | 9 ---- .../src/test/resources/source/lineendings.txt | 7 +++ .../javaformat/formatter/Formatter.java | 36 +++++--------- 13 files changed, 82 insertions(+), 92 deletions(-) delete mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt rename spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/{correct-lf.txt => lineendings.txt} (90%) delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt delete mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 0420e1c2..16d3aa4a 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -18,12 +18,11 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.Arrays; -import java.util.List; import java.util.stream.Stream; import org.gradle.testkit.runner.BuildResult; @@ -68,12 +67,12 @@ void whenFirstInvocationSucceedsThenSecondInvocationIsUpToDate() throws IOExcept @Test void whenFirstInvocationSucceedsAndSourceIsModifiedThenSecondInvocationSucceeds() throws IOException { - copyFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); + copyNormalizedFolder(new File("src/test/resources/check-ok").toPath(), this.temp.toPath()); GradleBuild gradleBuild = this.gradleBuild.source(this.temp); BuildResult result = gradleBuild.build("check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); - appendToFileNormalizingNewlines(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), - "// A change to the file"); + Files.write(new File(this.temp, "src/main/java/simple/Simple.java").toPath(), + "// A change to the file\n".getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND); result = gradleBuild.build("--debug", "check"); assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.SUCCESS); } @@ -129,14 +128,17 @@ void whenFirstInvocationFailsThenSecondInvocationFails() throws IOException { assertThat(result.task(":checkFormatMain").getOutcome()).isEqualTo(TaskOutcome.FAILED); } - private void copyFolder(Path source, Path target) throws IOException { + private void copyNormalizedFolder(Path source, Path target) throws IOException { try (Stream stream = Files.walk(source)) { stream.forEach((child) -> { try { Path relative = source.relativize(child); Path destination = target.resolve(relative); - if (!destination.toFile().isDirectory()) { - Files.copy(child, destination, StandardCopyOption.REPLACE_EXISTING); + if (!Files.isDirectory(child)) { + String content = new String(Files.readAllBytes(child), StandardCharsets.UTF_8); + String normalized = content.replace("\n\r", "\n").replace('\r', '\n'); + Files.createDirectories(destination.getParent()); + Files.write(destination, normalized.getBytes(StandardCharsets.UTF_8)); } } catch (Exception ex) { @@ -146,14 +148,4 @@ private void copyFolder(Path source, Path target) throws IOException { } } - /** - * Uses a read/modify/truncate approach to append a line to a file. - * This avoids issues where the standard append option results in mixed line-endings. - */ - private void appendToFileNormalizingNewlines(Path sourceFilePath, String lineToAppend) throws IOException { - List lines = Files.readAllLines(sourceFilePath); - lines.add(lineToAppend); - Files.write(sourceFilePath, lines, StandardOpenOption.TRUNCATE_EXISTING); - } - } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes deleted file mode 100644 index 525113da..00000000 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Test resources that need a predictable eol -apply*/src/main/java/simple/Simple.java eol=lf diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 3f8e76e1..bb7871ec 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,16 +30,14 @@ */ public class VerifyApply { - private static final String LF = "\n"; - private static final String JAVA_FILE = "src/main/java/simple/Simple.java"; public void verify(File base) throws IOException { - verify(base, LF); + verify(base, null); } public void verify(File base, boolean spaces) throws IOException { - verify(base, LF, spaces); + verify(base, null, spaces); } public void verify(File base, String lineSeparator) throws IOException { @@ -48,16 +46,14 @@ public void verify(File base, String lineSeparator) throws IOException { public void verify(File base, String lineSeparator, boolean spaces) throws IOException { String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); + if (lineSeparator == null) { + formated = formated.replace("\r\n", "\n").replace('\r', '\n'); + lineSeparator = "\n"; + } String indent = (!spaces) ? " " : " "; assertThat(formated).contains("Simple." + lineSeparator + " *" + lineSeparator + " * @author") .contains("public class Simple {") .contains(indent + "public static void main"); } - public static void main(String[] args) throws IOException { - new VerifyApply().verify(new File( - "/Users/pwebb/projects/spring-javaformat/code/spring-javaformat-maven/spring-javaformat-maven-plugin/target/it/apply-line-separator"), - "\r"); - } - } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index f039acfd..445daff9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,10 +17,11 @@ package io.spring.javaformat.formatter; import java.io.File; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; -import java.util.Collection; +import java.util.List; import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; @@ -47,7 +48,7 @@ protected final String read(File file) throws Exception { } protected static Item[] items(String expectedOverride) { - Collection items = new ArrayList<>(); + List items = new ArrayList<>(); File sourceDir = new File("src/test/resources/source"); File expectedDir = new File("src/test/resources/expected"); File configDir = new File("src/test/resources/config"); @@ -59,12 +60,52 @@ protected static Item[] items(String expectedOverride) { } File config = new File(configDir, source.getName()); for (JavaBaseline javaBaseline : JavaBaseline.values()) { - items.add(new Item(javaBaseline, source, expected, config)); + addItem(items, javaBaseline, source, expected, config); } } return items.toArray(new Item[0]); } + private static void addItem(List items, JavaBaseline javaBaseline, File source, File expected, File config) { + if (source.getName().contains("lineendings")) { + items.add(new Item(javaBaseline, copy(source, LineEnding.CR), copy(expected, LineEnding.CR), config)); + items.add(new Item(javaBaseline, copy(source, LineEnding.LF), copy(expected, LineEnding.LF), config)); + items.add(new Item(javaBaseline, copy(source, LineEnding.CRLF), copy(expected, LineEnding.CRLF), config)); + } + else { + items.add(new Item(javaBaseline, source, expected, config)); + } + } + + private static File copy(File file, LineEnding lineEnding) { + try { + String[] name = file.getName().split("\\."); + File result = File.createTempFile(name[0] + "_" + lineEnding + "_", "." + name[1]); + String content = Files.readString(file.toPath()); + content = content.replace("\r\n", "\n").replace('\r', '\n').replace("\n", lineEnding.ending()); + Files.writeString(result.toPath(), content); + return result; + } + catch (IOException ex) { + throw new IllegalStateException(ex); + } + } + + enum LineEnding { + + CR("\r"), LF("\n"), CRLF("\r\n"); + + private final String ending; + + LineEnding(String ending) { + this.ending = ending; + } + + String ending() { + return this.ending; + } + }; + static class Item { private final JavaBaseline javaBaseline; diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes deleted file mode 100644 index 95175246..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -# Test resources that need specific eol -**/correct-crlf.txt eol=crlf -**/correct-cr.txt eol=cr -**/correct-lf.txt eol=lf diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt deleted file mode 100644 index a72e4bf3..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-cr.txt +++ /dev/null @@ -1 +0,0 @@ -package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt deleted file mode 100644 index 5a609678..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-crlf.txt +++ /dev/null @@ -1,9 +0,0 @@ -package correct; - -public class CorrectCrlf { - - public static void main(String[] args) throws Exception { - // FIXME - } - -} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/lineendings.txt similarity index 90% rename from spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/lineendings.txt index 3b6208a2..92ad853f 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/correct-lf.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/lineendings.txt @@ -3,7 +3,6 @@ package correct; public class CorrectLf { public static void main(String[] args) throws Exception { - // FIXME } } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt deleted file mode 100644 index a72e4bf3..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-cr.txt +++ /dev/null @@ -1 +0,0 @@ -package correct; public class CorrectCr { public static void main(String[] args) throws Exception { // FIXME } } \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt deleted file mode 100644 index 5a609678..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-crlf.txt +++ /dev/null @@ -1,9 +0,0 @@ -package correct; - -public class CorrectCrlf { - - public static void main(String[] args) throws Exception { - // FIXME - } - -} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt deleted file mode 100644 index 3b6208a2..00000000 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/correct-lf.txt +++ /dev/null @@ -1,9 +0,0 @@ -package correct; - -public class CorrectLf { - - public static void main(String[] args) throws Exception { - // FIXME - } - -} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt new file mode 100644 index 00000000..e56b3941 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/lineendings.txt @@ -0,0 +1,7 @@ +package correct; + +public class CorrectLf { + + public static void main(String[] args) throws Exception { } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index c76873cf..97d20003 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ package io.spring.javaformat.formatter; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.eclipse.jface.text.IRegion; import org.eclipse.text.edits.TextEdit; @@ -58,11 +56,6 @@ public class Formatter { */ private static final int DEFAULT_INDENTATION_LEVEL = 0; - /** - * Pattern that matches all line separators into named-capturing group "sep". - */ - private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("(?(\r\n|\r|\n))"); - /** * The default line separator. */ @@ -130,9 +123,7 @@ public TextEdit format(String source, int offset, int length, String lineSeparat public TextEdit format(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator) { - if (lineSeparator == null) { - lineSeparator = detectLineSeparator(source); - } + lineSeparator = (lineSeparator != null) ? lineSeparator : detectLineSeparator(source); return this.delegate.format(kind, source, offset, length, indentationLevel, lineSeparator); } @@ -158,9 +149,7 @@ public TextEdit format(String source, IRegion[] regions, String lineSeparator) { } public TextEdit format(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator) { - if (lineSeparator == null) { - lineSeparator = detectLineSeparator(source); - } + lineSeparator = (lineSeparator != null) ? lineSeparator : detectLineSeparator(source); return this.delegate.format(kind, source, regions, indentationLevel, lineSeparator); } @@ -173,16 +162,17 @@ public void setOptions(Map options) { } private String detectLineSeparator(String contents) { - Matcher matcher = LINE_SEPARATOR_PATTERN.matcher(contents); - if (!matcher.find()) { - return DEFAULT_LINE_SEPARATOR; - } - String firstMatch = matcher.group("sep"); - while (matcher.find()) { - if (!matcher.group("sep").equals(firstMatch)) { - return DEFAULT_LINE_SEPARATOR; + int length = contents.length(); + for (int i = 0; i < length; i++) { + char ch = contents.charAt(i); + boolean isLastChar = (i + 1) == length; + if (ch == '\r') { + return (isLastChar || contents.charAt(i + 1) != '\n') ? "\r" : "\r\n"; + } + if (ch == '\n') { + return "\n"; } } - return firstMatch; + return null; } } From 8207729eb3468964d7707dd443ccec97c68d7603 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 16:05:38 -0800 Subject: [PATCH 030/136] Add additional skip properties Allow formatting to skipped and refine skip properties to allow individual goals to be skipped for both goals to be skipped. Closes gh-360 --- README.adoc | 3 ++ .../src/it/apply-skip/pom.xml | 32 +++++++++++++++++++ .../src/main/java/simple/Simple.java | 14 ++++++++ .../src/it/apply-skip/verify.groovy | 1 + .../it/validate-skip-global-property/pom.xml | 30 +++++++++++++++++ .../src/main/java/simple/Simple.java | 15 +++++++++ .../src/it/validate-skip-property/pom.xml | 30 +++++++++++++++++ .../src/main/java/simple/Simple.java | 15 +++++++++ .../io/spring/format/maven/ApplyMojo.java | 11 +++++++ .../io/spring/format/maven/FormatMojo.java | 20 ++++++++++++ .../io/spring/format/maven/ValidateMojo.java | 6 ++-- .../io/spring/format/maven/VerifyApply.java | 6 ++++ 12 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml create mode 100644 spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java diff --git a/README.adoc b/README.adoc index dcff9917..3ebea46f 100644 --- a/README.adoc +++ b/README.adoc @@ -76,6 +76,9 @@ NOTE: The source formatter does not fundamentally change your code. For example, it will not change the order of import statements. It is effectively limited to adding or removing whitespace and line feeds. +TIP: You can use `-Dspring-javaformat.validate.skip=true` or `-Dspring-javaformat.apply.skip=true` command line arguments to temporarily skip the validation or format goals. +If you want to skip both, you can use `-Dspring-javaformat.skip=true`. + === Checkstyle diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml new file mode 100644 index 00000000..213305b9 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + io.spring.javaformat + apply-skip + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + apply + + + true + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java new file mode 100644 index 00000000..10016e5d --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/src/main/java/simple/Simple.java @@ -0,0 +1,14 @@ +package simple; + +/** + * Simple. + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy new file mode 100644 index 00000000..5ffd403d --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/apply-skip/verify.groovy @@ -0,0 +1 @@ +new io.spring.format.maven.VerifyApply().verifyNoApply(basedir) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml new file mode 100644 index 00000000..d05c8e80 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + io.spring.javaformat + validate-skip-global-property + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + true + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + validate + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java new file mode 100644 index 00000000..14f14516 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-global-property/src/main/java/simple/Simple.java @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml new file mode 100644 index 00000000..e0319c25 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + io.spring.javaformat + validate-skip-property + 0.0.1.BUILD-SNAPSHOT + + UTF-8 + 1.8 + 1.8 + true + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + validate + + + + + + + diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java new file mode 100644 index 00000000..14f14516 --- /dev/null +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/it/validate-skip-property/src/main/java/simple/Simple.java @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // Main method + } + +} diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index a519102b..52d3908a 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -24,6 +24,7 @@ import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; import io.spring.javaformat.formatter.FileEdit; import io.spring.javaformat.formatter.FileFormatterException; @@ -36,9 +37,19 @@ @Mojo(name = "apply", defaultPhase = LifecyclePhase.PROCESS_SOURCES, threadSafe = true) public class ApplyMojo extends FormatMojo { + /** + * Skip the execution. + */ + @Parameter(property = "spring-javaformat.format.skip", defaultValue = "false") + private boolean skip; + @Override protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { + if (this.skip || skipGlobally()) { + getLog().debug("skipping format apply as per configuration."); + return; + } try { getFormatter().formatFiles(files, encoding, lineSeparator).filter(FileEdit::hasEdits).forEach(this::save); } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 75e56569..212316ea 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -26,9 +26,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -68,6 +70,12 @@ public abstract class FormatMojo extends AbstractMojo { @Parameter(defaultValue = "${project}", readonly = true, required = true) protected MavenProject project; + /** + * The Maven Session Object. + */ + @Parameter(defaultValue = "${session}", readonly = true, required = true) + protected MavenSession session; + /** * Specifies the location of the source directories to use. */ @@ -195,4 +203,16 @@ protected final FileFormatter getFormatter() { return new FileFormatter(javaFormatConfig); } + protected boolean skipGlobally() { + boolean result = false; + result = result || skipGlobally(this.session.getUserProperties()); + result = result || skipGlobally(this.session.getSystemProperties()); + result = result || skipGlobally(this.project.getProperties()); + return result; + } + + private boolean skipGlobally(Properties properties) { + return Boolean.valueOf(properties.getProperty("spring-javaformat.skip")); + } + } diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 32bf370b..d9285c15 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -40,14 +40,14 @@ public class ValidateMojo extends FormatMojo { /** * Skip the execution. */ - @Parameter(property = "spring-javaformat.skip", defaultValue = "false") + @Parameter(property = "spring-javaformat.validate.skip", defaultValue = "false") private boolean skip; @Override protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { - if (this.skip) { - getLog().debug("skipping validation as per configuration."); + if (this.skip || skipGlobally()) { + getLog().debug("skipping format validate as per configuration."); return; } List problems = getFormatter().formatFiles(files, encoding, lineSeparator) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index bb7871ec..74899016 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -56,4 +56,10 @@ public void verify(File base, String lineSeparator, boolean spaces) throws IOExc .contains(indent + "public static void main"); } + public void verifyNoApply(File base) throws IOException { + String formated = new String(Files.readAllBytes(base.toPath().resolve(JAVA_FILE)), StandardCharsets.UTF_8); + formated = formated.replace("\r\n", "\n").replace('\r', '\n'); + assertThat(formated).contains("Simple {"); + } + } From fbd0c3365d507ee989c9c0931d43e36ce0da32b2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 16:16:36 -0800 Subject: [PATCH 031/136] Add WebMvcLinkBuilder as allowed static import Add `org.springframework.hateoas.server.mvc.WebMvcLinkBuilder` as an allowed static import and remove legacy class reference. Closes gh-350 --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index d88c11be..255316b0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,7 +55,7 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("org.springframework.boot.configurationprocessor.ConfigurationMetadataMatchers.*"); excludes.add("org.springframework.boot.configurationprocessor.TestCompiler.*"); excludes.add("org.springframework.boot.test.autoconfigure.AutoConfigurationImportedCondition.*"); - excludes.add("org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo"); + excludes.add("org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*"); excludes.add("org.springframework.restdocs.headers.HeaderDocumentation.*"); excludes.add("org.springframework.restdocs.hypermedia.HypermediaDocumentation.*"); excludes.add("org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.*"); From 39f34a807e0b30532e59a3c53d222459cf6efa50 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 16:18:09 -0800 Subject: [PATCH 032/136] Update copyright year of changed files --- .../eclipse/m2e/MavenProjectSettingsConfigurator.java | 2 +- .../spring-javaformat-gradle-plugin/gradlew | 2 +- .../spring-javaformat-gradle-plugin/gradlew.bat | 2 +- .../io/spring/javaformat/gradle/SpringJavaFormatPlugin.java | 2 +- .../java/io/spring/javaformat/gradle/tasks/CheckFormat.java | 2 +- .../src/main/java/io/spring/format/maven/ApplyMojo.java | 2 +- .../src/main/java/io/spring/format/maven/FormatMojo.java | 2 +- .../src/main/java/io/spring/format/maven/ValidateMojo.java | 2 +- .../spring/javaformat/checkstyle/SpringConfigurationLoader.java | 2 +- .../checkstyle/check/SpringHideUtilityClassConstructor.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJUnit5Check.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJavadocCheck.java | 2 +- .../javaformat/checkstyle/check/SpringMethodOrderCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringTernaryCheck.java | 2 +- .../spring/javaformat/checkstyle/AssertionsAuditListener.java | 2 +- .../java/io/spring/javaformat/checkstyle/SpringChecksTests.java | 2 +- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../spring/javaformat/formatter/FormatterIntegrationTests.java | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java index 030a873f..67f669d6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew index 4f906e0c..22cf4de8 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew @@ -1,7 +1,7 @@ #!/usr/bin/env sh # -# Copyright 2015 the original author or authors. +# Copyright 2015-2023 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat index ac1b06f9..18a320c0 100755 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/gradlew.bat @@ -1,5 +1,5 @@ @rem -@rem Copyright 2015 the original author or authors. +@rem Copyright 2015-2023 the original author or authors. @rem @rem Licensed under the Apache License, Version 2.0 (the "License"); @rem you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 9453cb7c..032253ff 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 1ae2e597..096e1109 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index 52d3908a..0514ed7e 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index 212316ea..effde959 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index d9285c15..5d4c0e2c 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 31ff7d1a..202b085f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java index 5bd30954..84b25ec4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 7a6aa9c1..5b5dc191 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 1eb0c25e..7fd8a0dd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java index eac7102f..d5efe2f3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java index 4b987450..23c79dda 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index e91a1fd5..5812901c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 0dc76eb5..b4482716 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 51b5bf72..550d2cef 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index b00234a5..60b0e6e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index b00234a5..60b0e6e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 7b9678a9..88d41505 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 745b0f214e9deab858481d3be6c748808113e21c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 17:43:01 -0800 Subject: [PATCH 033/136] Ensure newlines are added before record/enum/annotation types Update `JavadocLineBreakPreparator` to ensure that two spaces are added before `@param` tags on record, enum and annotation types. Fixes gh-346 --- .../record-with-param.txt | 16 ++++++++++++++++ .../resources/FormatterTests-expected/simple.txt | 15 +++++++++++++++ .../resources/expected/record-with-param.txt | 16 ++++++++++++++++ .../test/resources/source/record-with-param.txt | 15 +++++++++++++++ .../src/test/resources/source/simple.txt | 1 - .../jdk11/eclipse/CodeLineBreakPreparator.java | 4 ++-- .../eclipse/JavadocLineBreakPreparator.java | 12 ++++++------ .../jdk8/eclipse/CodeLineBreakPreparator.java | 4 ++-- .../jdk8/eclipse/JavadocLineBreakPreparator.java | 12 ++++++------ 9 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt new file mode 100644 index 00000000..57e16f3c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/record-with-param.txt @@ -0,0 +1,16 @@ +package simple; + +/** + * Settings that can be applied when creating a {@link ClientHttpRequestFactory}. + * + * @param connectTimeout the connect timeout + * @param readTimeout the read timeout + * @param bufferRequestBody if request body buffering is used + * @author Andy Wilkinson + * @author Phillip Webb + * @since 3.0.0 + * @see ClientHttpRequestFactories + */ +public record Simple(String name) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt new file mode 100644 index 00000000..63ca9a5c --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/FormatterTests-expected/simple.txt @@ -0,0 +1,15 @@ +package simple; + +/** + * Simple. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public class Simple { + + public static void main(String[] args) throws Exception { + // FIXME + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt new file mode 100644 index 00000000..164c5351 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-param.txt @@ -0,0 +1,16 @@ +package simple; + +/** + * Settings that can be applied when creating a {@link ClientHttpRequestFactory}. + * + * @param connectTimeout the connect timeout + * @param readTimeout the read timeout + * @param bufferRequestBody if request body buffering is used + * @author Andy Wilkinson + * @author Phillip Webb + * @since 3.0.0 + * @see ClientHttpRequestFactories + */ +public record Simple(String name) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt new file mode 100644 index 00000000..37149688 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/record-with-param.txt @@ -0,0 +1,15 @@ +package simple; + +/** + * Settings that can be applied when creating a {@link ClientHttpRequestFactory}. + * @param connectTimeout the connect timeout + * @param readTimeout the read timeout + * @param bufferRequestBody if request body buffering is used + * @author Andy Wilkinson + * @author Phillip Webb + * @since 3.0.0 + * @see ClientHttpRequestFactories + */ + public record Simple(String name) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt index a12ac39e..62d2a493 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/simple.txt @@ -2,7 +2,6 @@ package simple; /** * Simple. - * * @author Phillip Webb * @since 1.0.0 */ diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java index 6b3ee9d8..15057474 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,7 +31,7 @@ import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune curly-brace line breaks. + * {@link Preparator} to finetune curly-brace line breaks. * * @author Phillip Webb */ diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java index 1e77a4ff..e367de90 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,12 +22,12 @@ import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Comment; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Javadoc; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TagElement; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; @@ -35,7 +35,7 @@ import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune Javadoc whitespace. + * {@link Preparator} to finetune Javadoc whitespace. * * @author Phillip Webb */ @@ -112,15 +112,15 @@ public boolean visit(TagElement node) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); - token.putLineBreaksBefore( - this.declaration instanceof TypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); + boolean isTypeDeclaration = this.declaration instanceof AbstractTypeDeclaration; + token.putLineBreaksBefore(isTypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); this.firstTagElement = false; } return true; } private boolean isSquashRequired(TagElement node, ASTNode declaration) { - if (declaration instanceof TypeDeclaration) { + if (declaration instanceof AbstractTypeDeclaration) { String tagName = node.getTagName(); return (!node.isNested() && tagName != null && tagName.startsWith("@")); } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java index 29d16a3d..df26a623 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,7 +31,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune curly-brace line breaks. + * {@link Preparator} to finetune curly-brace line breaks. * * @author Phillip Webb */ diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 6a7a4752..68723201 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,12 +22,12 @@ import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.AbstractTypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Comment; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Javadoc; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TagElement; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.TypeDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk8.internal.compiler.parser.TerminalTokens; import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; @@ -35,7 +35,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; /** - * {@link Preparator} to fine tune Javadoc whitespace. + * {@link Preparator} to finetune Javadoc whitespace. * * @author Phillip Webb */ @@ -112,15 +112,15 @@ public boolean visit(TagElement node) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); - token.putLineBreaksBefore( - this.declaration instanceof TypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); + boolean isTypeDeclaration = this.declaration instanceof AbstractTypeDeclaration; + token.putLineBreaksBefore(isTypeDeclaration && this.firstTagElement && this.hasText ? 2 : 1); this.firstTagElement = false; } return true; } private boolean isSquashRequired(TagElement node, ASTNode declaration) { - if (declaration instanceof TypeDeclaration) { + if (declaration instanceof AbstractTypeDeclaration) { String tagName = node.getTagName(); return (!node.isNested() && tagName != null && tagName.startsWith("@")); } From ae5e3f2e253c982617ebec864a47545685b89d05 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 19:56:37 -0800 Subject: [PATCH 034/136] Add checkstyle rule to make sure test class names end in "Tests" Closes gh-222 --- .../check/SpringTestFileNameCheck.java | 40 +++++++++++++++++++ .../checkstyle/check/messages.properties | 1 + .../checkstyle/spring-checkstyle.xml | 1 + .../checkstyle/SpringChecksTests.java | 7 ++++ .../SpringConfigurationLoaderTests.java | 10 ++--- .../check/src/test/java/NamedTest.txt | 1 + .../check/src/test/java/NamedTests.txt | 1 + .../source/src/test/java/NamedTest.java | 24 +++++++++++ .../source/src/test/java/NamedTests.java | 24 +++++++++++ 9 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java new file mode 100644 index 00000000..eeda7a05 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -0,0 +1,40 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.checkstyle.check; + +import java.io.File; + +import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck; +import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.FileText; + +/** + * Checks that test filenames end {@literal Tests.java} and not {@literal Test.java}. + * + * @author Phillip Webb + */ +public class SpringTestFileNameCheck extends AbstractFileSetCheck { + + @Override + protected void processFiltered(File file, FileText fileText) throws CheckstyleException { + String path = file.getPath().replace('\\', '/'); + if (path.contains("src/test/java") && file.getName().endsWith("Test.java")) { + log(1, "testfilename.wrongName"); + } + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 735d7b43..64dc9a8c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -26,6 +26,7 @@ methodvisibility.publicMethod=Method ''{0}'' in private class should not be publ nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". ternary.equalOperator=Ternary operation should use != when testing. ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\" +testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. leadingwhitespace.incorrect=Indentation should be performed with {0} only. deprecated.missingSince=@Deprecated has no since attribute. deprecated.emptySince=@Deprecated has an empty since attribute. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 894b78bb..92bd7cb1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -11,6 +11,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index b4482716..7d789a94 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,6 +42,7 @@ import com.puppycrawl.tools.checkstyle.api.CheckstyleException; import com.puppycrawl.tools.checkstyle.api.Configuration; import com.puppycrawl.tools.checkstyle.api.RootModule; +import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.xml.sax.InputSource; @@ -62,6 +64,9 @@ public class SpringChecksTests { private static final File DEFAULT_CONFIG = new File(CONFIGS_DIR, "default-checkstyle-configuration.xml"); + @TempDir + public Path temp; + @ParameterizedTest @MethodSource("paramaters") public void processHasExpectedResults(Parameter parameter) throws Exception { @@ -118,6 +123,8 @@ public static Collection paramaters() throws IOException { .map(Parameter::new) .collect(Collectors.toCollection(ArrayList::new)); parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); + parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTest.java"))); + parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTests.java"))); return parameters; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 550d2cef..82e63f1e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -45,8 +45,8 @@ public class SpringConfigurationLoaderTests { @Test public void loadShouldLoadChecks() { Collection checks = load(null); - assertThat(checks).hasSize(4); - TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; + assertThat(checks).hasSize(5); + TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(60); } @@ -56,8 +56,8 @@ public void loadWithExcludeShouldExcludeChecks() { Set excludes = Collections .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); Collection checks = load(excludes); - assertThat(checks).hasSize(4); - TreeWalker treeWalker = (TreeWalker) checks.toArray()[3]; + assertThat(checks).hasSize(5); + TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(59); } @@ -66,7 +66,7 @@ public void loadWithExcludeShouldExcludeChecks() { public void loadWithExcludeHeaderShouldExcludeChecks() { Set excludes = Collections.singleton("io.spring.javaformat.checkstyle.check.SpringHeaderCheck"); Object[] checks = load(excludes).stream().toArray(); - assertThat(checks).hasSize(3); + assertThat(checks).hasSize(4); } private Collection load(Set excludes) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt new file mode 100644 index 00000000..38fff433 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTest.txt @@ -0,0 +1 @@ ++Test classes should have a name ending with Tests.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/NamedTests.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java new file mode 100644 index 00000000..a8da0363 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java @@ -0,0 +1,24 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * This is a test with the wrong name. + * + * @author Phillip Webb + */ +public class NamedTest { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java new file mode 100644 index 00000000..aa494a65 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java @@ -0,0 +1,24 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * This is a test with the correct name. + * + * @author Phillip Webb + */ +public class NamedTests { + +} From 8bca211810a6378aa3d3461b0c3bfa759079484a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 20:41:34 -0800 Subject: [PATCH 035/136] Allow whitespace after '(' and before '//' Closes gh-270 --- .../checkstyle/check/SpringParenPadCheck.java | 77 +++++++++++++++++++ .../checkstyle/check/messages.properties | 6 ++ .../checkstyle/spring-checkstyle.xml | 2 +- .../resources/check/AsciidoctorCallout.txt | 1 + .../resources/source/AsciidoctorCallout.java | 29 +++++++ 5 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java new file mode 100644 index 00000000..9d8e271f --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java @@ -0,0 +1,77 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.checkstyle.check; + +import java.util.Locale; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.checks.whitespace.PadOption; +import com.puppycrawl.tools.checkstyle.checks.whitespace.ParenPadCheck; +import com.puppycrawl.tools.checkstyle.utils.CommonUtil; + +/** + * {@link ParenPadCheck} variant that allows whitespace after {@code (} if before + * {@code //}. + * + * @author Phillip Webb + */ +public class SpringParenPadCheck extends ParenPadCheck { + + private static final char OPEN_PARENTHESIS = '('; + + private static final char CLOSE_PARENTHESIS = ')'; + + private PadOption option = PadOption.NOSPACE; + + @Override + public void setOption(String optionStr) { + this.option = PadOption.valueOf(optionStr.trim().toUpperCase(Locale.ENGLISH)); + } + + @Override + protected void processLeft(DetailAST ast) { + String line = getLines()[ast.getLineNo() - 1]; + int[] codePoints = line.codePoints().toArray(); + int after = ast.getColumnNo() + 1; + if (after < codePoints.length) { + boolean hasWhitespaceAfter = isConsideredWhitespace(codePoints, after); + if (this.option == PadOption.NOSPACE && hasWhitespaceAfter) { + log(ast, MSG_WS_FOLLOWED, OPEN_PARENTHESIS); + } + else if (this.option == PadOption.SPACE && !hasWhitespaceAfter && line.charAt(after) != CLOSE_PARENTHESIS) { + log(ast, MSG_WS_NOT_FOLLOWED, OPEN_PARENTHESIS); + } + } + } + + private boolean isConsideredWhitespace(int[] codePoints, int after) { + if (CommonUtil.isCodePointWhitespace(codePoints, after)) { + return !isSlashSlash(codePoints, after + 1); + } + return false; + } + + private boolean isSlashSlash(int[] codePoints, int index) { + if (index + 1 < codePoints.length) { + char c1 = Character.toChars(codePoints[index])[0]; + char c2 = Character.toChars(codePoints[index + 1])[0]; + return c1 == '/' && c2 == '/'; + } + return false; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 64dc9a8c..7088b38e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -30,3 +30,9 @@ testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. leadingwhitespace.incorrect=Indentation should be performed with {0} only. deprecated.missingSince=@Deprecated has no since attribute. deprecated.emptySince=@Deprecated has an empty since attribute. +ws.followed=''{0}'' is followed by whitespace. +ws.illegalFollow=''{0}'' is followed by an illegal character. +ws.notFollowed=''{0}'' is not followed by whitespace. +ws.notPreceded=''{0}'' is not preceded with whitespace. +ws.preceded=''{0}'' is preceded with whitespace. +ws.typeCast=''typecast'' is not followed by whitespace. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 92bd7cb1..41eb9ebf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -146,7 +146,6 @@ - @@ -162,5 +161,6 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AsciidoctorCallout.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java new file mode 100644 index 00000000..3f32c462 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java @@ -0,0 +1,29 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * This is a valid example. + * + * @author Phillip Webb + */ +public class AsciidoctorCallout { + + public void example() { + RestAssured.given(this.spec).filter(document("headers", requestHeaders( // <1> + ))); + } + +} From 4a23173ad62e45a734d0999c68da49b01fd18c08 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 16 Feb 2023 20:46:31 -0800 Subject: [PATCH 036/136] Polish --- .../io/spring/javaformat/checkstyle/check/messages.properties | 2 +- .../io/spring/javaformat/formatter/AbstractFormatterTests.java | 1 + .../src/main/java/io/spring/javaformat/formatter/Formatter.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 7088b38e..9982830e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -25,7 +25,7 @@ methodorder.outOfOrder=Method ''{0}'' is out of order, expected {1}. methodvisibility.publicMethod=Method ''{0}'' in private class should not be public. nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". ternary.equalOperator=Ternary operation should use != when testing. -ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\" +ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\". testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. leadingwhitespace.incorrect=Indentation should be performed with {0} only. deprecated.missingSince=@Deprecated has no since attribute. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index 445daff9..a87814c3 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -104,6 +104,7 @@ enum LineEnding { String ending() { return this.ending; } + }; static class Item { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 97d20003..53415a7a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -175,4 +175,5 @@ private String detectLineSeparator(String contents) { } return null; } + } From 93300664e2388a0e8bf4038918f5b91b425143d4 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 17 Feb 2023 13:12:13 -0800 Subject: [PATCH 037/136] Make getFormattedContent() public again --- .../src/main/java/io/spring/javaformat/formatter/Edit.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/FileEdit.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java index 7dbf18d8..ee14ed94 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java @@ -45,7 +45,7 @@ public boolean hasEdits() { return (this.textEdit.hasChildren() || this.textEdit.getLength() > 0); } - protected String getFormattedContent() throws Exception { + public String getFormattedContent() throws Exception { IDocument document = new Document(this.originalContent); this.textEdit.apply(document); String formattedContent = document.get(); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java index f7252a23..a0fe488e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java @@ -56,7 +56,7 @@ public void save() { } @Override - protected String getFormattedContent() throws Exception { + public String getFormattedContent() throws Exception { try { return super.getFormattedContent(); } From 443bfd655298fa0bd90db12120aff41cc266ca55 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 09:08:55 -0800 Subject: [PATCH 038/136] Reset Visual Studio Code extension version number after release See gh-142 --- ci/scripts/stage.sh | 1 + .../pom.xml | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 21fc79d5..3228bac2 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,6 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension antrun:run@update-version git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 67243d61..fd22bab2 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -117,6 +117,25 @@ + + org.apache.maven.plugins + maven-antrun-plugin + + + update-version + + run + + + + + + + + + From 37cb7486a7468dd8c5afb6c079b9c2aa971abcef Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 10:35:26 -0800 Subject: [PATCH 039/136] Fix 'Reset Visual Studio Code extension version number after release' See gh-142 --- ci/scripts/stage.sh | 2 +- .../pom.xml | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 3228bac2..7236cc9d 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,7 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension antrun:run@update-version +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index fd22bab2..9313376e 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -138,11 +138,19 @@ - - - io.spring.javaformat - spring-javaformat-formatter-shaded - ${project.version} - - + + + formatter-dependencies + + true + + + + io.spring.javaformat + spring-javaformat-formatter-shaded + ${project.version} + + + + From 472361080e18b1d1b7bd76bc6bf2548f8e237fc3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 11:53:27 -0800 Subject: [PATCH 040/136] Use springio/concourse-release-scripts Docker image rather than jar --- ci/images/setup.sh | 1 - ci/pipeline.yml | 3 --- ci/scripts/promote.sh | 5 ++--- ci/tasks/promote.yml | 7 +++++++ 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ci/images/setup.sh b/ci/images/setup.sh index 31f56577..6c90192c 100755 --- a/ci/images/setup.sh +++ b/ci/images/setup.sh @@ -11,7 +11,6 @@ ln -fs /usr/share/zoneinfo/UTC /etc/localtime dpkg-reconfigure --frontend noninteractive tzdata rm -rf /var/lib/apt/lists/* curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.4/concourse-java.sh > /opt/concourse-java.sh -curl --output /opt/concourse-release-scripts.jar https://repo.spring.io/release/io/spring/concourse/releasescripts/concourse-release-scripts/0.3.2/concourse-release-scripts-0.3.2.jar ########################################################### # JAVA diff --git a/ci/pipeline.yml b/ci/pipeline.yml index d4708570..8f941a1c 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -263,7 +263,6 @@ jobs: download_artifacts: false save_build_info: true - task: promote - image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: M @@ -292,7 +291,6 @@ jobs: download_artifacts: false save_build_info: true - task: promote - image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RC @@ -319,7 +317,6 @@ jobs: download_artifacts: true save_build_info: true - task: promote - image: ci-image file: git-repo/ci/tasks/promote.yml params: RELEASE_TYPE: RELEASE diff --git a/ci/scripts/promote.sh b/ci/scripts/promote.sh index 30c3ace1..4ce8285b 100755 --- a/ci/scripts/promote.sh +++ b/ci/scripts/promote.sh @@ -1,18 +1,17 @@ #!/bin/bash set -e -source $(dirname $0)/common.sh CONFIG_DIR=git-repo/ci/config version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json -java -jar /opt/concourse-release-scripts.jar \ +java -jar /concourse-release-scripts.jar \ --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ publishToCentral $RELEASE_TYPE $BUILD_INFO_LOCATION artifactory-repo || { exit 1; } -java -jar /opt/concourse-release-scripts.jar \ +java -jar /concourse-release-scripts.jar \ --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ promote $RELEASE_TYPE $BUILD_INFO_LOCATION || { exit 1; } diff --git a/ci/tasks/promote.yml b/ci/tasks/promote.yml index 92b92c34..349d1866 100644 --- a/ci/tasks/promote.yml +++ b/ci/tasks/promote.yml @@ -1,5 +1,12 @@ --- platform: linux +image_resource: + type: registry-image + source: + repository: springio/concourse-release-scripts + tag: '0.3.4' + username: ((docker-hub-username)) + password: ((docker-hub-password)) inputs: - name: git-repo - name: artifactory-repo From 9b14d5c9e8c0d3de8a037831494845e9ea806064 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 13:35:23 -0800 Subject: [PATCH 041/136] Generate sources jar for VSCode extension See gh-142 --- .../spring-javaformat-vscode-extension/pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 9313376e..721a0633 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -24,6 +24,18 @@ + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + org.apache.maven.plugins maven-shade-plugin From 34cf2ab32c5a04ad49676fafdf543f0f3777d283 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 21 Feb 2023 22:37:23 +0000 Subject: [PATCH 042/136] Next development version (v0.0.37-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index 3ebea46f..a6f6011b 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.35 +:release-version: 0.0.36 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 98a2d21b..bcf36f38 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 929bd3cb..136fb48b 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.36-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.37-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.36-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.37-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index d5a50805..99e4b534 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index d7e1b4f2..de8b66eb 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.36.qualifier" + version="0.0.37.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 999de9e4..85b811c0 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 2b6351bb..b5ec6bb0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 409803ad..bb421056 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 8c6f5258..0c503ce4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index b3a9b579..c7fa1106 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 9f94ca47..40ba6eb5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index e7c5b534..99e706a0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index e7c31f42..58edc2fd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 24fe7ecd..c2b82659 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 5a9a4e8f..9c0833d1 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index e5848529..8561d128 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index b17124e9..f23f3da1 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 14ff88e4..4457d134 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index f1743282..e8542b2d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index d49d6851..db799eca 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index f0a26622..7450d740 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 74e7c00f..b2b74d9f 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 41197ebf..114ccca2 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 721a0633..04da0864 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 856c0d5d..7b553b68 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 784e7a04..b38e4762 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 01434bbc..f1dc7128 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 587ba2b1..0bd97a80 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 9d7f1a3d..98573939 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 2020c483..f8a10931 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.36.qualifier +Bundle-Version: 0.0.37.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 60417036..63681ee4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 083d6620..04ee62da 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 6be0431c..1ab1d36d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index bba44386..8a4ef4cb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index b0587449..4a9a823d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index b0fb5f95..1307ac1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 2ee7a7aa..3fbca6ac 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index ead2a85c..545cbaba 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 06402206..946c177d 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 8e859fdb..84a998ec 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.36-SNAPSHOT + 0.0.37-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From cc324705cacdb66960a076a5339f4bf2a3a49d31 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 18:14:54 -0800 Subject: [PATCH 043/136] Change "insert space" setting for type parameters based on Java version Change `insert_space_after_closing_angle_bracket_in_type_parameters` setting when Java 8 is used so that a space is inserted after the parameter type. Later versions of the Eclipse formatter can use `do not insert` and they will correctly format classes. Earlier versions need to use `insert` otherwise the space disappears. This commit effectively reverts commit b11499d4 for Java 8 only. This shouldn't be a problem since records were introduced in Java 14. Fixes gh-363 --- .../formatter/AbstractFormatterTests.java | 17 +++++++++++++---- .../src/test/resources/expected/generics.txt | 8 ++++++++ .../expected/{ => v11}/record-with-generic.txt | 0 .../expected/v8/record-with-generic.txt | 11 +++++++++++ .../src/test/resources/source/generics.txt | 8 ++++++++ .../javaformat/formatter/eclipse/Options.java | 9 +++++++-- 6 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt rename spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/{ => v11}/record-with-generic.txt (100%) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index a87814c3..bf873dd2 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -54,18 +54,27 @@ protected static Item[] items(String expectedOverride) { File configDir = new File("src/test/resources/config"); File expectedOverrideDir = new File("src/test/resources/" + expectedOverride); for (File source : sourceDir.listFiles((dir, name) -> !name.startsWith("."))) { - File expected = new File(expectedOverrideDir, source.getName()); - if (!expected.exists()) { - expected = new File(expectedDir, source.getName()); - } File config = new File(configDir, source.getName()); for (JavaBaseline javaBaseline : JavaBaseline.values()) { + File expected = getExpected(source, javaBaseline, expectedOverrideDir, expectedDir); addItem(items, javaBaseline, source, expected, config); } } return items.toArray(new Item[0]); } + private static File getExpected(File source, JavaBaseline javaBaseline, File... expectedDirs) { + for (File expectedDir : expectedDirs) { + File versionSpecificExpectedDir = new File(expectedDir, javaBaseline.toString().toLowerCase()); + File expected = new File(versionSpecificExpectedDir, source.getName()); + expected = (!expected.exists()) ? new File(expectedDir, source.getName()) : expected; + if (expected.exists()) { + return expected; + } + } + throw new IllegalStateException("Unable to find expected file"); + } + private static void addItem(List items, JavaBaseline javaBaseline, File source, File expected, File config) { if (source.getName().contains("lineendings")) { items.add(new Item(javaBaseline, copy(source, LineEnding.CR), copy(expected, LineEnding.CR), config)); diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt new file mode 100644 index 00000000..4c3055e0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +class SpectatorToDoubleGauge extends AbstractMeter implements Gauge { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/record-with-generic.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt new file mode 100644 index 00000000..d31ccb47 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v8/record-with-generic.txt @@ -0,0 +1,11 @@ +package simple; + +/** + * Record with generic. + * + * @author Andy Wilkinson + * @since 1.0.0 + */ +public record SomeRecord (T item) { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt new file mode 100644 index 00000000..4c3055e0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +class SpectatorToDoubleGauge extends AbstractMeter implements Gauge { + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java index 3f50237e..7006feb9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import java.util.Properties; import io.spring.javaformat.config.IndentationStyle; +import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -63,8 +64,12 @@ private Map loadProperties() throws IOException { } private void applyConfig(Map properties, JavaFormatConfig javaFormatConfig) { + String coreFormatter = this.prefix + ".core.formatter."; if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { - properties.put(this.prefix + ".core.formatter.tabulation.char", "space"); + properties.put(coreFormatter + "tabulation.char", "space"); + } + if (javaFormatConfig.getJavaBaseline() == JavaBaseline.V8) { + properties.put(coreFormatter + "insert_space_after_closing_angle_bracket_in_type_parameters", "insert"); } } From 8e9ac6e422f5ba65e3bb3662dffa6ed9bc71f919 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 22 Feb 2023 03:06:59 +0000 Subject: [PATCH 044/136] Next development version (v0.0.38-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index a6f6011b..392071c1 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.36 +:release-version: 0.0.37 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index bcf36f38..798c685c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 136fb48b..728b7f2f 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.37-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.38-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.37-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.38-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 99e4b534..bd0c2c58 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index de8b66eb..7935ae39 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.37.qualifier" + version="0.0.38.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 85b811c0..dadf765f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index b5ec6bb0..7f60556b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index bb421056..fec2d915 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 0c503ce4..03313181 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index c7fa1106..0d6d3842 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 40ba6eb5..b813b208 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 99e706a0..362f91ed 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 58edc2fd..9e0c0989 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index c2b82659..c644684b 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 9c0833d1..1870d1a2 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 8561d128..ead61a9a 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index f23f3da1..c02e704c 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 4457d134..9360cad9 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index e8542b2d..0ce86a6b 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index db799eca..efdf4144 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 7450d740..25630426 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index b2b74d9f..95d097e8 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 114ccca2..0c59d877 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 04da0864..bb8bc4ef 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 7b553b68..bbb38b3f 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index b38e4762..b9e8f7ea 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index f1dc7128..715b0259 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 0bd97a80..0a378226 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 98573939..d1ea777c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index f8a10931..fa93cf3b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.37.qualifier +Bundle-Version: 0.0.38.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 63681ee4..4e919dac 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 04ee62da..4bb602dd 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 1ab1d36d..ae08426b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 8a4ef4cb..c1c27cf9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 4a9a823d..b48243ea 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 1307ac1b..ba05b764 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 3fbca6ac..af119039 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 545cbaba..9f5aa5fe 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 946c177d..588471d8 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 84a998ec..dbc07172 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.37-SNAPSHOT + 0.0.38-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 786df17f0d75e834d55d6f9a69794a4f73f1f7b7 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 21 Feb 2023 21:41:48 -0800 Subject: [PATCH 045/136] Revert "insert space" setting for type parameters Change `insert_space_after_closing_angle_bracket_in_type_parameters` back to `insert` to ensure generics are always formatted correctly. This commit reverts commit b11499d4 as which we no longer need thanks to https://github.com/eclipse-jdt/eclipse.jdt.core/issues/443 Fixes gh-363 --- .../src/test/resources/expected/generics2.txt | 8 ++++++++ .../src/test/resources/source/generics2.txt | 8 ++++++++ .../io/spring/javaformat/formatter/eclipse/Options.java | 4 ---- .../spring/javaformat/formatter/eclipse/formatter.prefs | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt new file mode 100644 index 00000000..da493d53 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/generics2.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +public class UnresolvedGenericProperties extends AbstractGenericProperties { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt new file mode 100644 index 00000000..da493d53 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/generics2.txt @@ -0,0 +1,8 @@ +package simple; + +/** + * gh-363. + */ +public class UnresolvedGenericProperties extends AbstractGenericProperties { + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java index 7006feb9..37f4faa9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -24,7 +24,6 @@ import java.util.Properties; import io.spring.javaformat.config.IndentationStyle; -import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; /** @@ -68,9 +67,6 @@ private void applyConfig(Map properties, JavaFormatConfig javaFo if (javaFormatConfig.getIndentationStyle() == IndentationStyle.SPACES) { properties.put(coreFormatter + "tabulation.char", "space"); } - if (javaFormatConfig.getJavaBaseline() == JavaBaseline.V8) { - properties.put(coreFormatter + "insert_space_after_closing_angle_bracket_in_type_parameters", "insert"); - } } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs index 174274a0..46940cbe 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs +++ b/spring-javaformat/spring-javaformat-formatter/src/main/resources/io/spring/javaformat/formatter/eclipse/formatter.prefs @@ -134,7 +134,7 @@ core.formatter.insert_space_after_at_in_annotation_type_declaration=do not inser core.formatter.insert_space_after_binary_operator=insert core.formatter.insert_space_after_bitwise_operator=insert core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert -core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=do not insert +core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert core.formatter.insert_space_after_closing_brace_in_block=insert core.formatter.insert_space_after_closing_paren_in_cast=insert core.formatter.insert_space_after_colon_in_assert=insert From 681e8457bb04108e5b582b5c8c6986157c50c6e5 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 22 Feb 2023 06:15:51 +0000 Subject: [PATCH 046/136] Next development version (v0.0.39-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index 392071c1..1cdf4342 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.37 +:release-version: 0.0.38 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 798c685c..757cc4ec 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 728b7f2f..d4758cec 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.38-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.39-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.38-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.39-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index bd0c2c58..78461ae8 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 7935ae39..98c32dde 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.38.qualifier" + version="0.0.39.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index dadf765f..ae88a4f5 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 7f60556b..811ba905 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index fec2d915..8a846d3b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 03313181..ba00746c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 0d6d3842..2e6301cf 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index b813b208..daa19ec8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 362f91ed..ec952e84 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 9e0c0989..36460266 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index c644684b..cc13ee42 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 1870d1a2..1e42646e 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index ead61a9a..f7639a82 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index c02e704c..c0c01285 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 9360cad9..1ad80f6b 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 0ce86a6b..83197903 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index efdf4144..287b0b4b 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 25630426..bf2c3615 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 95d097e8..f2c33325 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 0c59d877..f8d63961 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index bb8bc4ef..4b6eb62c 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index bbb38b3f..318fb80f 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index b9e8f7ea..4d71aa33 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 715b0259..d6973278 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 0a378226..65ec970e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index d1ea777c..cf8ebde6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index fa93cf3b..e33dc865 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.38.qualifier +Bundle-Version: 0.0.39.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 4e919dac..3a6bfd33 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 4bb602dd..7fda24f9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index ae08426b..9bbd235e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index c1c27cf9..4fad8edf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index b48243ea..4b025367 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index ba05b764..92c8f31d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index af119039..0d8874b8 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 9f5aa5fe..6dde3788 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 588471d8..1e6034ea 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index dbc07172..c28fe9a3 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.38-SNAPSHOT + 0.0.39-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 4028226b4f4b440c8cc77fe01f53dfc9555c504f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 23 Feb 2023 11:21:57 -0800 Subject: [PATCH 047/136] Fix 'spring-javaformat.apply.skip' property and use info logging The `spring-javaformat.format.skip` should have been `spring-javaformat.apply.skip` and logging that skip has occurred is better at 'INFO' level. Fixes gh-365 --- .../src/main/java/io/spring/format/maven/ApplyMojo.java | 4 ++-- .../src/main/java/io/spring/format/maven/ValidateMojo.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index 0514ed7e..abfece47 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -40,14 +40,14 @@ public class ApplyMojo extends FormatMojo { /** * Skip the execution. */ - @Parameter(property = "spring-javaformat.format.skip", defaultValue = "false") + @Parameter(property = "spring-javaformat.apply.skip", defaultValue = "false") private boolean skip; @Override protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { if (this.skip || skipGlobally()) { - getLog().debug("skipping format apply as per configuration."); + getLog().info("skipping format apply as per configuration."); return; } try { diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 5d4c0e2c..7d124eac 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -47,7 +47,7 @@ public class ValidateMojo extends FormatMojo { protected void execute(List files, Charset encoding, String lineSeparator) throws MojoExecutionException, MojoFailureException { if (this.skip || skipGlobally()) { - getLog().debug("skipping format validate as per configuration."); + getLog().info("skipping format validate as per configuration."); return; } List problems = getFormatter().formatFiles(files, encoding, lineSeparator) From 9da9a349d2d771d3d788b4517e32443b41a2c849 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 24 Feb 2023 09:35:42 +0000 Subject: [PATCH 048/136] Use getInstance() to retrieve ProjectDataManager Fixes gh-367 --- .../spring/format/formatter/intellij/monitor/GradleMonitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index 9c716249..a1e4f420 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -58,7 +58,7 @@ public void onImportFinished(@Nullable String projectPath) { private void check() { logger.info("Checking " + getProject().getName() + " for use of Spring Java Format"); - ProjectDataManager projectDataManager = getProject().getService(ProjectDataManager.class); + ProjectDataManager projectDataManager = ProjectDataManager.getInstance(); boolean hasFormatPlugin = hasFormatPlugin( projectDataManager.getExternalProjectsData(getProject(), GradleConstants.SYSTEM_ID)); getTrigger().updateState(hasFormatPlugin ? State.ACTIVE : State.NOT_ACTIVE); From e2f7e9829ce13611202018d06b0ac8974b7e0e31 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 11 May 2023 15:47:44 +0100 Subject: [PATCH 049/136] Remove unwanted output to System.out Closes gh-374 --- .../spring/javaformat/checkstyle/SpringConfigurationLoader.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 202b085f..17e4e403 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -49,7 +49,6 @@ class SpringConfigurationLoader { } public Collection load(PropertyResolver propertyResolver) { - System.out.println(getClass().getResource("spring-checkstyle.xml")); Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), propertyResolver); return Arrays.stream(config.getChildren()) From c2a1cc92dcac92ec32b0a098aa0e4681f8e621db Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Mon, 15 May 2023 08:55:14 +0000 Subject: [PATCH 050/136] Next development version (v0.0.40-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 40 files changed, 42 insertions(+), 42 deletions(-) diff --git a/README.adoc b/README.adoc index 1cdf4342..bd7cf2a3 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.38 +:release-version: 0.0.39 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 757cc4ec..ad563f51 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index d4758cec..af133b51 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.39-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.40-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.39-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.40-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 78461ae8..d1787e95 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 98c32dde..86e75ce9 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.39.qualifier" + version="0.0.40.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index ae88a4f5..de73a542 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 811ba905..1671bd14 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 8a846d3b..122cd325 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index ba00746c..9ad814cb 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 2e6301cf..e0eaabe7 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index daa19ec8..c478249a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index ec952e84..c792e683 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 36460266..2dfde619 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index cc13ee42..1388f7a5 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 1e42646e..af870f42 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index f7639a82..bfe50daf 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index c0c01285..49a158aa 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 1ad80f6b..1e5a3d97 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 83197903..359131b6 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 287b0b4b..43590141 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index bf2c3615..4e1b694d 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index f2c33325..07924ef3 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index f8d63961..1cd28651 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 4b6eb62c..c76671ed 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 318fb80f..81f95083 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 4d71aa33..c6f69b9c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index d6973278..c29dccfd 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 65ec970e..265335f9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index cf8ebde6..06ae09e3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index e33dc865..438832d3 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.39.qualifier +Bundle-Version: 0.0.40.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 3a6bfd33..c0b49d6c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 7fda24f9..88c061e4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 9bbd235e..98b380f7 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 4fad8edf..655863ec 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 4b025367..12989051 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 92c8f31d..6222dd58 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 0d8874b8..fc4b092a 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 6dde3788..203a96a0 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 1e6034ea..a50507a4 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index c28fe9a3..fc5611c1 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.39-SNAPSHOT + 0.0.40-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 9441f26e944367965dc78907146df3160c49b18e Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 May 2023 20:53:25 +0100 Subject: [PATCH 051/136] Move Maven Plugin's Maven dependencies into provided scope Closes gh-378 --- pom.xml | 6 ++++++ .../spring-javaformat-maven-plugin/pom.xml | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ad563f51..c1371723 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ 5.8.1 3.21.0-GA 1.2 + 3.5.1 1.16.0 1.16.0 3.0.3 @@ -589,6 +590,11 @@ picocontainer ${picocontainer.version} + + org.codehaus.plexus + plexus-utils + ${plexus-utils.version} + org.testcontainers testcontainers diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 07924ef3..aef8d6b2 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -101,15 +101,21 @@ + + org.codehaus.plexus + plexus-utils + + org.apache.maven maven-core + provided org.apache.maven maven-plugin-api + provided - org.apache.maven.plugin-tools maven-plugin-annotations From adf3ecffd8909451af3d8415dbdf6b73b6c39d95 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 24 May 2023 17:37:47 -0700 Subject: [PATCH 052/136] Update CI --- ci/pipeline.yml | 44 ----------------------------------- ci/tasks/build-pr-project.yml | 11 --------- 2 files changed, 55 deletions(-) delete mode 100644 ci/tasks/build-pr-project.yml diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 8f941a1c..128c9014 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -44,12 +44,6 @@ resource_types: tag: "0.0.18" username: ((docker-hub-username)) password: ((docker-hub-password)) -- name: pull-request - type: registry-image - source: - repository: teliaoss/github-pr-resource - username: ((docker-hub-username)) - password: ((docker-hub-password)) - name: slack-notification type: registry-image source: @@ -65,14 +59,6 @@ resources: username: ((github-username)) password: ((github-ci-release-token)) branch: ((branch)) -- name: git-pull-request - type: pull-request - icon: source-pull - source: - access_token: ((github-ci-pull-request-token)) - repository: ((github-owner))/((github-repository)) - base_branch: ((branch)) - ignore_paths: ["ci/*"] - name: github-pre-release type: github-release icon: briefcase-download-outline @@ -165,34 +151,6 @@ jobs: - put: slack-alert params: <<: *slack-success-params -- name: build-pull-requests - serial: true - public: true - plan: - - get: ci-image - - get: git-repo - resource: git-pull-request - trigger: true - version: every - - do: - - put: git-pull-request - params: - path: git-repo - status: pending - - task: build-project - image: ci-image - file: git-repo/ci/tasks/build-pr-project.yml - timeout: ((task-timeout)) - on_success: - put: git-pull-request - params: - path: git-repo - status: success - on_failure: - put: git-pull-request - params: - path: git-repo - status: failure - name: stage-milestone serial: true plan: @@ -366,5 +324,3 @@ groups: jobs: [stage-milestone, stage-rc, stage-release, promote-milestone, promote-rc, promote-release, create-github-release, publish-eclipse-update-site] - name: ci-images jobs: [build-ci-images] -- name: pull-requests - jobs: [build-pull-requests] diff --git a/ci/tasks/build-pr-project.yml b/ci/tasks/build-pr-project.yml deleted file mode 100644 index 9430bc00..00000000 --- a/ci/tasks/build-pr-project.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -platform: linux -inputs: -- name: git-repo -outputs: -- name: distribution-repository -caches: -- path: maven -- path: gradle -run: - path: git-repo/ci/scripts/build-project.sh \ No newline at end of file From 6ed4039ff6affae93810268d9aef32d6b47e773d Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 6 Jun 2023 11:23:45 +0100 Subject: [PATCH 053/136] Enable more compiler warnings and treat warnings as errors Closes gh-381 --- pom.xml | 5 +++++ .../spring-javaformat-gradle-plugin/build.gradle | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c1371723..7c53c89a 100644 --- a/pom.xml +++ b/pom.xml @@ -400,6 +400,11 @@ ${java.version} ${java.version} + -Werror + -Xlint:deprecation + -Xlint:rawtypes + -Xlint:unchecked + -Xlint:varargs diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle index 1a94c0a2..e088814b 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/build.gradle @@ -61,4 +61,10 @@ artifacts { archives javadocJar } - +tasks.withType(JavaCompile) { + options.compilerArgs.add("-Werror") + options.compilerArgs.add("-Xlint:deprecation") + options.compilerArgs.add("-Xlint:rawtypes") + options.compilerArgs.add("-Xlint:unchecked") + options.compilerArgs.add("-Xlint:varargs") +} From 7e97f323d96758d58ed57701c36cd2c69f9fc0fe Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 6 Jun 2023 11:24:43 +0100 Subject: [PATCH 054/136] Stop using deprecated Gradle APIs Closes gh-380 --- .../io/spring/javaformat/gradle/SpringJavaFormatPlugin.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 032253ff..95e171a8 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -22,7 +22,7 @@ import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.plugins.JavaBasePlugin; -import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; @@ -56,8 +56,8 @@ private void addSourceTasks() { TaskProvider checkAllProvider = tasks.register(CheckFormat.NAME); checkAllProvider.configure((checkAll) -> checkAll.setDescription(CheckFormat.DESCRIPTION)); tasks.named(JavaBasePlugin.CHECK_TASK_NAME).configure((check) -> check.dependsOn(checkAllProvider)); - this.project.getConvention() - .getPlugin(JavaPluginConvention.class) + this.project.getExtensions() + .getByType(JavaPluginExtension.class) .getSourceSets() .all((sourceSet) -> addSourceTasks(sourceSet, checkAllProvider, formatAllProvider)); }); From a80b41c5a6463460297856a78f64f1a161d43d19 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:27:36 +0100 Subject: [PATCH 055/136] Upgrade to Maven 3.8.8 Closes gh-387 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7c53c89a..39bcc75e 100644 --- a/pom.xml +++ b/pom.xml @@ -43,9 +43,9 @@ 3.4 2.4.21 2.17.1 - 3.5.0 + 3.8.8 ${maven-core.version} - 3.5 + 3.8.2 3.6.28 5.8.1 3.21.0-GA From f93cdcc3b5c10244b7c37afe48e852145d72cea8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:28:25 +0100 Subject: [PATCH 056/136] Correct version of VS Code extension snapshots Closes gh-388 --- ci/scripts/stage.sh | 1 + .../spring-javaformat-vscode-extension/package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 7236cc9d..43af8e10 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -44,6 +44,7 @@ if [[ $nextVersion != $snapshotVersion ]]; then echo "Setting next development version (v$nextVersion)" run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata + run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index b37ff6b9..88151cba 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.36-SNAPSHOT", + "version": "0.0.40-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" From 5f138ca975171faa5b12dc5af2f1a05d21f09e7b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:39:37 +0100 Subject: [PATCH 057/136] Remove unused dependency management for Gradle modules Closes gh-389 --- pom.xml | 41 ----------------------------------------- 1 file changed, 41 deletions(-) diff --git a/pom.xml b/pom.xml index 39bcc75e..62acc4ac 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,6 @@ 7.3.1 3.8.0 9.3 - 3.4 2.4.21 2.17.1 3.8.8 @@ -535,46 +534,6 @@ groovy ${groovy.version} - - org.gradle - gradle-base-services - ${gradle.version} - - - org.gradle - gradle-base-services-groovy - ${gradle.version} - - - org.gradle - gradle-core - ${gradle.version} - - - org.gradle - gradle-language-java - ${gradle.version} - - - org.gradle - gradle-language-jvm - ${gradle.version} - - - org.gradle - gradle-platform-jvm - ${gradle.version} - - - org.gradle - gradle-plugins - ${gradle.version} - - - org.gradle - gradle-tooling-api - ${gradle.version} - org.javassist javassist From e3716b960b9591075708e2fcbb31bd733e1cd017 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 10:50:49 +0100 Subject: [PATCH 058/136] Update package-lock.json after bumping version See gh-388 --- ci/scripts/stage.sh | 4 ++-- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/pom.xml | 9 +++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 43af8e10..5a9d6015 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,7 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null @@ -44,7 +44,7 @@ if [[ $nextVersion != $snapshotVersion ]]; then echo "Setting next development version (v$nextVersion)" run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata - run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version + run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 4d147a7a..fb91fed3 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.36-SNAPSHOT", + "version": "0.0.40-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.36-SNAPSHOT", + "version": "0.0.40-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index c76671ed..3354a18f 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -103,6 +103,15 @@ run package + + update-package-lock + + npm + + + install --package-lock-only + + v19.6.0 From fdc84512e9a3648b6afe5a1922fc4090cbf37da9 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 30 Aug 2023 11:12:32 +0100 Subject: [PATCH 059/136] Use an exact version of prettier Closes gh-390 --- .../package-lock.json | 16 ++++++++++++++++ .../package.json | 1 + .../SpringDocumentFormattingEditProvider.ts | 4 ++-- .../src/main/typescript/extension.ts | 4 ++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index fb91fed3..fcf5a077 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -18,6 +18,7 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", + "prettier": "3.0.3", "typescript": "^4.9.4" }, "engines": { @@ -2852,6 +2853,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 88151cba..32267383 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -37,6 +37,7 @@ "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", + "prettier": "3.0.3", "typescript": "^4.9.4" } } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts index d8fc9788..cd26b056 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/SpringDocumentFormattingEditProvider.ts @@ -24,7 +24,7 @@ export default class SpringDocumentFormattingEditProvider implements vscode.Docu provideDocumentFormattingEdits( document: vscode.TextDocument, options: vscode.FormattingOptions, - token: vscode.CancellationToken + token: vscode.CancellationToken, ): vscode.ProviderResult { if (vscode.window.visibleTextEditors.every((editor) => editor.document.fileName !== document.fileName)) { return [] @@ -36,7 +36,7 @@ export default class SpringDocumentFormattingEditProvider implements vscode.Docu console.log(err) return Promise.reject(`Check the console in dev tools to find errors when formatting spring-javaformat`) } - } + }, ) } diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts index 0fe3b9a9..3b4fb826 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/typescript/extension.ts @@ -27,7 +27,7 @@ export function activate(context: vscode.ExtensionContext) { scheme: 'file', }, ], - new SpringDocumentFormattingEditProvider() - ) + new SpringDocumentFormattingEditProvider(), + ), ) } From a88d56da5f406cb49bdcf34f805bd45d29cb3eba Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Tue, 3 Oct 2023 14:55:19 +0900 Subject: [PATCH 060/136] Broaden Checkstyle rule for AssertJ assertion enforcement See gh-392 --- src/checkstyle/checkstyle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 0c6b5e96..0a4758b9 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -137,7 +137,7 @@ - + From 29090605710af73fab15313147b0f0c5da00af1b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 13 Oct 2023 11:46:15 +0100 Subject: [PATCH 061/136] Polish "Broaden Checkstyle rule for AssertJ assertion enforcement" See gh-392 --- .../checkstyle/spring-checkstyle.xml | 2 +- .../check/AssertJBadAssertImport.txt | 2 + .../check/AssertJBadAssertionsImport.txt | 2 + .../source/AssertJBadAssertImport.java | 37 +++++++++++++++++++ .../source/AssertJBadAssertionsImport.java | 37 +++++++++++++++++++ src/checkstyle/checkstyle.xml | 2 +- 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 41eb9ebf..c8838541 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -128,7 +128,7 @@ - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt new file mode 100644 index 00000000..05108d50 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertImport.txt @@ -0,0 +1,2 @@ ++Please use AssertJ imports. ++3 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt new file mode 100644 index 00000000..05108d50 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AssertJBadAssertionsImport.txt @@ -0,0 +1,2 @@ ++Please use AssertJ imports. ++3 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java new file mode 100644 index 00000000..28d2b972 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 org.junit.Assert; +import org.junit.jupiter.api.Test; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * Import of banned org.junit.Assert. + * + * @author Andy Wilkinson + */ +public class AssertJBadAssertImport { + + @Test + void useTheImports() { + assertTrue(true); + Assert.assertFalse(false); + fail("oops"); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java new file mode 100644 index 00000000..7d8e2fe7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java @@ -0,0 +1,37 @@ +/* + * Copyright 2017-2023 the original author or authors. + * + * 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 + * + * https://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 org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +/** + * Import of banned org.junit.jupiter.api.Assertions. + * + * @author Andy Wilkinson + */ +public class AssertJBadAssertionsImport { + + @Test + void useTheImports() { + assertTrue(true); + Assertions.assertFalse(false); + fail("oops"); + } + +} diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 0a4758b9..0c6b5e96 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -137,7 +137,7 @@ - + From a9b891286e7d3b921bf87e64cee79b07c0a248b3 Mon Sep 17 00:00:00 2001 From: Kevin Wheeler Date: Thu, 31 Aug 2023 08:48:23 -0500 Subject: [PATCH 062/136] Add links to JAR files for IntelliJ Checkstyle setup See gh-391 --- README.adoc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index bd7cf2a3..ffca7a09 100644 --- a/README.adoc +++ b/README.adoc @@ -264,10 +264,12 @@ To configure the plugin, create your own Checkstyle configuration file with the Once the configuration file is created, configure your IDE to use it: +* Download `spring-javaformat-checkstyle-{release-version}.jar` from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-checkstyle/{release-version}[Maven Central]. +* Download `spring-javaformat-config-{release-version}.jar` from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-config/{release-version}[Maven Central]. * Open `Preferences` - `Tools` - `Checkstyle` * Add `spring-javaformat-checkstyle-{release-version}.jar` and `spring-javaformat-config-{release-version}.jar` to the `Third-Party Checks` * Specify the appropriate `Checkstyle version` -* Add your Checkstyle configuration file +* Add and enable your Checkstyle configuration file From b94292ed3314e2f167d7f2b5131bfae4997cf47f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 16 Nov 2023 11:17:37 +0000 Subject: [PATCH 063/136] Ensure that npm is installed before running it See gh-388 --- ci/scripts/stage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh index 5a9d6015..5b36e8b4 100755 --- a/ci/scripts/stage.sh +++ b/ci/scripts/stage.sh @@ -29,7 +29,7 @@ fi echo "Staging ${stageVersion} (next version will be ${nextVersion})" run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock +run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:install-node-and-npm frontend:npm@update-package-lock git config user.name "Spring Builds" > /dev/null git config user.email "spring-builds@users.noreply.github.com" > /dev/null From e875f94f8c962185c2b062a24b45759e04633436 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Thu, 16 Nov 2023 11:36:00 +0000 Subject: [PATCH 064/136] Next development version (v0.0.41-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index ffca7a09..d4dc1834 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.39 +:release-version: 0.0.40 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 62acc4ac..b8b66ea9 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index af133b51..cd1816ab 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.40-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.41-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.40-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.41-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index d1787e95..363abdb5 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 86e75ce9..50bc8d06 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.40.qualifier" + version="0.0.41.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index de73a542..171aaf24 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 1671bd14..3564aae7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 122cd325..ced5a739 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 9ad814cb..b892e873 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index e0eaabe7..2794f1c2 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index c478249a..34859538 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index c792e683..ecb2f730 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 2dfde619..1b4071de 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 1388f7a5..fd99b530 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index af870f42..eabf8d36 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index bfe50daf..b5ba4291 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 49a158aa..78c726cd 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 1e5a3d97..6cc01984 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 359131b6..3fab1c70 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 43590141..f33112ca 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 4e1b694d..7187968b 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index aef8d6b2..5db3a701 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 1cd28651..1cd5bdbc 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index fcf5a077..9599a99e 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.40-SNAPSHOT", + "version": "0.0.41-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.40-SNAPSHOT", + "version": "0.0.41-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 32267383..7a0ed26b 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.40-SNAPSHOT", + "version": "0.0.41-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 3354a18f..ae0a862a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 81f95083..50e9b82c 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index c6f69b9c..1e87901c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index c29dccfd..b12e6173 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 265335f9..0d85c8da 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index 06ae09e3..d548529c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 438832d3..f81fcabf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.40.qualifier +Bundle-Version: 0.0.41.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index c0b49d6c..b2d08507 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 88c061e4..32b0a37c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 98b380f7..19d197f2 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 655863ec..e981a693 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 12989051..cb457f0f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 6222dd58..404039cb 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index fc4b092a..6cb8c71c 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 203a96a0..5c54d94e 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index a50507a4..e519c0dc 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index fc5611c1..b0d36934 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.40-SNAPSHOT + 0.0.41-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From fd84f42b9e322cc74990ebb7ed76d5deb9dd5de4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 14 Dec 2023 12:48:31 +0000 Subject: [PATCH 065/136] Improve compatibility with Checkstyle 10 Closes gh-395 --- .../checkstyle/SpringConfigurationLoader.java | 17 +++-- .../checkstyle/check/SpringJUnit5Check.java | 74 ++++++++++++++----- 2 files changed, 66 insertions(+), 25 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 17e4e403..12bd56c7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -24,10 +24,11 @@ import com.puppycrawl.tools.checkstyle.ConfigurationLoader; import com.puppycrawl.tools.checkstyle.ConfigurationLoader.IgnoredModulesOptions; import com.puppycrawl.tools.checkstyle.PropertyResolver; -import com.puppycrawl.tools.checkstyle.api.AutomaticBean; import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.Configurable; import com.puppycrawl.tools.checkstyle.api.Configuration; import com.puppycrawl.tools.checkstyle.api.Context; +import com.puppycrawl.tools.checkstyle.api.Contextualizable; import com.puppycrawl.tools.checkstyle.api.FileSetCheck; import org.xml.sax.InputSource; @@ -79,9 +80,7 @@ private Object createModule(Configuration configuration) { String name = configuration.getName(); try { Object module = this.moduleFactory.createModule(name); - if (module instanceof AutomaticBean) { - initialize(configuration, (AutomaticBean) module); - } + initialize(configuration, module); return module; } catch (CheckstyleException ex) { @@ -89,9 +88,13 @@ private Object createModule(Configuration configuration) { } } - private void initialize(Configuration configuration, AutomaticBean bean) throws CheckstyleException { - bean.contextualize(this.context); - bean.configure(configuration); + private void initialize(Configuration configuration, Object module) throws CheckstyleException { + if (module instanceof Contextualizable) { + ((Contextualizable) module).contextualize(this.context); + } + if (module instanceof Configurable) { + ((Configurable) module).configure(configuration); + } } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 5b5dc191..db7cbbfd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -19,12 +19,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FullIdent; @@ -38,33 +40,33 @@ */ public class SpringJUnit5Check extends AbstractSpringCheck { - private static final String JUNIT4_TEST_ANNOTATION = "org.junit.Test"; + private static final String JUNIT4_TEST_ANNOTATION_NAME = "org.junit.Test"; - private static final List TEST_ANNOTATIONS; + private static final List TEST_ANNOTATIONS; static { - Set annotations = new LinkedHashSet<>(); - annotations.add("RepeatedTest"); - annotations.add("Test"); - annotations.add("TestFactory"); - annotations.add("TestTemplate"); - annotations.add("ParameterizedTest"); + Set annotations = new LinkedHashSet<>(); + annotations.add(new Annotation("org.junit.jupiter.api", "RepeatedTest")); + annotations.add(new Annotation("org.junit.jupiter.api", "Test")); + annotations.add(new Annotation("org.junit.jupiter.api", "TestFactory")); + annotations.add(new Annotation("org.junit.jupiter.api", "TestTemplate")); + annotations.add(new Annotation("org.junit.jupiter.api", "ParameterizedTest")); TEST_ANNOTATIONS = Collections.unmodifiableList(new ArrayList<>(annotations)); } - private static final List LIFECYCLE_ANNOTATIONS; + private static final List LIFECYCLE_ANNOTATIONS; static { - Set annotations = new LinkedHashSet<>(); - annotations.add("BeforeAll"); - annotations.add("BeforeEach"); - annotations.add("AfterAll"); - annotations.add("AfterEach"); + Set annotations = new LinkedHashSet<>(); + annotations.add(new Annotation("org.junit.jupiter.api", "BeforeAll")); + annotations.add(new Annotation("org.junit.jupiter.api", "BeforeEach")); + annotations.add(new Annotation("org.junit.jupiter.api", "AfterAll")); + annotations.add(new Annotation("org.junit.jupiter.api", "AfterEach")); LIFECYCLE_ANNOTATIONS = Collections.unmodifiableList(new ArrayList<>(annotations)); } private static final Set BANNED_IMPORTS; static { Set bannedImports = new LinkedHashSet<>(); - bannedImports.add(JUNIT4_TEST_ANNOTATION); + bannedImports.add(JUNIT4_TEST_ANNOTATION_NAME); bannedImports.add("org.junit.After"); bannedImports.add("org.junit.AfterClass"); bannedImports.add("org.junit.Before"); @@ -106,14 +108,33 @@ public void visitToken(DetailAST ast) { } private void visitMethodDef(DetailAST ast) { - if (AnnotationUtil.containsAnnotation(ast, TEST_ANNOTATIONS)) { + if (containsAnnotation(ast, TEST_ANNOTATIONS)) { this.testMethods.add(ast); } - if (AnnotationUtil.containsAnnotation(ast, LIFECYCLE_ANNOTATIONS)) { + if (containsAnnotation(ast, LIFECYCLE_ANNOTATIONS)) { this.lifecycleMethods.add(ast); } } + private boolean containsAnnotation(DetailAST ast, List annotations) { + List annotationNames = annotations.stream().flatMap((annotation) -> + Stream.of(annotation.simpleName, annotation.fullyQualifiedName())).collect(Collectors.toList()); + try { + return AnnotationUtil.containsAnnotation(ast, annotationNames); + } + catch (NoSuchMethodError ex) { + // Checkstyle >= 10.3 (https://github.com/checkstyle/checkstyle/issues/14134) + Set annotationNamesSet = new HashSet<>(annotationNames); + try { + return (boolean) AnnotationUtil.class.getMethod("containsAnnotation", DetailAST.class, Set.class) + .invoke(null, ast, annotationNamesSet); + } + catch (Exception ex2) { + throw new RuntimeException("containsAnnotation failed", ex2); + } + } + } + private void visitImport(DetailAST ast) { FullIdent ident = FullIdent.createFullIdentBelow(ast); this.imports.put(ident.getText(), ident); @@ -146,7 +167,7 @@ private void check() { } } for (DetailAST testMethod : this.testMethods) { - if (AnnotationUtil.containsAnnotation(testMethod, JUNIT4_TEST_ANNOTATION)) { + if (AnnotationUtil.containsAnnotation(testMethod, JUNIT4_TEST_ANNOTATION_NAME)) { log(testMethod, "junit5.bannedTestAnnotation"); } } @@ -176,4 +197,21 @@ public void setUnlessImports(String unlessImports) { .unmodifiableList(Arrays.stream(unlessImports.split(",")).map(String::trim).collect(Collectors.toList())); } + private static final class Annotation { + + private final String packageName; + + private final String simpleName; + + private Annotation(String packageName, String simpleName) { + this.packageName = packageName; + this.simpleName = simpleName; + } + + private String fullyQualifiedName() { + return this.packageName + "." + this.simpleName; + } + + } + } From 6f5a0141650e0c4289eacbcd196791d27ce88311 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 10 Jan 2024 12:35:36 +0000 Subject: [PATCH 066/136] Next development version (v0.0.42-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk11/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index d4dc1834..ecd7485b 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.40 +:release-version: 0.0.41 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index b8b66ea9..2b397d2d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index cd1816ab..58e98809 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.41-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.42-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.41-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.42-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 363abdb5..3fa9bfe5 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 50bc8d06..1eabec83 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.41.qualifier" + version="0.0.42.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 171aaf24..84a96e0f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 3564aae7..8a7fb79c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index ced5a739..eefcd0ae 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index b892e873..9cf30470 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 2794f1c2..6c3c7374 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 34859538..4ea96fbe 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index ecb2f730..178842a0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 1b4071de..5a92e70b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index fd99b530..2d46a79b 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index eabf8d36..eeef2201 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index b5ba4291..f5fa9333 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 78c726cd..2f5858a2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 6cc01984..5d3c5117 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 3fab1c70..bc99603f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index f33112ca..66560bca 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 7187968b..6af1736a 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 5db3a701..d5c84fe5 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 1cd5bdbc..a2c5c8ce 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 9599a99e..5a0626dc 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.41-SNAPSHOT", + "version": "0.0.42-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.41-SNAPSHOT", + "version": "0.0.42-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 7a0ed26b..639c5b16 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.41-SNAPSHOT", + "version": "0.0.42-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index ae0a862a..f2162ee6 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 50e9b82c..723ab6e1 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 1e87901c..64eb5db8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index b12e6173..bc6f0d6f 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF index 0d85c8da..0f12bea2 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK11 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml index d548529c..2500247e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdk11 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index f81fcabf..8577d79f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.41.qualifier +Bundle-Version: 0.0.42.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index b2d08507..a985abd6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml index 32b0a37c..9bf0b692 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk11 Spring JavaFormat Eclipse JDT JDK-11 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 19d197f2..eb9e11fa 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index e981a693..6f6e7cbb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index cb457f0f..fc24ebcf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 404039cb..9b1ef323 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 6cb8c71c..76eadbc2 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 5c54d94e..6b857a01 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index e519c0dc..8439c6e9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index b0d36934..52847b97 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.41-SNAPSHOT + 0.0.42-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From e17319f68aa0c90243bc80bef4b89974e822a799 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 16:22:21 -0800 Subject: [PATCH 067/136] Add macosx/cocoa/aarch64 to Tycho environments Fixes gh-400 --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index 2b397d2d..4a712fdd 100644 --- a/pom.xml +++ b/pom.xml @@ -290,6 +290,11 @@ cocoa x86_64 + + macosx + cocoa + aarch64 + From 1c26723794ae9a13fe4b3b114d8d79d662d890fe Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 16:14:21 -0800 Subject: [PATCH 068/136] Upgrade to Tycho 4.0.4 Closes gh-397 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4a712fdd..25147c18 100644 --- a/pom.xml +++ b/pom.xml @@ -53,8 +53,8 @@ 1.16.0 1.16.0 3.0.3 - 3.0.1 - 3.0.1 + 4.0.4 + 4.0.4 From f4ac97dd7a50f91098b242019070735d72548702 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 19:45:57 -0800 Subject: [PATCH 069/136] Upgrade to ASM 9.6 Closes gh-399 --- pom.xml | 2 +- .../formatter/eclipse/rewrite/EclipseRewriter.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 25147c18..b132f0ba 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ true 1.8.1 1.0b3 - 7.3.1 + 9.6 3.8.0 9.3 2.4.21 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 60aad783..204a93f0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -111,7 +111,7 @@ public static void main(String[] args) throws Exception { private static class DefaultCodeFormatterManipulator extends ClassVisitor { DefaultCodeFormatterManipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM9, visitor); } @Override @@ -140,7 +140,7 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si private static class DefaultCodeFormatterMethodManipulator extends MethodVisitor { DefaultCodeFormatterMethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, mv); + super(Opcodes.ASM9, mv); } @Override @@ -160,7 +160,7 @@ public void visitMethodInsn(int opcode, String owner, String name, String desc, private static class NlsJdk8Manipulator extends ClassVisitor { NlsJdk8Manipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM9, visitor); } @Override @@ -182,7 +182,7 @@ private static class NslJdk8MethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslJdk8MethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, null); + super(Opcodes.ASM9, null); this.methodVisitor = mv; } @@ -205,7 +205,7 @@ public void visitEnd() { private static class NlsJdk11Manipulator extends ClassVisitor { NlsJdk11Manipulator(ClassVisitor visitor) { - super(Opcodes.ASM7, visitor); + super(Opcodes.ASM9, visitor); } @Override @@ -227,7 +227,7 @@ private static class NslJdk11MethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; NslJdk11MethodManipulator(MethodVisitor mv) { - super(Opcodes.ASM7, null); + super(Opcodes.ASM9, null); this.methodVisitor = mv; } From 9a3a4438f1494e9a3c12826c6d9fc6bce7c3c8a6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 17:32:33 -0800 Subject: [PATCH 070/136] Update supported JDK version from 11 to 17 Closes gh-398 --- CONTRIBUTING.adoc | 6 +++--- README.adoc | 2 +- pom.xml | 2 +- .../ProjectSettingsFilesLocatorTests.java | 4 ++-- .../META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/build.properties | 2 +- .../io.spring.javaformat.eclipse/plugin.xml | 8 ++++---- .../io.spring.javaformat.eclipse/pom.xml | 2 +- ...aces.java => SpringCodeFormatterJdk17Spaces.java} | 8 ++++---- ...11Tabs.java => SpringCodeFormatterJdk17Tabs.java} | 8 ++++---- spring-javaformat-eclipse/pom.xml | 4 ++-- spring-javaformat/pom.xml | 4 ++-- .../io/spring/javaformat/config/JavaBaseline.java | 6 +++--- .../spring/javaformat/config/JavaFormatConfig.java | 4 ++-- .../config/PropertiesJavaFormatConfigTests.java | 4 ++-- .../META-INF/MANIFEST.MF | 4 ++-- .../build.properties | 0 .../pom.xml | 8 ++++---- .../pom.xml | 8 ++++---- .../internal/formatter/ExtendedCodeFormatter.java | 2 +- .../eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../formatter/FormatterIntegrationTests.java | 8 ++++---- .../expected/{v11 => v17}/record-with-generic.txt | 0 .../spring-javaformat-formatter/pom.xml | 2 +- .../io/spring/javaformat/formatter/Formatter.java | 6 +++--- .../eclipse/CodeLineBreakPreparator.java | 4 ++-- .../eclipse/EclipseJdk17CodeFormatter.java} | 12 ++++++------ .../eclipse/JavadocLineBreakPreparator.java | 4 ++-- .../jdk8/eclipse/EclipseJdk8CodeFormatter.java | 4 ++-- 29 files changed, 65 insertions(+), 65 deletions(-) rename spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/{SpringCodeFormatterJdk11Spaces.java => SpringCodeFormatterJdk17Spaces.java} (80%) rename spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/{SpringCodeFormatterJdk11Tabs.java => SpringCodeFormatterJdk17Tabs.java} (80%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdk11 => spring-javaformat-formatter-eclipse-jdk17}/META-INF/MANIFEST.MF (83%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdk11 => spring-javaformat-formatter-eclipse-jdk17}/build.properties (100%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdk11 => spring-javaformat-formatter-eclipse-jdk17}/pom.xml (97%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdt-jdk11 => spring-javaformat-formatter-eclipse-jdt-jdk17}/pom.xml (90%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdt-jdk11 => spring-javaformat-formatter-eclipse-jdt-jdk17}/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java (98%) rename spring-javaformat/{spring-javaformat-formatter-eclipse-jdt-jdk11 => spring-javaformat-formatter-eclipse-jdt-jdk17}/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java (96%) rename spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/{v11 => v17}/record-with-generic.txt (100%) rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{jdk11 => jdk17}/eclipse/CodeLineBreakPreparator.java (97%) rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{jdk11/eclipse/EclipseJdk11CodeFormatter.java => jdk17/eclipse/EclipseJdk17CodeFormatter.java} (80%) rename spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/{jdk11 => jdk17}/eclipse/JavadocLineBreakPreparator.java (97%) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index a5c92957..c4378ac3 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -29,7 +29,7 @@ should also work without issue. === Building From Source -To build the source you will need to install JDK 11. +To build the source you will need to install JDK 17. @@ -206,9 +206,9 @@ Under `spring-javaformat` the following projects are defined: * `spring-javaformat-formatter-shader` - Shader support classes * `spring-javaformat-formatter-shaded` - A shaded version of the formatter with all dependencies included * `spring-javaformat-formatter-eclipse-jdk8` - The eclipse JDK 8 formatter (repackaged and slightly adapted) -* `spring-javaformat-formatter-eclipse-jdk11` - The eclipse JDK 11 formatter (repackaged and slightly adapted) +* `spring-javaformat-formatter-eclipse-jdk17` - The eclipse JDK 17 formatter (repackaged and slightly adapted) * `spring-javaformat-formatter-eclipse-jdt-jdk8` - The eclipse JDT import for JDK 8 -* `spring-javaformat-formatter-eclipse-jdt-jdk11` - The eclipse JDT import for JDK 8 +* `spring-javaformat-formatter-eclipse-jdt-jdk17` - The eclipse JDT import for JDK 17 * `spring-javaformat-formatter-eclipse-rewriter` - Internal utility used to modify eclipse code * `spring-javaformat-formatter-eclipse-runtime` - Eclipse runtime JAR for use when running outside of Eclipse diff --git a/README.adoc b/README.adoc index ecd7485b..72133a36 100644 --- a/README.adoc +++ b/README.adoc @@ -192,7 +192,7 @@ Your `checkstyle.xml` file should look then like this: === Java 8 Support -By default, the formatter requires Java 11. +By default, the formatter requires Java 17. If you are working on an older project, you can use a variation of the formatter based off Eclipse 2021-03 (the latest Eclipse JDT version built with Java 8). To use the Java 8 version, add a file called `.springjavaformatconfig` to the root of your project with the following content: diff --git a/pom.xml b/pom.xml index b132f0ba..d8eec909 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-12/202212071000/ + https://download.eclipse.org/releases/2022-12/202212071000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index c9261ead..226e0625 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -84,7 +84,7 @@ void jdtCorePrefsFormatterWhenDefaultUsesTabs() throws IOException { Properties properties = new Properties(); properties.load(content); assertThat(properties.get("org.eclipse.jdt.core.javaFormatter")) - .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk11.tabs"); + .isEqualTo("io.spring.javaformat.eclipse.formatter.jdk17.tabs"); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 178842a0..b7e8245f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -21,6 +21,6 @@ Bundle-ClassPath: ., lib/spring-javaformat-config.jar, lib/spring-javaformat-formatter.jar, lib/spring-javaformat-checkstyle.jar, - lib/spring-javaformat-formatter-eclipse-jdt-jdk11.jar, + lib/spring-javaformat-formatter-eclipse-jdt-jdk17.jar, lib/spring-javaformat-formatter-eclipse-jdt-jdk8.jar Bundle-ActivationPolicy: lazy diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties index 7780dc22..9bd6565a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/build.properties @@ -6,5 +6,5 @@ bin.includes = META-INF/,\ lib/spring-javaformat-checkstyle.jar,\ lib/spring-javaformat-config.jar,\ lib/spring-javaformat-formatter.jar,\ - lib/spring-javaformat-formatter-eclipse-jdt-jdk11.jar,\ + lib/spring-javaformat-formatter-eclipse-jdt-jdk17.jar,\ lib/spring-javaformat-formatter-eclipse-jdt-jdk8.jar diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml index b6bdf963..f9864bd4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/plugin.xml @@ -3,13 +3,13 @@ io.spring.javaformat - spring-javaformat-formatter-eclipse-jdt-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk17 ${project.version} diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java similarity index 80% rename from spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java rename to spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java index e6775b74..8680dbf8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Spaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,10 +27,10 @@ * * @author Phillip Webb */ -public class SpringCodeFormatterJdk11Spaces extends SpringCodeFormatter { +public class SpringCodeFormatterJdk17Spaces extends SpringCodeFormatter { - public SpringCodeFormatterJdk11Spaces() { - super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.SPACES)); + public SpringCodeFormatterJdk17Spaces() { + super(JavaFormatConfig.of(JavaBaseline.V17, IndentationStyle.SPACES)); } } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java similarity index 80% rename from spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java rename to spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java index 78bd7aba..b0301b2e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk11Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,10 +27,10 @@ * * @author Phillip Webb */ -public class SpringCodeFormatterJdk11Tabs extends SpringCodeFormatter { +public class SpringCodeFormatterJdk17Tabs extends SpringCodeFormatter { - public SpringCodeFormatterJdk11Tabs() { - super(JavaFormatConfig.of(JavaBaseline.V11, IndentationStyle.TABS)); + public SpringCodeFormatterJdk17Tabs() { + super(JavaFormatConfig.of(JavaBaseline.V17, IndentationStyle.TABS)); } } diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 2d46a79b..fad27c8b 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -17,9 +17,9 @@ - eclipse-jdk11 + eclipse-jdk17 p2 - ${eclipse.jdk11.repository} + ${eclipse.jdk17.repository} eclipse-checkstyle diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 723ab6e1..697cc5d5 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -38,9 +38,9 @@ spring-javaformat-formatter-tests spring-javaformat-formatter-eclipse-rewriter spring-javaformat-formatter-eclipse-jdk8 - spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdk17 spring-javaformat-formatter-eclipse-jdt-jdk8 - spring-javaformat-formatter-eclipse-jdt-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk17 spring-javaformat-formatter-eclipse-runtime spring-javaformat-formatter-shader spring-javaformat-formatter-shaded diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java index 90bde24a..492f068c 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,8 +29,8 @@ public enum JavaBaseline { V8, /** - * Use JDK 11+ or higher compatible formatter. + * Use JDK 17+ or higher compatible formatter. */ - V11 + V17 } diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java index 300fcce1..89d19b78 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,7 @@ public interface JavaFormatConfig { /** * The default {@link JavaFormatConfig}. */ - JavaFormatConfig DEFAULT = of(JavaBaseline.V11, IndentationStyle.TABS); + JavaFormatConfig DEFAULT = of(JavaBaseline.V17, IndentationStyle.TABS); /** * Java JDK baseline version expected be used when formatting. diff --git a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java index 135e9e0e..4fc21f26 100644 --- a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java +++ b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,7 @@ class PropertiesJavaFormatConfigTests { void getJavaBaselineWhenNoPropertyReturnsJava11() { Properties properties = new Properties(); PropertiesJavaFormatConfig config = new PropertiesJavaFormatConfig(properties); - assertThat(config.getJavaBaseline()).isEqualTo(JavaBaseline.V11); + assertThat(config.getJavaBaseline()).isEqualTo(JavaBaseline.V17); } @Test diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF similarity index 83% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index 0f12bea2..68f6b967 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 -Bundle-Name: Spring Formatter Eclipse Runtime JDK11 -Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk11 +Bundle-Name: Spring Formatter Eclipse Runtime JDK17 +Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 Bundle-Version: 0.0.42.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/build.properties b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/build.properties similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/build.properties rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/build.properties diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml similarity index 97% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 2500247e..7ab035a5 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -8,9 +8,9 @@ spring-javaformat 0.0.42-SNAPSHOT - spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin - Spring JavaFormat Eclipse JDK-11 + Spring JavaFormat Eclipse JDK-17 ${basedir}/../.. org.eclipse.jdt.core.source,org.eclipse.jface.source,org.eclipse.text.source @@ -23,9 +23,9 @@ - eclipse-jdk11 + eclipse-jdk17 p2 - ${eclipse.jdk11.repository} + ${eclipse.jdk17.repository} diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml similarity index 90% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 9bf0b692..5ce57d4f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -8,15 +8,15 @@ spring-javaformat 0.0.42-SNAPSHOT - spring-javaformat-formatter-eclipse-jdt-jdk11 - Spring JavaFormat Eclipse JDT JDK-11 + spring-javaformat-formatter-eclipse-jdt-jdk17 + Spring JavaFormat Eclipse JDT JDK-17 ${basedir}/../.. io.spring.javaformat - spring-javaformat-formatter-eclipse-jdk11 + spring-javaformat-formatter-eclipse-jdk17 ${project.version} true @@ -48,7 +48,7 @@ - io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk11 + io.spring.javaformat:spring-javaformat-formatter-eclipse-jdk17 org/eclipse/jdt/** diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java similarity index 98% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index 60b0e6e1..46e0f01d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java similarity index 96% rename from spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java rename to spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index 9873fc96..ff6b0fc6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk11/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 88d41505..4639a550 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,16 +54,16 @@ void formatCodeWithV8BaselineCanFormatOnAllVersions(String version) throws Excep } @ParameterizedTest - @ValueSource(strings = { "11", "17" }) + @ValueSource(strings = { "17" }) void formatCodeWithV11BaselineCanFormatOn11OrHigher(String version) throws Exception { - runFormatter(JavaBaseline.V11, version); + runFormatter(JavaBaseline.V17, version); } @ParameterizedTest @ValueSource(strings = "8") void formatCodeWithV11BaselineCannotFormatOn8(String version) throws Exception { assertThatExceptionOfType(ContainerLaunchException.class) - .isThrownBy(() -> runFormatter(JavaBaseline.V11, version)); + .isThrownBy(() -> runFormatter(JavaBaseline.V17, version)); } private void runFormatter(JavaBaseline baseline, String version) throws IOException, Exception { diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v17/record-with-generic.txt similarity index 100% rename from spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v11/record-with-generic.txt rename to spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/v17/record-with-generic.txt diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 52847b97..f6aef680 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -27,7 +27,7 @@ io.spring.javaformat - spring-javaformat-formatter-eclipse-jdt-jdk11 + spring-javaformat-formatter-eclipse-jdt-jdk17 ${project.version} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index 53415a7a..dd87b20c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ import io.spring.javaformat.config.JavaBaseline; import io.spring.javaformat.config.JavaFormatConfig; import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; -import io.spring.javaformat.formatter.jdk11.eclipse.EclipseJdk11CodeFormatter; +import io.spring.javaformat.formatter.jdk17.eclipse.EclipseJdk17CodeFormatter; import io.spring.javaformat.formatter.jdk8.eclipse.EclipseJdk8CodeFormatter; /** @@ -76,7 +76,7 @@ public Formatter() { */ public Formatter(JavaFormatConfig javaFormatConfig) { this.delegate = javaFormatConfig.getJavaBaseline() == JavaBaseline.V8 - ? new EclipseJdk8CodeFormatter(javaFormatConfig) : new EclipseJdk11CodeFormatter(javaFormatConfig); + ? new EclipseJdk8CodeFormatter(javaFormatConfig) : new EclipseJdk17CodeFormatter(javaFormatConfig); } /** diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java similarity index 97% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java index 15057474..1213ff18 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.jdk11.eclipse; +package io.spring.javaformat.formatter.jdk17.eclipse; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java similarity index 80% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index e4d57dc5..fa5ba0a9 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/EclipseJdk11CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.jdk11.eclipse; +package io.spring.javaformat.formatter.jdk17.eclipse; import java.util.Map; @@ -25,20 +25,20 @@ import io.spring.javaformat.formatter.eclipse.Options; /** - * Internal delegate JDK 11 baseline {@link EclipseCodeFormatter} to apply Spring + * Internal delegate JDK 17 baseline {@link EclipseCodeFormatter} to apply Spring * {@literal formatter.prefs} and add {@link Preparator Preparators}. * * @author Phillip Webb */ -public class EclipseJdk11CodeFormatter extends ExtendedCodeFormatter implements EclipseCodeFormatter { +public class EclipseJdk17CodeFormatter extends ExtendedCodeFormatter implements EclipseCodeFormatter { private final Map appliedOptions; - public EclipseJdk11CodeFormatter(JavaFormatConfig javaFormatConfig) { + public EclipseJdk17CodeFormatter(JavaFormatConfig javaFormatConfig) { this(new Options("io.spring.javaformat.eclipse.jdt.jdk11").load(javaFormatConfig)); } - EclipseJdk11CodeFormatter(Map options) { + EclipseJdk17CodeFormatter(Map options) { super(options); this.appliedOptions = options; addPreparator(new JavadocLineBreakPreparator()); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java similarity index 97% rename from spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java rename to spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index e367de90..93541b3b 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk11/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.spring.javaformat.formatter.jdk11.eclipse; +package io.spring.javaformat.formatter.jdk17.eclipse; import java.util.ArrayList; import java.util.Collections; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java index 7b747cd2..5038538f 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ import io.spring.javaformat.formatter.eclipse.Options; /** - * Internal delegate JDK 11 baseline {@link EclipseCodeFormatter} to apply Spring + * Internal delegate JDK 8 baseline {@link EclipseCodeFormatter} to apply Spring * {@literal formatter.prefs} and add {@link Preparator Preparators}. * * @author Phillip Webb From 634a1ffaecc03b4417b00de42b6d4f84813d7fcc Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 10 Jan 2024 20:47:06 -0800 Subject: [PATCH 071/136] Upgrade to Eclipse 2023-12 Closes gh-401 --- pom.xml | 2 +- .../javaformat/formatter/eclipse/rewrite/EclipseRewriter.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d8eec909..2aa6be4e 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2022-12/202212071000/ + https://download.eclipse.org/releases/2023-12/202312061001/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index 204a93f0..de0ca267 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -116,7 +116,7 @@ private static class DefaultCodeFormatterManipulator extends ClassVisitor { @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { - if (access == Opcodes.ACC_PRIVATE && UPDATED_FIELDS.contains(name)) { + if ((access & Opcodes.ACC_PRIVATE) != 0 && UPDATED_FIELDS.contains(name)) { access = Opcodes.ACC_PROTECTED; } return super.visitField(access, name, desc, signature, value); @@ -124,7 +124,7 @@ public FieldVisitor visitField(int access, String name, String desc, String sign @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if (access == Opcodes.ACC_PRIVATE && UPDATED_METHODS.contains(name)) { + if ((access & Opcodes.ACC_PRIVATE) != 0 && UPDATED_METHODS.contains(name)) { access = Opcodes.ACC_PROTECTED; } return new DefaultCodeFormatterMethodManipulator( From 45335a9990e49d9924d1d5649955912a41a854c3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 11 Jan 2024 16:51:35 -0800 Subject: [PATCH 072/136] Update supported JDK version from 11 to 17 Fix a few items that were missed. See gh-398 --- .../spring/javaformat/eclipse/Activator.java | 2 +- .../ProjectSettingsFilesLocator.java | 3 ++- .../org.eclipse.jdt.core.prefs | 2 +- .../pom.xml | 2 +- .../eclipse/rewrite/EclipseRewriter.java | 12 ++++----- .../eclipse/CodeLineBreakPreparator.java | 26 +++++++++---------- .../eclipse/EclipseJdk17CodeFormatter.java | 6 ++--- .../eclipse/JavadocLineBreakPreparator.java | 26 +++++++++---------- 8 files changed, 40 insertions(+), 39 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index 4b03b9eb..c6d68bc7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -41,7 +41,7 @@ public class Activator extends AbstractUIPlugin { public Activator() { this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk8.core.JavaCore()); - this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk11.core.JavaCore()); + this.javaCorePlugins.add(new io.spring.javaformat.eclipse.jdt.jdk17.core.JavaCore()); } @Override diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 792d207e..3e18da90 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -73,7 +73,7 @@ private String updateFormatter(JavaFormatConfig javaFormatConfig, String content String formatterId = getFormatterId(javaFormatConfig); if (formatterId != null) { return content.replace( - "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs", + "org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk17.tabs", "org.eclipse.jdt.core.javaFormatter=" + formatterId); } return content; @@ -81,6 +81,7 @@ private String updateFormatter(JavaFormatConfig javaFormatConfig, String content private String getFormatterId(JavaFormatConfig config) { String jdk = config.getJavaBaseline().name().substring(1); + jdk = (!"11".equals(jdk)) ? jdk : "17"; String indentation = config.getIndentationStyle().name().toLowerCase(); return "io.spring.javaformat.eclipse.formatter.jdk" + jdk + "." + indentation; } diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index fd682fe6..34ee06d5 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -101,4 +101,4 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk11.tabs +org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk17.tabs diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 5ce57d4f..ba028fab 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -57,7 +57,7 @@ org.eclipse.jdt - io.spring.javaformat.eclipse.jdt.jdk11 + io.spring.javaformat.eclipse.jdt.jdk17 false diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index de0ca267..e7ccea52 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -80,7 +80,7 @@ private void rewrite(JdkVersion jdkVersion, FileSystem zip) throws IOException { deleteWrapPreparator(zip); } else { - rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk11Manipulator::new); + rewrite(zip, "org/eclipse/osgi/util/NLS.class", NlsJdk17Manipulator::new); } } @@ -202,16 +202,16 @@ public void visitEnd() { * {@link ClassVisitor} to update the {@code NLS} class in the JDK 8 version so it * doesn't use a System property to disable warning messages. */ - private static class NlsJdk11Manipulator extends ClassVisitor { + private static class NlsJdk17Manipulator extends ClassVisitor { - NlsJdk11Manipulator(ClassVisitor visitor) { + NlsJdk17Manipulator(ClassVisitor visitor) { super(Opcodes.ASM9, visitor); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if ("".equals(name)) { - return new NslJdk11MethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); + return new NslJdk17MethodManipulator(super.visitMethod(access, name, desc, signature, exceptions)); } return super.visitMethod(access, name, desc, signature, exceptions); } @@ -222,11 +222,11 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si * {@link MethodVisitor} to update the {@code NLS} class in the JDK 8 version so it * doesn't use a System property to disable warning messages. */ - private static class NslJdk11MethodManipulator extends MethodVisitor { + private static class NslJdk17MethodManipulator extends MethodVisitor { private final MethodVisitor methodVisitor; - NslJdk11MethodManipulator(MethodVisitor mv) { + NslJdk17MethodManipulator(MethodVisitor mv) { super(Opcodes.ASM9, null); this.methodVisitor = mv; } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java index 1213ff18..51c98b52 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java @@ -16,19 +16,19 @@ package io.spring.javaformat.formatter.jdk17.eclipse; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AnnotationTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.EnumDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.FieldDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.SimpleName; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Token; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.AnnotationTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.EnumDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.FieldDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SimpleName; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.TypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; /** * {@link Preparator} to finetune curly-brace line breaks. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index fa5ba0a9..45103159 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -19,8 +19,8 @@ import java.util.Map; import io.spring.javaformat.config.JavaFormatConfig; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.ExtendedCodeFormatter; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.ExtendedCodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; import io.spring.javaformat.formatter.eclipse.EclipseCodeFormatter; import io.spring.javaformat.formatter.eclipse.Options; @@ -35,7 +35,7 @@ public class EclipseJdk17CodeFormatter extends ExtendedCodeFormatter implements private final Map appliedOptions; public EclipseJdk17CodeFormatter(JavaFormatConfig javaFormatConfig) { - this(new Options("io.spring.javaformat.eclipse.jdt.jdk11").load(javaFormatConfig)); + this(new Options("io.spring.javaformat.eclipse.jdt.jdk17").load(javaFormatConfig)); } EclipseJdk17CodeFormatter(Map options) { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index 93541b3b..f2e273bf 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -20,19 +20,19 @@ import java.util.Collections; import java.util.List; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTNode; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.ASTVisitor; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.AbstractTypeDeclaration; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Comment; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.CompilationUnit; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.Javadoc; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TagElement; -import io.spring.javaformat.eclipse.jdt.jdk11.core.dom.TextElement; -import io.spring.javaformat.eclipse.jdt.jdk11.core.formatter.CodeFormatter; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.compiler.parser.TerminalTokens; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Preparator; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.Token; -import io.spring.javaformat.eclipse.jdt.jdk11.internal.formatter.TokenManager; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.AbstractTypeDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Comment; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Javadoc; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.TagElement; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.TextElement; +import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.compiler.parser.TerminalTokens; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Token; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; /** * {@link Preparator} to finetune Javadoc whitespace. From 7db7c9765fbad3e1c0b8f021dc16533f9d5c10f2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 11 Jan 2024 17:59:21 -0800 Subject: [PATCH 073/136] Ensure "project specific" formatter settings are applied In Eclipse 2023-12 something other than the `org.eclipse.jdt.core.javaFormatter` setting is need for "project specific settings". We now also set `enabling_tag` and `disabling_tag` which seems to be enough to trigger detection. Fixes gh-402 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 34ee06d5..41401b15 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -101,4 +101,6 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on org.eclipse.jdt.core.javaFormatter=io.spring.javaformat.eclipse.formatter.jdk17.tabs From 2d1541ff4f0877a1239f9c9082dfd28b52f591d0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 12:02:19 +0000 Subject: [PATCH 074/136] Move snapshot build and deploy to GitHub Actions Closes gh-409 --- .../workflows/build-and-deploy-snapshot.yml | 34 +++++++++++++++++++ ci/pipeline.yml | 10 ------ 2 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/build-and-deploy-snapshot.yml diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml new file mode 100644 index 00000000..e7536f1b --- /dev/null +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -0,0 +1,34 @@ +name: Build and Deploy Snapshot +on: + push: + branches: + - main +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} +jobs: + build: + if: ${{ github.repository == 'spring-io/spring-javaformat' }} + name: Build and Deploy Snapshot + runs-on: ubuntu-latest + steps: + - name: Check Out Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - name: Set Up Java + uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 + with: + distribution: 'liberica' + java-version: 17 + cache: maven + - name: Build and Publish + run: ./mvnw clean deploy --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository + - name: Deploy + uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 + with: + uri: 'https://repo.spring.io' + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + build-name: spring-javaformat + repository: 'libs-snapshot-local' + folder: 'distribution-repository' + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 128c9014..92027920 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -138,16 +138,6 @@ jobs: - put: slack-alert params: <<: *slack-fail-params - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - get_params: - threads: 8 - on_failure: - do: - - put: slack-alert - params: - <<: *slack-fail-params - put: slack-alert params: <<: *slack-success-params From bd5b055b4d0202ffd62d24c46aa16fb8a919ee4c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 12:58:58 +0000 Subject: [PATCH 075/136] Run Maven in batch mode to reduce log output See gh-409 --- .github/workflows/build-and-deploy-snapshot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index e7536f1b..d4ea8fbf 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -20,7 +20,7 @@ jobs: java-version: 17 cache: maven - name: Build and Publish - run: ./mvnw clean deploy --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository + run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository - name: Deploy uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 with: From 648ab056fcbeba464a6fcbbcfb7e59fc9956e91b Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:07:53 +0000 Subject: [PATCH 076/136] Remove unknown encoding parameter from Checkstyle plugin configuration --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2aa6be4e..c2087693 100644 --- a/pom.xml +++ b/pom.xml @@ -466,7 +466,6 @@ src/checkstyle/checkstyle-suppressions.xml src/checkstyle/checkstyle-header.txt checkstyle.build.directory=${project.build.directory} - UTF-8 true true true From b3329ba407f915f5d04f8132b6db2e0bb94b850f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:10:25 +0000 Subject: [PATCH 077/136] Stop using legacy syntax for alternative repository --- .github/workflows/build-and-deploy-snapshot.yml | 2 +- ci/scripts/build-project.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index d4ea8fbf..ac74bfca 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -20,7 +20,7 @@ jobs: java-version: 17 cache: maven - name: Build and Publish - run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::default::file://$(pwd)/distribution-repository + run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::file://$(pwd)/distribution-repository - name: Deploy uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 with: diff --git a/ci/scripts/build-project.sh b/ci/scripts/build-project.sh index bc833d36..476c837e 100755 --- a/ci/scripts/build-project.sh +++ b/ci/scripts/build-project.sh @@ -5,5 +5,5 @@ source $(dirname $0)/common.sh repository=$(pwd)/distribution-repository pushd git-repo > /dev/null -run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} +run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::file://${repository} popd > /dev/null From 12f525ef4525f857b1961634410728d4cfd7d3ac Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:26:39 +0000 Subject: [PATCH 078/136] Polish SpringAvoidStaticImportCheck Sort excludes alphabetically and remove a duplicate --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index 255316b0..ff83fb71 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,11 +46,10 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("org.junit.internal.matchers.ThrowableMessageMatcher.*"); excludes.add("org.junit.jupiter.api.Assertions.*"); excludes.add("org.junit.jupiter.api.Assumptions.*"); - excludes.add("org.junit.jupiter.api.Assertions.*"); + excludes.add("org.mockito.AdditionalMatchers.*"); excludes.add("org.mockito.ArgumentMatchers.*"); excludes.add("org.mockito.BDDMockito.*"); excludes.add("org.mockito.Matchers.*"); - excludes.add("org.mockito.AdditionalMatchers.*"); excludes.add("org.mockito.Mockito.*"); excludes.add("org.springframework.boot.configurationprocessor.ConfigurationMetadataMatchers.*"); excludes.add("org.springframework.boot.configurationprocessor.TestCompiler.*"); From 8ec2b87ed0ec4979652a33ca0d7ea07fbdb7f35b Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Mon, 15 Jan 2024 20:48:03 +0100 Subject: [PATCH 079/136] Allow static import of AssertJ BDDAssertions See gh-403 --- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index ff83fb71..2e0de968 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -37,6 +37,7 @@ public class SpringAvoidStaticImportCheck extends AvoidStaticImportCheck { excludes.add("io.restassured.RestAssured.*"); excludes.add("org.assertj.core.api.Assertions.*"); excludes.add("org.assertj.core.api.Assumptions.*"); + excludes.add("org.assertj.core.api.BDDAssertions.*"); excludes.add("org.assertj.core.api.HamcrestCondition.*"); excludes.add("org.awaitility.Awaitility.*"); excludes.add("org.hamcrest.CoreMatchers.*"); From 1317cbcf88b02addf163655de2ea1114f24876a1 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sat, 23 Mar 2024 09:41:42 +0900 Subject: [PATCH 080/136] Apply UnnecessarySemicolonInEnumeration Checkstyle module This commit also applies it to this project itself and fixes its violations. See gh-408 --- .../io/spring/javaformat/checkstyle/spring-checkstyle.xml | 1 + .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 4 ++-- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- src/checkstyle/checkstyle.xml | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index c8838541..ba9026a6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -70,6 +70,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 82e63f1e..58bc2ee7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -48,7 +48,7 @@ public void loadShouldLoadChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(60); + assertThat(ordinaryChecks).hasSize(61); } @Test @@ -59,7 +59,7 @@ public void loadWithExcludeShouldExcludeChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(59); + assertThat(ordinaryChecks).hasSize(60); } @Test diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index ff6b0fc6..df66cda6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -54,7 +54,7 @@ enum Phase { /** * Apply the preparator after wrapping. */ - POST_WRAPPING; + POST_WRAPPING } diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index 9873fc96..aaaf3647 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -54,7 +54,7 @@ enum Phase { /** * Apply the preparator after wrapping. */ - POST_WRAPPING; + POST_WRAPPING } diff --git a/src/checkstyle/checkstyle.xml b/src/checkstyle/checkstyle.xml index 0c6b5e96..c13faf85 100644 --- a/src/checkstyle/checkstyle.xml +++ b/src/checkstyle/checkstyle.xml @@ -65,6 +65,7 @@ + From fd65dcdaa9e48cab7358701457e2848eba1cf8ab Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 28 Mar 2024 13:36:58 +0000 Subject: [PATCH 081/136] Polish "Apply UnnecessarySemicolonInEnumeration Checkstyle module" See gh-408 --- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 58bc2ee7..c16585d5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index aaaf3647..df66cda6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From ad9c60a0089c0532adb3ab3f073d52958e63d0b5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:48:16 -0700 Subject: [PATCH 082/136] Upgrade to Eclipse 2024-3 Closes gh-412 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c2087693..1ed8adf2 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 1.8 https://download.eclipse.org/releases/2021-03/202103171000/ - https://download.eclipse.org/releases/2023-12/202312061001/ + https://download.eclipse.org/releases/2024-03/202403131000/ https://checkstyle.org/eclipse-cs-update-site/ true 1.8.1 From 8555da370e41561683ba6cd6dd500fa7cd57301b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:55:51 -0700 Subject: [PATCH 083/136] Prevent NPE when javadoc contains '@formatter:off' Update `JavadocLineBreakPreparator` to protect against a `null` return from `commentToken.getInternalStructure()`. Fixes gh-410 --- .../test/resources/expected/javadoc-with-format-off.txt | 8 ++++++++ .../src/test/resources/source/javadoc-with-format-off.txt | 7 +++++++ .../jdk17/eclipse/JavadocLineBreakPreparator.java | 6 ++++-- .../jdk8/eclipse/JavadocLineBreakPreparator.java | 8 +++++--- 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt new file mode 100644 index 00000000..157ea11b --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/javadoc-with-format-off.txt @@ -0,0 +1,8 @@ +/** + * This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. + * @formatter:off + * @formatter:on + */ +public class Format { + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt new file mode 100644 index 00000000..dbfef5c0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/javadoc-with-format-off.txt @@ -0,0 +1,7 @@ +/** + * This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. + * @formatter:off + * @formatter:on + */ +public class Format { +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index f2e273bf..e0dd5d8c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -93,7 +93,9 @@ private static class Vistor extends ASTVisitor { public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); - this.commentTokenManager = new TokenManager(commentToken.getInternalStructure(), this.tokenManager); + this.commentTokenManager = (commentToken.getInternalStructure() != null) + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) + : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; @@ -108,7 +110,7 @@ public boolean visit(TextElement node) { @Override public boolean visit(TagElement node) { - if (isSquashRequired(node, this.declaration)) { + if (this.commentTokenManager != null && isSquashRequired(node, this.declaration)) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 68723201..4113bbf2 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -93,7 +93,9 @@ private static class Vistor extends ASTVisitor { public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); - this.commentTokenManager = new TokenManager(commentToken.getInternalStructure(), this.tokenManager); + this.commentTokenManager = (commentToken.getInternalStructure() != null) + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) + : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; @@ -108,7 +110,7 @@ public boolean visit(TextElement node) { @Override public boolean visit(TagElement node) { - if (isSquashRequired(node, this.declaration)) { + if (this.commentTokenManager != null && isSquashRequired(node, this.declaration)) { int startIndex = this.commentTokenManager.findIndex(node.getStartPosition(), -1, false); Token token = this.commentTokenManager.get(startIndex); token.clearLineBreaksBefore(); From dee7ea85825cf5c8eb3e78a4f2e03be610384f06 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:58:14 -0700 Subject: [PATCH 084/136] Update copyright year of changed files --- .../src/io/spring/javaformat/eclipse/Activator.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesLocator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index c6d68bc7..cfa779b0 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 3e18da90..5062bfe9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 25b6398d7244cd1728b1fd4009712d1eb0b35033 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sat, 8 Jun 2024 04:29:08 +0100 Subject: [PATCH 085/136] Add missing javadoc jars Closes gh-413 --- .../io.spring.javaformat.eclipse.tests/pom.xml | 18 ++++++++++++++---- .../pom.xml | 16 ++++++++++++++++ .../pom.xml | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 4ea96fbe..3b180e7f 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -14,6 +14,7 @@ ${basedir}/../.. 17 + true @@ -31,10 +32,19 @@ org.apache.maven.plugins - maven-javadoc-plugin - - **/*Tests.java - + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 7ab035a5..9608ea8a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -30,6 +30,22 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + + org.apache.maven.plugins maven-antrun-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index a985abd6..c14b90c0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -30,6 +30,22 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + empty-javadoc-jar + package + + jar + + + javadoc + + + + org.apache.maven.plugins maven-antrun-plugin From 541d52985a606621394536f16ca7c98e0fb07ee1 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Sat, 8 Jun 2024 15:42:33 +0100 Subject: [PATCH 086/136] Add missing javadoc jars Closes gh-414 --- .../io.spring.javaformat.eclipse.tests/pom.xml | 12 ++++++++++++ .../io.spring.javaformat.eclipse/pom.xml | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 3b180e7f..7452fede 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -30,6 +30,18 @@ + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + org.apache.maven.plugins maven-jar-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 5c586da7..d309137a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -38,6 +38,18 @@ + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + org.apache.maven.plugins maven-javadoc-plugin From 0d16661e2ff11553c72ecfe2b78e26591eb51b31 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 14 May 2024 13:08:01 -0700 Subject: [PATCH 087/136] Migrate release process to GitHub Actions Initial migration to GitHub Actions that allows a release to be staged. See gh-411 --- .github/actions/.bats/bats | 1 + .github/actions/.bats/test_helper/bats-assert | 1 + .../actions/.bats/test_helper/bats-support | 1 + .github/actions/deduce-versions/action.yml | 22 ++++ .../deduce-versions/deduce-versions.sh | 116 +++++++++++++++++ .github/actions/deduce-versions/test.sh | 1 + .../deduce-versions/test/bump_version.bats | 58 +++++++++ .../deduce-versions/test/deduce_versions.bats | 96 ++++++++++++++ .../test/get_next_release.bats | 119 ++++++++++++++++++ .../test/strip_snapshot_suffix.bats | 21 ++++ .github/actions/setup/action.yml | 16 +++ .github/actions/stage-code/action.yml | 23 ++++ .github/actions/stage-code/stage.sh | 32 +++++ .../workflows/build-and-deploy-snapshot.yml | 42 +++---- .github/workflows/build-pull-request.yml | 16 +++ .github/workflows/promote.yml | 37 ++++++ .github/workflows/release.yml | 58 +++++++++ .github/workflows/rollback.yml | 41 ++++++ .gitmodules | 12 ++ 19 files changed, 690 insertions(+), 23 deletions(-) create mode 160000 .github/actions/.bats/bats create mode 160000 .github/actions/.bats/test_helper/bats-assert create mode 160000 .github/actions/.bats/test_helper/bats-support create mode 100644 .github/actions/deduce-versions/action.yml create mode 100755 .github/actions/deduce-versions/deduce-versions.sh create mode 100755 .github/actions/deduce-versions/test.sh create mode 100644 .github/actions/deduce-versions/test/bump_version.bats create mode 100644 .github/actions/deduce-versions/test/deduce_versions.bats create mode 100644 .github/actions/deduce-versions/test/get_next_release.bats create mode 100644 .github/actions/deduce-versions/test/strip_snapshot_suffix.bats create mode 100644 .github/actions/setup/action.yml create mode 100644 .github/actions/stage-code/action.yml create mode 100644 .github/actions/stage-code/stage.sh create mode 100644 .github/workflows/build-pull-request.yml create mode 100644 .github/workflows/promote.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/rollback.yml create mode 100644 .gitmodules diff --git a/.github/actions/.bats/bats b/.github/actions/.bats/bats new file mode 160000 index 00000000..902578da --- /dev/null +++ b/.github/actions/.bats/bats @@ -0,0 +1 @@ +Subproject commit 902578da790fbcb035747d2964747f192f6e1603 diff --git a/.github/actions/.bats/test_helper/bats-assert b/.github/actions/.bats/test_helper/bats-assert new file mode 160000 index 00000000..e2d855bc --- /dev/null +++ b/.github/actions/.bats/test_helper/bats-assert @@ -0,0 +1 @@ +Subproject commit e2d855bc78619ee15b0c702b5c30fb074101159f diff --git a/.github/actions/.bats/test_helper/bats-support b/.github/actions/.bats/test_helper/bats-support new file mode 160000 index 00000000..9bf10e87 --- /dev/null +++ b/.github/actions/.bats/test_helper/bats-support @@ -0,0 +1 @@ +Subproject commit 9bf10e876dd6b624fe44423f0b35e064225f7556 diff --git a/.github/actions/deduce-versions/action.yml b/.github/actions/deduce-versions/action.yml new file mode 100644 index 00000000..b8e197c4 --- /dev/null +++ b/.github/actions/deduce-versions/action.yml @@ -0,0 +1,22 @@ +name: 'Deduce Versions' +description: 'Deduce the version to stage and the next SNAPSHOT version' +inputs: + current-version: + required: true + release-type: + required: true +outputs: + release-version: + value: ${{ steps.deduce-versions.outputs.release-version }} + next-version: + value: ${{ steps.deduce-versions.outputs.next-version }} +runs: + using: composite + steps: + - name: Deduce Versions + id: deduce-versions + shell: bash + run: . ${{ github.action_path }}/deduce-versions.sh; deduce_versions + env: + CURRENT_VERSION: "${{ inputs.current-version }}" + RELEASE_TYPE: "${{ inputs.release-type }}" diff --git a/.github/actions/deduce-versions/deduce-versions.sh b/.github/actions/deduce-versions/deduce-versions.sh new file mode 100755 index 00000000..6a3d14e0 --- /dev/null +++ b/.github/actions/deduce-versions/deduce-versions.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# Get the next milestone release for the given number by inspecting current tags +get_next_milestone_release() { + [[ -n $1 ]] || { echo "missing get_next_milestone_release() version argument" >&2; return 1; } + get_next_tag_based_release "$1" "M" +} + +# Get the next RC release for the given number by inspecting current tags +get_next_rc_release() { + [[ -n $1 ]] || { echo "missing get_next_rc_release() version argument" >&2; return 1; } + get_next_tag_based_release "$1" "RC" +} + +# Get the next release for the given number +get_next_release() { + [[ -n $1 ]] || { echo "missing get_next_release() version argument" >&2; return 1; } + if [[ $1 =~ ^(.*)\.BUILD-SNAPSHOT$ ]]; then + local join="." + else + local join="-" + fi + local version + local result + version=$( strip_snapshot_suffix "$1" ) + if [[ -n $2 ]]; then + result="${version}${join}${2}" + else + result="${version}" + fi + echo $result +} + +# Get the next milestone or RC release for the given number by inspecting current tags +get_next_tag_based_release() { + [[ -n $1 ]] || { echo "missing get_next_tag_based_release() version argument" >&2; return 1; } + [[ -n $2 ]] || { echo "missing get_next_tag_based_release() tag type argument" >&2; return 1; } + if [[ $1 =~ ^(.*)\.BUILD-SNAPSHOT$ ]]; then + local join="." + else + local join="-" + fi + local version + local last + version=$( strip_snapshot_suffix "$1" ) + git fetch --tags --all > /dev/null + last=$( git tag --list "v${version}${join}${2}*" | sed -E "s/^.*${2}([0-9]+)$/\1/g" | sort -rn | head -n1 ) + if [[ -z $last ]]; then + last="0" + fi + last="${version}${join}${2}${last}" + bump_version_number "$last" +} + +# Remove any "-SNAPSHOT" or ".BUILD-SNAPSHOT" suffix +strip_snapshot_suffix() { + [[ -n $1 ]] || { echo "missing get_relase_version() argument" >&2; return 1; } + if [[ $1 =~ ^(.*)\.BUILD-SNAPSHOT$ ]]; then + echo "${BASH_REMATCH[1]}" + elif [[ $1 =~ ^(.*)-SNAPSHOT$ ]]; then + echo "${BASH_REMATCH[1]}" + else + echo "$1" + fi +} + +# Bump version number by incrementing the last numeric, RC or M token +bump_version_number() { + local version=$1 + [[ -n $version ]] || { echo "missing bump_version_number() argument" >&2; return 1; } + if [[ $version =~ ^(.*(\.|-)([A-Za-z]+))([0-9]+)$ ]]; then + local prefix=${BASH_REMATCH[1]} + local suffix=${BASH_REMATCH[4]} + (( suffix++ )) + echo "${prefix}${suffix}" + return 0; + fi + local suffix + if [[ $version =~ ^(.*)(\-SNAPSHOT)$ ]]; then + version=${BASH_REMATCH[1]} + suffix="-SNAPSHOT" + fi + tokens=(${version//\./ }) + local bumpIndex + for i in "${!tokens[@]}"; do + if [[ "${tokens[$i]}" =~ ^[0-9]+$ ]] ; then + bumpIndex=$i + fi + done + [[ -n $bumpIndex ]] || { echo "unsupported version number" >&2; return 1; } + (( tokens[bumpIndex]++ )) + local bumpedVersion + IFS=. eval 'bumpedVersion="${tokens[*]}"' + echo "${bumpedVersion}${suffix}" +} + +# Deduce versions +deduce_versions() { + [[ -n ${GITHUB_OUTPUT} ]] || { echo "missing GITHUB_OUTPUT environment variable" >&2; return 1; } + [[ -n ${CURRENT_VERSION} ]] || { echo "missing CURRENT_VERSION environment variable" >&2; return 1; } + [[ -n ${RELEASE_TYPE} ]] || { echo "missing RELEASE_TYPE environment variable" >&2; return 1; } + if [[ ${RELEASE_TYPE,,} = "milestone" ]]; then + releaseVersion=$( get_next_milestone_release ${CURRENT_VERSION}) + nextVersion=${CURRENT_VERSION} + elif [[ ${RELEASE_TYPE,,} = "release-candidate" ]]; then + releaseVersion=$( get_next_rc_release ${CURRENT_VERSION}) + nextVersion=${CURRENT_VERSION} + elif [[ ${RELEASE_TYPE,,} = "release" ]]; then + releaseVersion=$( get_next_release ${CURRENT_VERSION}) + nextVersion=$( bump_version_number ${CURRENT_VERSION}) + else + echo "Unknown release type '${RELEASE_TYPE}'" >&2; exit 1; + fi + echo "release-version=${releaseVersion}" >> "$GITHUB_OUTPUT" + echo "next-version=${nextVersion}" >> "$GITHUB_OUTPUT" +} diff --git a/.github/actions/deduce-versions/test.sh b/.github/actions/deduce-versions/test.sh new file mode 100755 index 00000000..0a8e4130 --- /dev/null +++ b/.github/actions/deduce-versions/test.sh @@ -0,0 +1 @@ +../.bats/bats/bin/bats test/*.bats \ No newline at end of file diff --git a/.github/actions/deduce-versions/test/bump_version.bats b/.github/actions/deduce-versions/test/bump_version.bats new file mode 100644 index 00000000..5efd9f0b --- /dev/null +++ b/.github/actions/deduce-versions/test/bump_version.bats @@ -0,0 +1,58 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +@test "bump_version_number() should bump '.M'" { + run bump_version_number "1.2.0.M2" + assert_output "1.2.0.M3" +} + +@test "bump_version_number() should bump '.RC'" { + run bump_version_number "1.2.0.RC3" + assert_output "1.2.0.RC4" +} + +@test "bump_version_number() should bump '-M'" { + run bump_version_number "1.2.0-M2" + assert_output "1.2.0-M3" +} + +@test "bump_version_number() should bump '-RC'" { + run bump_version_number "1.2.0-RC3" + assert_output "1.2.0-RC4" +} + +@test "bump_version_number() should bump without suffix" { + run bump_version_number "1.2.0" + assert_output "1.2.1" +} + +@test "bump_version_number() should bump '.RELEASE'" { + run bump_version_number "1.2.0.RELEASE" + assert_output "1.2.1.RELEASE" +} + +@test "bump_version_number() should bump '-SNAPSHOT'" { + run bump_version_number "1.2.0-SNAPSHOT" + assert_output "1.2.1-SNAPSHOT" +} + +@test "bump_version_number() should bump '.BUILD-SNAPSHOT'" { + run bump_version_number "1.2.0.BUILD-SNAPSHOT" + assert_output "1.2.1.BUILD-SNAPSHOT" +} + +@test "bump_version_number() when missing argument should fail" { + run bump_version_number + assert_output "missing bump_version_number() argument" + assert [ "$status" -eq 1 ] +} + +@test "bump_version_number() when bad argument should fail" { + run bump_version_number "foo.bar.baz" + assert_output "unsupported version number" + assert [ "$status" -eq 1 ] +} diff --git a/.github/actions/deduce-versions/test/deduce_versions.bats b/.github/actions/deduce-versions/test/deduce_versions.bats new file mode 100644 index 00000000..2ffbf599 --- /dev/null +++ b/.github/actions/deduce-versions/test/deduce_versions.bats @@ -0,0 +1,96 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +teardown() { + rm .githuboutput | true +} + +@test "deduce_versions() when 'milestone' should export versions" { + repo=$( mock_git_repo "v1.2.3-M1" ) + cd "$repo" + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="milestone" + run deduce_versions + readarray -t githuboutput < .githuboutput + assert [ "$status" -eq 0 ] + assert [ "${githuboutput[0]}" = "release-version=1.2.3-M2" ] + assert [ "${githuboutput[1]}" = "next-version=1.2.3-SNAPSHOT" ] +} + +@test "deduce_versions() when 'release-candidate' should export versions" { + repo=$( mock_git_repo "v1.2.3-M1" "v1.2.3-M2" "v1.2.3-RC1" ) + cd "$repo" + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="release-candidate" + run deduce_versions + readarray -t githuboutput < .githuboutput + assert [ "$status" -eq 0 ] + assert [ "${githuboutput[0]}" = "release-version=1.2.3-RC2" ] + assert [ "${githuboutput[1]}" = "next-version=1.2.3-SNAPSHOT" ] +} + +@test "deduce_versions() when 'release' should export versions" { + repo=$( mock_git_repo "v1.2.3-M1" "v1.2.3-M2" "v1.2.3-RC1" ) + cd "$repo" + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="release" + run deduce_versions + readarray -t githuboutput < .githuboutput + assert [ "$status" -eq 0 ] + assert [ "${githuboutput[0]}" = "release-version=1.2.3" ] + assert [ "${githuboutput[1]}" = "next-version=1.2.4-SNAPSHOT" ] +} + +@test "deduce_versions() when no GITHUB_OUTPUT should fail" { + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="release" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "missing GITHUB_OUTPUT environment variable" +} + +@test "deduce_versions() when no CURRENT_VERSION should fail" { + GITHUB_OUTPUT=".githuboutput" + RELEASE_TYPE="release" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "missing CURRENT_VERSION environment variable" +} + +@test "deduce_versions() when no RELEASE_TYPE should fail" { + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "missing RELEASE_TYPE environment variable" +} + +@test "deduce_versions() when wrong RELEASE_TYPE should fail" { + GITHUB_OUTPUT=".githuboutput" + CURRENT_VERSION="1.2.3-SNAPSHOT" + RELEASE_TYPE="nope" + run deduce_versions + assert [ "$status" -eq 1 ] + assert_output "Unknown release type 'nope'" +} + +mock_git_repo() { + local tmpdir=$(mktemp -d $BATS_TMPDIR/gitrepo.XXXXXX) >&2 + mkdir -p "$tmpdir" >&2 + cd "$tmpdir" >&2 + git init >&2 + echo "foo" > foo.txt + git add foo.txt >&2 + git commit -m'Initial commit' >&2 + for tag in "$@"; do + git tag "$tag" >&2 + done + echo "$tmpdir" +} \ No newline at end of file diff --git a/.github/actions/deduce-versions/test/get_next_release.bats b/.github/actions/deduce-versions/test/get_next_release.bats new file mode 100644 index 00000000..b9be5c0e --- /dev/null +++ b/.github/actions/deduce-versions/test/get_next_release.bats @@ -0,0 +1,119 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +@test "get_next_milestone_release() when has no version should fail" { + run get_next_milestone_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_milestone_release() version argument" +} + +@test "get_next_rc_release() when has no version should fail" { + run get_next_rc_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_rc_release() version argument" +} + +@test "get_next_tag_based_release() when has no version should fail" { + run get_next_tag_based_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_tag_based_release() version argument" +} + +@test "get_next_tag_based_release() when has no tag type should fail" { + run get_next_tag_based_release "1.2.3" + assert [ "$status" -eq 1 ] + assert_output "missing get_next_tag_based_release() tag type argument" +} + +@test "get_next_milestone_release() when has no tag should return M1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_milestone_release "1.2.3-SNAPSHOT" + assert_output "1.2.3-M1" +} + +@test "get_next_rc_release() when has no tag should return RC1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_rc_release "1.2.3-SNAPSHOT" + assert_output "1.2.3-RC1" +} + +@test "get_next_tag_based_release() when has no tag and dash SNAPSHOT suffix should return dashed X1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_tag_based_release "1.2.3-SNAPSHOT" "X" + assert_output "1.2.3-X1" +} + +@test "get_next_tag_based_release() when has no tag and dash BUILD-SNAPSHOT suffix should return dashed X1" { + repo=$( mock_git_repo ) + cd "$repo" + run get_next_tag_based_release "1.2.3.BUILD-SNAPSHOT" "X" + assert_output "1.2.3.X1" +} + +@test "get_next_tag_based_release() when has tags and dashed should return dashed X tag+1" { + repo=$( mock_git_repo "v1.2.3-X1" "v1.2.3-X3" "v1.2.3-X2" ) + cd "$repo" + run get_next_tag_based_release "1.2.3-SNAPSHOT" "X" + assert_output "1.2.3-X4" +} + +@test "get_next_tag_based_release() when has tags and dashed should return dot X tag+1" { + repo=$( mock_git_repo "v1.2.3.X1" "v1.2.3.X3" "v1.2.3.X2" ) + cd "$repo" + run get_next_tag_based_release "1.2.3.BUILD-SNAPSHOT" "X" + assert_output "1.2.3.X4" +} + +@test "get_next_tag_based_release() when has multiple tags should return version match tag+1" { + repo=$( mock_git_repo "v1.5.0.A1" "v1.5.0.A2" "v1.5.0.B1" "v2.0.0.A1" "v2.0.0.B1" "v2.0.0.B2" ) + cd "$repo" + run get_next_tag_based_release "1.5.0.BUILD-SNAPSHOT" "A" + assert_output "1.5.0.A3" + run get_next_tag_based_release "1.5.0.BUILD-SNAPSHOT" "B" + assert_output "1.5.0.B2" + run get_next_tag_based_release "2.0.0.BUILD-SNAPSHOT" "A" + assert_output "2.0.0.A2" + run get_next_tag_based_release "2.0.0.BUILD-SNAPSHOT" "B" + assert_output "2.0.0.B3" +} + +@test "get_next_release() should return next release version with release suffix" { + run get_next_release "1.5.0.BUILD-SNAPSHOT" "RELEASE" + assert_output "1.5.0.RELEASE" + run get_next_release "1.5.0-SNAPSHOT" "RELEASE" + assert_output "1.5.0-RELEASE" +} + +@test "get_next_release() should return next release version" { + run get_next_release "1.5.0.BUILD-SNAPSHOT" + assert_output "1.5.0" + run get_next_release "1.5.0-SNAPSHOT" + assert_output "1.5.0" +} + +@test "get_next_release() when has no version should fail" { + run get_next_release + assert [ "$status" -eq 1 ] + assert_output "missing get_next_release() version argument" +} + +mock_git_repo() { + local tmpdir=$(mktemp -d $BATS_TMPDIR/gitrepo.XXXXXX) >&2 + mkdir -p "$tmpdir" >&2 + cd "$tmpdir" >&2 + git init >&2 + echo "foo" > foo.txt + git add foo.txt >&2 + git commit -m'Initial commit' >&2 + for tag in "$@"; do + git tag "$tag" >&2 + done + echo "$tmpdir" +} diff --git a/.github/actions/deduce-versions/test/strip_snapshot_suffix.bats b/.github/actions/deduce-versions/test/strip_snapshot_suffix.bats new file mode 100644 index 00000000..bef64867 --- /dev/null +++ b/.github/actions/deduce-versions/test/strip_snapshot_suffix.bats @@ -0,0 +1,21 @@ +#!./test/libs/bats/bin/bats + +load '../../.bats/test_helper/bats-support/load' +load '../../.bats/test_helper/bats-assert/load' + +source "$PWD/deduce-versions.sh" + +@test "strip_snapshot_suffix() should strip '-SNAPSHOT" { + run strip_snapshot_suffix "1.2.0-SNAPSHOT" + assert_output "1.2.0" +} + +@test "strip_snapshot_suffix() should strip '.BUILD-SNAPSHOT" { + run strip_snapshot_suffix "1.2.0.BUILD-SNAPSHOT" + assert_output "1.2.0" +} + +@test "strip_snapshot_suffix() when no suffix should return unchanged" { + run strip_snapshot_suffix "1.2.0" + assert_output "1.2.0" +} diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml new file mode 100644 index 00000000..7f8bc0e2 --- /dev/null +++ b/.github/actions/setup/action.yml @@ -0,0 +1,16 @@ +name: 'Setup' +runs: + using: composite + steps: + - name: Set Up Utilities + shell: bash + run: sudo apt-get -y install libxml2-utils + - name: Set Up Java + uses: actions/setup-java@v4 + with: + distribution: 'liberica' + java-version: '17' + cache: maven + - name: Disable Java Problem Matcher + shell: bash + run: echo "::remove-matcher owner=java::" diff --git a/.github/actions/stage-code/action.yml b/.github/actions/stage-code/action.yml new file mode 100644 index 00000000..a71086eb --- /dev/null +++ b/.github/actions/stage-code/action.yml @@ -0,0 +1,23 @@ +name: 'Stage ' +description: 'Stage Code' +inputs: + current-version: + required: true + release-version: + required: true + next-version: + required: true +outputs: + distribution-repository: + value: ${{ steps.stage.outputs.distribution-repository }} +runs: + using: composite + steps: + - name: Stage + id: stage + shell: bash + run: . ${{ github.action_path }}/stage.sh; + env: + CURRENT_VERSION: "${{ inputs.current-version }}" + RELEASE_VERSION: "${{ inputs.release-version }}" + NEXT_VERSION: "${{ inputs.next-version }}" diff --git a/.github/actions/stage-code/stage.sh b/.github/actions/stage-code/stage.sh new file mode 100644 index 00000000..6ac9c2f0 --- /dev/null +++ b/.github/actions/stage-code/stage.sh @@ -0,0 +1,32 @@ +repository=${GITHUB_WORKSPACE}/distribution-repository + +echo "Staging ${RELEASE_VERSION} to ${repository} (next version will be ${NEXT_VERSION})" + +./mvnw versions:set --batch-mode --no-transfer-progress -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false +./mvnw org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata --batch-mode --no-transfer-progress +./mvnw --projects io.spring.javaformat:spring-javaformat-vscode-extension --batch-mode --no-transfer-progress -P '!formatter-dependencies' antrun:run@update-version frontend:install-node-and-npm frontend:npm@update-package-lock + +git config user.name "Spring Builds" > /dev/null +git config user.email "spring-builds@users.noreply.github.com" > /dev/null +git add pom.xml > /dev/null +git commit -m"Release v${RELEASE_VERSION}" > /dev/null +git tag -a "v${RELEASE_VERSION}" -m"Release v${RELEASE_VERSION}" > /dev/null + +./mvnw clean deploy --batch-mode --no-transfer-progress -U -Dfull -DaltDeploymentRepository=distribution::file://${repository} + +git reset --hard HEAD^ > /dev/null +if [[ ${NEXT_VERSION} != ${CURRENT_VERSION} ]]; then + echo "Setting next development version (v${NEXT_VERSION})" + ./mvnw versions:set --batch-mode --no-transfer-progress -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false + ./mvnw org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata --batch-mode --no-transfer-progress + ./mvnw --projects io.spring.javaformat:spring-javaformat-vscode-extension --batch-mode --no-transfer-progress -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock + sed -i "s/:release-version:.*/:release-version: ${RELEASE_VERSION}/g" README.adoc + sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${NEXT_VERSION}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle + sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${NEXT_VERSION}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle + sed -i "s|.*|${NEXT_VERSION}|" samples/spring-javaformat-maven-sample/pom.xml + git add -u . > /dev/null + git commit -m"Next development version (v${NEXT_VERSION})" > /dev/null +fi; + +echo "Staged the following files:" +find ${repository} diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index ac74bfca..d269a903 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -6,29 +6,25 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} jobs: - build: - if: ${{ github.repository == 'spring-io/spring-javaformat' }} + build-and-deploy-snapshot: name: Build and Deploy Snapshot runs-on: ubuntu-latest + if: ${{ github.repository == 'spring-io/spring-javaformat' }} steps: - - name: Check Out Code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Set Up Java - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 - with: - distribution: 'liberica' - java-version: 17 - cache: maven - - name: Build and Publish - run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -Dfull -DaltDeploymentRepository=distribution::file://$(pwd)/distribution-repository - - name: Deploy - uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 - with: - uri: 'https://repo.spring.io' - username: ${{ secrets.ARTIFACTORY_USERNAME }} - password: ${{ secrets.ARTIFACTORY_PASSWORD }} - build-name: spring-javaformat - repository: 'libs-snapshot-local' - folder: 'distribution-repository' - signing-key: ${{ secrets.GPG_PRIVATE_KEY }} - signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up + uses: ./.github/actions/setup + - name: Build + run: ./mvnw clean deploy --batch-mode --no-transfer-progress --update-snapshots -DaltDeploymentRepository=distribution::file://$(pwd)/distribution-repository + - name: Deploy + uses: spring-io/artifactory-deploy-action@v0.0.1 + with: + folder: 'distribution-repository' + uri: 'https://repo.spring.io' + repository: 'libs-snapshot-local' + build-name: spring-javaformat + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml new file mode 100644 index 00000000..0965a8c3 --- /dev/null +++ b/.github/workflows/build-pull-request.yml @@ -0,0 +1,16 @@ +name: Build Pull Request +on: pull_request +permissions: + contents: read +jobs: + build: + name: Build Pull Request + runs-on: ubuntu-latest + if: ${{ github.repository == 'spring-projects/spring-boot' }} + steps: + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up + uses: ./.github/actions/setup + - name: Build + run: ./mvnw clean install --batch-mode --no-transfer-progress --update-snapshots diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml new file mode 100644 index 00000000..968b265f --- /dev/null +++ b/.github/workflows/promote.yml @@ -0,0 +1,37 @@ +name: Promote +run-name: >- + Promote of version ${{ inputs.version }} (build number ${{ inputs.build-number}}) by ${{ github.actor }} to '${{ inputs.environment }}' environment' +on: + workflow_call: + inputs: + environment: + type: string + required: true + version: + type: string + required: true + build-number: + type: string + required: true + workflow_dispatch: + inputs: + environment: + description: Environment + type: environment + required: true + version: + description: The version number to promote + type: string + required: true + build-number: + description: The build number to promote + type: string + required: true +jobs: + promote: + environment: ${{ inputs.environment }} + name: Promote + runs-on: ubuntu-latest + steps: + - name: Promote + run: echo "Promote happens here" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..4e5d4746 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,58 @@ +name: Release +run-name: >- + Release of '${{ github.ref_name }}' branch to '${{ inputs.environment }}' environment by ${{ github.actor }} +on: + workflow_dispatch: + inputs: + environment: + description: Environment + type: environment + required: true +jobs: + stage: + name: Stage + runs-on: ubuntu-latest + steps: + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up + uses: ./.github/actions/setup + - name: Get Current Version + id: get-version + run: echo "current-version=$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml)" >> $GITHUB_OUTPUT + - name: Deduce Versions + id: deduce-versions + uses: ./.github/actions/deduce-versions + with: + current-version: ${{ steps.get-version.outputs.current-version }} + release-type: ${{ inputs.environment }} + - name: Stage Code + id: stage-code + uses: ./.github/actions/stage-code + with: + current-version: ${{ steps.get-version.outputs.current-version }} + release-version: ${{ steps.deduce-versions.outputs.release-version }} + next-version: ${{ steps.deduce-versions.outputs.next-version }} + - name: Deploy to Staging + uses: spring-io/artifactory-deploy-action@v0.0.1 + with: + folder: distribution-repository + uri: 'https://repo.spring.io' + repository: 'libs-staging-local' + build-name: ${{ format('spring-javaformat-{0}', steps.deduce-versions.outputs.release-version)}} + username: ${{ secrets.ARTIFACTORY_USERNAME }} + password: ${{ secrets.ARTIFACTORY_PASSWORD }} + signing-key: ${{ secrets.GPG_PRIVATE_KEY }} + signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} + - name: Push + run: git push origin HEAD --tags + outputs: + release-version: ${{ steps.deduce-versions.outputs.release-version }} + promote: + name: Promote + needs: stage + uses: ./.github/workflows/promote.yml + with: + environment: ${{ inputs.environment }} + version: ${{needs.stage.outputs.release-version}} + build-number: ${{ github.run_number }} diff --git a/.github/workflows/rollback.yml b/.github/workflows/rollback.yml new file mode 100644 index 00000000..43e04a4d --- /dev/null +++ b/.github/workflows/rollback.yml @@ -0,0 +1,41 @@ +name: Rollback +run-name: >- + Rollback of version ${{ inputs.version }} (build number ${{ inputs.build-number}}) by ${{ github.actor }} +on: + workflow_dispatch: + inputs: + environment: + description: Environment + type: environment + required: true + version: + description: The version number to roll back + type: string + required: true + build-number: + description: The build number to roll back + type: string + required: true +jobs: + rollback: + environment: ${{ inputs.environment }} + name: Roll Back + runs-on: ubuntu-latest + steps: + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up JFrog CLI + uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + env: + JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Delete Staged Artifacts + run: | + url=${{ format('libs-staging-local/io/spring/javaformat/spring-javaformat/{0}/spring-javaformat-{0}.pom', inputs.version) }} + artifact_count=$( jf rt s ${url} --count ) + if [ "${artifact_count}" != 1 ]; then + echo "Unexpected aretifact count ${artifact_count}" + exit 1 + fi + build_name=${{ format('spring-javaformat-{0}', inputs.version)}} + build_number=${{ inputs.build-number }} + jf rt delete --build ${build_name}/${build_number} diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..64d1aa9d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule ".github/actions/.bats/bats"] + path = .github/actions/.bats/bats + url = https://github.com/bats-core/bats-core.git + tag = v1.11.0 +[submodule ".github/actions/.bats/test_helper/bats-support"] + path = .github/actions/.bats/test_helper/bats-support + url = https://github.com/bats-core/bats-support.git + tag = v0.3.0 +[submodule ".github/actions/.bats/test_helper/bats-assert"] + path = .github/actions/.bats/test_helper/bats-assert + url = https://github.com/bats-core/bats-assert.git + tag = v2.1.0 From 8495f2972c4f8d2bb229901382ea2cc5f7c2759a Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Sat, 8 Jun 2024 15:24:12 +0000 Subject: [PATCH 088/136] Next development version (v0.0.43-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 72133a36..60e85607 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.41 +:release-version: 0.0.42 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 1ed8adf2..a619156b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 58e98809..b3bc0f41 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.42-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.43-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.42-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.43-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 3fa9bfe5..cec0c38e 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 1eabec83..b50eb61c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.42.qualifier" + version="0.0.43.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 84a96e0f..f0447048 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 8a7fb79c..3bb9eaf8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index eefcd0ae..511b7d62 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 9cf30470..806bab83 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 6c3c7374..eed2c0de 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 7452fede..29003f38 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index b7e8245f..5bbf628e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index d309137a..81e1a81b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index fad27c8b..c1f85ed9 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index eeef2201..650c586f 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index f5fa9333..e0da30d0 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 2f5858a2..c96c929e 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 5d3c5117..3605f2a0 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index bc99603f..46ee2658 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 66560bca..8575c456 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 6af1736a..299baf24 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index d5c84fe5..3e2efc32 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index a2c5c8ce..703c3a3c 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 5a0626dc..9572cc6f 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.42-SNAPSHOT", + "version": "0.0.43-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.42-SNAPSHOT", + "version": "0.0.43-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 639c5b16..cdb080b7 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.42-SNAPSHOT", + "version": "0.0.43-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index f2162ee6..cdac8ac0 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 697cc5d5..fc14a0f0 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 64eb5db8..98a45e42 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index bc6f0d6f..39d27d20 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index 68f6b967..e8f28aee 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 9608ea8a..cda64abf 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 8577d79f..6ceab19d 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.42.qualifier +Bundle-Version: 0.0.43.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index c14b90c0..0016a013 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index ba028fab..3f8b1057 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index eb9e11fa..83f65fb9 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 6f6e7cbb..44a54dbd 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index fc24ebcf..12ae265c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 9b1ef323..72eb47c8 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 76eadbc2..601f6dd7 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 6b857a01..9f247485 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 8439c6e9..bc439188 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index f6aef680..3a6c41c3 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.42-SNAPSHOT + 0.0.43-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 97a9a641a07214c5838d16de4dcc3e88b7dcfdef Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 4 Jun 2024 17:01:33 -0700 Subject: [PATCH 089/136] Migrate release process to GitHub Actions Complete migration to GitHub Actions. See gh-411 --- .../actions/create-github-release/action.yml | 21 +++++++ .../changelog-generator.yml | 2 + .../publish-eclipse-update-site/action.yml | 22 +++++++ ...blish-eclipse-update-site-pom-template.xml | 60 +++++++++++++++++++ .../publish-eclipse-update-site.sh | 51 ++++++++++++++++ .github/actions/stage-code/action.yml | 1 - .github/artifacts.spec | 23 +++++++ .github/workflows/promote.yml | 59 +++++++++++++++++- 8 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 .github/actions/create-github-release/action.yml create mode 100644 .github/actions/create-github-release/changelog-generator.yml create mode 100644 .github/actions/publish-eclipse-update-site/action.yml create mode 100755 .github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml create mode 100644 .github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh create mode 100644 .github/artifacts.spec diff --git a/.github/actions/create-github-release/action.yml b/.github/actions/create-github-release/action.yml new file mode 100644 index 00000000..1d72cd3a --- /dev/null +++ b/.github/actions/create-github-release/action.yml @@ -0,0 +1,21 @@ +name: Create GitHub Release +description: Create the release on GitHub with a changelog +inputs: + milestone: + required: true + token: + required: true +runs: + using: composite + steps: + - name: Generate Changelog + uses: spring-io/github-changelog-generator@v0.0.10 + with: + milestone: ${{ inputs.milestone }} + token: ${{ inputs.token }} + config-file: .github/actions/create-github-release/changelog-generator.yml + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ inputs.token }} + shell: bash + run: gh release create ${{ format('v{0}', inputs.milestone) }} --notes-file changelog.md diff --git a/.github/actions/create-github-release/changelog-generator.yml b/.github/actions/create-github-release/changelog-generator.yml new file mode 100644 index 00000000..2ce74a09 --- /dev/null +++ b/.github/actions/create-github-release/changelog-generator.yml @@ -0,0 +1,2 @@ +changelog: + repository: spring-io/spring-javaformat diff --git a/.github/actions/publish-eclipse-update-site/action.yml b/.github/actions/publish-eclipse-update-site/action.yml new file mode 100644 index 00000000..4235c9e8 --- /dev/null +++ b/.github/actions/publish-eclipse-update-site/action.yml @@ -0,0 +1,22 @@ +name: 'Publish Eclipse Update Site ' +inputs: + version: + required: true + build-number: + required: true + artifactory-username: + required: true + artifactory-password: + required: true +runs: + using: composite + steps: + - name: Stage + id: stage + shell: bash + run: . ${{ github.action_path }}/publish-eclipse-update-site.sh; + env: + VERSION: "${{ inputs.version }}" + BUILD_NUMBER: "${{ inputs.build-number }}" + ARTIFACTORY_USERNAME: "${{ inputs.artifactory-username }}" + ARTIFACTORY_PASSWORD: "${{ inputs.artifactory-password }}" diff --git a/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml new file mode 100755 index 00000000..6ee635e0 --- /dev/null +++ b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site-pom-template.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + org.eclipse.m2e.maveneclipse + m2eclipse-maveneclipse-publish + 0.0.0-SNAPSHOT + pom + + 1.1.0 + + + + + org.eclipse.tycho.extras + tycho-p2-extras-plugin + ${tycho-extras-version} + + + prepare-package + + mirror + + + + + +##repositories## + + ${project.build.directory}/repository + true + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + prepare-package + + mvn + + + + + + + + + + + run + + + + + + + diff --git a/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh new file mode 100644 index 00000000..9ddcee29 --- /dev/null +++ b/.github/actions/publish-eclipse-update-site/publish-eclipse-update-site.sh @@ -0,0 +1,51 @@ +buildInfo=$( jfrog rt curl api/build/spring-javaformat-${VERSION}/${BUILD_NUMBER} ) +groupId=$( echo ${buildInfo} | jq -r '.buildInfo.modules[0].id' | sed 's/\(.*\):.*:.*/\1/' ) +version=$( echo ${buildInfo} | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) + +echo "Publishing ${buildName}/${buildNumber} (${groupId}:${version}) to Eclipse Update Site" + +jfrog rt dl --build spring-javaformat-${VERSION}/${BUILD_NUMBER} '**/io.spring.javaformat.eclipse.site*.zip' + +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -H "X-Explode-Archive: true" \ + -X PUT \ + -T "io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ + "https://repo.spring.io/javaformat-eclipse-update-site/${version}/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '[0-9].*' | sort -V ) + +repositories="" +while read -r releasedVersion; do + echo "Adding repository for ${releasedVersion}" + repositories="${repositories}https://repo.spring.io/javaformat-eclipse-update-site/${releasedVersion}p2" +done <<< "${releasedVersions}" + +sed "s|##repositories##|${repositories}|" ${GITHUB_ACTION_PATH}/publish-eclipse-update-site-pom-template.xml > publish-eclipse-update-site-pom.xml +./mvnw -f publish-eclipse-update-site-pom.xml clean package || { echo "Failed to publish" >&2; exit 1; } + +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -X PUT \ + -T "target/repository/content.jar" \ + "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +curl \ + -s \ + --connect-timeout 240 \ + --max-time 2700 \ + -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ + -f \ + -X PUT \ + -T "target/repository/artifacts.jar" \ + "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } + +echo "Publish complete" diff --git a/.github/actions/stage-code/action.yml b/.github/actions/stage-code/action.yml index a71086eb..1fc1f060 100644 --- a/.github/actions/stage-code/action.yml +++ b/.github/actions/stage-code/action.yml @@ -1,5 +1,4 @@ name: 'Stage ' -description: 'Stage Code' inputs: current-version: required: true diff --git a/.github/artifacts.spec b/.github/artifacts.spec new file mode 100644 index 00000000..0f6c3aac --- /dev/null +++ b/.github/artifacts.spec @@ -0,0 +1,23 @@ +{ + "files": [ + { + "aql": { + "items.find": { + "$and": [ + { + "@build.name": "${buildName}", + "@build.number": "${buildNumber}", + "name": { + "$nmatch": "*.zip" + }, + "name": { + "$nmatch": "*.zip.asc" + } + } + ] + } + }, + "target": "nexus/" + } + ] +} diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml index 968b265f..cad6e40b 100644 --- a/.github/workflows/promote.yml +++ b/.github/workflows/promote.yml @@ -33,5 +33,60 @@ jobs: name: Promote runs-on: ubuntu-latest steps: - - name: Promote - run: echo "Promote happens here" + - name: Check Out + uses: actions/checkout@v4 + - name: Set Up JFrog CLI + uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + env: + JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} + - name: Check Maven Central Sync Status + id: check-sync-status + run: | + url=${{ format('https://repo.maven.apache.org/maven2/io/spring/javaformat/spring-javaformat/{0}/spring-javaformat-{0}.pom', inputs.version) }} + status_code=$( curl --write-out '%{http_code}' --head --silent --output /dev/null ${url} ) + if [ "${status_code}" != 200 ] && [ "${status_code}" != 404 ]; then + echo "Unexpected status code ${status_code}" + exit 1 + fi + echo "status-code=${status_code}" >> $GITHUB_OUTPUT + - name: Download Release Artifacts + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + run: jf rt download --spec ./.github/artifacts.spec --spec-vars 'buildName=${{ format('spring-javaformat-{0}', inputs.version) }};buildNumber=${{ inputs.build-number }}' + - name: Sync to Maven Central + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + uses: spring-io/nexus-sync-action@v0.0.1 + with: + username: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }} + password: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }} + staging-profile-name: ${{ secrets.OSSRH_S01_STAGING_PROFILE }} + create: true + upload: true + close: true + release: true + generate-checksums: true + - name: Await Maven Central Sync + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + run: | + url=${{ format('https://repo.maven.apache.org/maven2/io/spring/javaformat/spring-javaformat/{0}/spring-javaformat-{0}.pom', inputs.version) }} + echo "Waiting for $url" + until curl --fail --head --silent $url > /dev/null + do + echo "." + sleep 60 + done + echo "$url is available" + - name: Promote Build + if: ${{ steps.check-sync-status.outputs.status-code == '404' }} + run: jfrog rt build-promote ${{ format('spring-javaformat-{0}', inputs.version)}} ${{ inputs.build-number }} libs-release-local + - name: Publish Eclipse Update Site + uses: ./.github/actions/publish-eclipse-update-site + with: + version: ${{ inputs.version }} + build-number: ${{ inputs.build-number }} + artifactory-username: ${{ secrets.ARTIFACTORY_USERNAME }} + artifactory-password: ${{ secrets.ARTIFACTORY_PASSWORD }} + - name: Create GitHub Release + uses: ./.github/actions/create-github-release + with: + milestone: ${{ inputs.version }} + token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} From 66bf43f70d043452590330c68effdb18efe40e70 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 10 Jun 2024 09:28:28 -0700 Subject: [PATCH 090/136] Delete Concourse CI Closes gh-411 --- ci/README.adoc | 18 - ci/config/release-scripts.yml | 10 - ci/images/README.adoc | 21 -- ci/images/ci-image/Dockerfile | 11 - ci/images/docker-lib.sh | 112 ------- ci/images/get-docker-url.sh | 5 - ci/images/setup.sh | 38 --- ci/parameters.yml | 10 - ci/pipeline.yml | 316 ------------------ ci/scripts/build-project.sh | 9 - ci/scripts/common.sh | 9 - ci/scripts/generate-changelog.sh | 11 - ci/scripts/promote.sh | 18 - ...blish-eclipse-update-site-pom-template.xml | 60 ---- ci/scripts/publish-eclipse-update-site.sh | 57 ---- ci/scripts/stage.sh | 58 ---- ci/scripts/sync-to-maven-central.sh | 7 - ci/tasks/build-ci-image.yml | 28 -- ci/tasks/build-project.yml | 17 - ci/tasks/generate-changelog.yml | 16 - ci/tasks/promote.yml | 14 - ci/tasks/publish-eclipse-update-site.yml | 7 - ci/tasks/stage.yml | 16 - 23 files changed, 868 deletions(-) delete mode 100644 ci/README.adoc delete mode 100644 ci/config/release-scripts.yml delete mode 100644 ci/images/README.adoc delete mode 100644 ci/images/ci-image/Dockerfile delete mode 100755 ci/images/docker-lib.sh delete mode 100755 ci/images/get-docker-url.sh delete mode 100755 ci/images/setup.sh delete mode 100644 ci/parameters.yml delete mode 100644 ci/pipeline.yml delete mode 100755 ci/scripts/build-project.sh delete mode 100644 ci/scripts/common.sh delete mode 100755 ci/scripts/generate-changelog.sh delete mode 100755 ci/scripts/promote.sh delete mode 100755 ci/scripts/publish-eclipse-update-site-pom-template.xml delete mode 100755 ci/scripts/publish-eclipse-update-site.sh delete mode 100755 ci/scripts/stage.sh delete mode 100755 ci/scripts/sync-to-maven-central.sh delete mode 100644 ci/tasks/build-ci-image.yml delete mode 100644 ci/tasks/build-project.yml delete mode 100644 ci/tasks/generate-changelog.yml delete mode 100644 ci/tasks/promote.yml delete mode 100644 ci/tasks/publish-eclipse-update-site.yml delete mode 100644 ci/tasks/stage.yml diff --git a/ci/README.adoc b/ci/README.adoc deleted file mode 100644 index bdf75bd5..00000000 --- a/ci/README.adoc +++ /dev/null @@ -1,18 +0,0 @@ -== Concourse pipeline - -Ensure that you've setup the target and can login - -[source] ----- -$ fly -t spring-javaformat login -n spring-javaformat -c https://ci.spring.io ----- - -The pipeline can be deployed using the following command: - -[source] ----- -$ fly -t spring-javaformat set-pipeline -p spring-javaformat -c ci/pipeline.yml -l ci/parameters.yml ----- - -NOTE: This assumes that you have credhub integration configured with the appropriate -secrets. diff --git a/ci/config/release-scripts.yml b/ci/config/release-scripts.yml deleted file mode 100644 index d31f8cba..00000000 --- a/ci/config/release-scripts.yml +++ /dev/null @@ -1,10 +0,0 @@ -logging: - level: - io.spring.concourse: DEBUG -spring: - main: - banner-mode: off -sonatype: - exclude: - - 'build-info\.json' - - '.*\.zip' diff --git a/ci/images/README.adoc b/ci/images/README.adoc deleted file mode 100644 index 84eae160..00000000 --- a/ci/images/README.adoc +++ /dev/null @@ -1,21 +0,0 @@ -== CI Images - -These images are used by CI to run the actual builds. - -To build the image locally run the following from this directory: - ----- -$ docker build --no-cache -f /Dockerfile . ----- - -For example - ----- -$ docker build --no-cache -f spring-boot-ci-image/Dockerfile . ----- - -To test run: - ----- -$ docker run -it --entrypoint /bin/bash ✈ ----- diff --git a/ci/images/ci-image/Dockerfile b/ci/images/ci-image/Dockerfile deleted file mode 100644 index fbdbb4c0..00000000 --- a/ci/images/ci-image/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM ubuntu:focal-20210401 - -ADD setup.sh /setup.sh -ADD get-docker-url.sh /get-docker-url.sh -RUN ./setup.sh - -ENV JAVA_HOME /opt/openjdk -ENV PATH $JAVA_HOME/bin:$PATH -ADD docker-lib.sh /docker-lib.sh - -ENTRYPOINT [ "switch", "shell=/bin/bash", "--", "codep", "/bin/docker daemon" ] diff --git a/ci/images/docker-lib.sh b/ci/images/docker-lib.sh deleted file mode 100755 index 4c7b1d58..00000000 --- a/ci/images/docker-lib.sh +++ /dev/null @@ -1,112 +0,0 @@ -# Based on: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh - -DOCKER_LOG_FILE=${DOCKER_LOG_FILE:-/tmp/docker.log} -SKIP_PRIVILEGED=${SKIP_PRIVILEGED:-false} -STARTUP_TIMEOUT=${STARTUP_TIMEOUT:-120} - -sanitize_cgroups() { - mkdir -p /sys/fs/cgroup - mountpoint -q /sys/fs/cgroup || \ - mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup - - mount -o remount,rw /sys/fs/cgroup - - sed -e 1d /proc/cgroups | while read sys hierarchy num enabled; do - if [ "$enabled" != "1" ]; then - # subsystem disabled; skip - continue - fi - - grouping="$(cat /proc/self/cgroup | cut -d: -f2 | grep "\\<$sys\\>")" || true - if [ -z "$grouping" ]; then - # subsystem not mounted anywhere; mount it on its own - grouping="$sys" - fi - - mountpoint="/sys/fs/cgroup/$grouping" - - mkdir -p "$mountpoint" - - # clear out existing mount to make sure new one is read-write - if mountpoint -q "$mountpoint"; then - umount "$mountpoint" - fi - - mount -n -t cgroup -o "$grouping" cgroup "$mountpoint" - - if [ "$grouping" != "$sys" ]; then - if [ -L "/sys/fs/cgroup/$sys" ]; then - rm "/sys/fs/cgroup/$sys" - fi - - ln -s "$mountpoint" "/sys/fs/cgroup/$sys" - fi - done - - if ! test -e /sys/fs/cgroup/systemd ; then - mkdir /sys/fs/cgroup/systemd - mount -t cgroup -o none,name=systemd none /sys/fs/cgroup/systemd - fi -} - -start_docker() { - mkdir -p /var/log - mkdir -p /var/run - - if [ "$SKIP_PRIVILEGED" = "false" ]; then - sanitize_cgroups - - # check for /proc/sys being mounted readonly, as systemd does - if grep '/proc/sys\s\+\w\+\s\+ro,' /proc/mounts >/dev/null; then - mount -o remount,rw /proc/sys - fi - fi - - local mtu=$(cat /sys/class/net/$(ip route get 8.8.8.8|awk '{ print $5 }')/mtu) - local server_args="--mtu ${mtu}" - local registry="" - - server_args="${server_args}" - - for registry in $3; do - server_args="${server_args} --insecure-registry ${registry}" - done - - if [ -n "$4" ]; then - server_args="${server_args} --registry-mirror $4" - fi - - try_start() { - dockerd --data-root /scratch/docker ${server_args} >$DOCKER_LOG_FILE 2>&1 & - echo $! > /tmp/docker.pid - - sleep 1 - - echo waiting for docker to come up... - until docker info >/dev/null 2>&1; do - sleep 1 - if ! kill -0 "$(cat /tmp/docker.pid)" 2>/dev/null; then - return 1 - fi - done - } - - export server_args DOCKER_LOG_FILE - declare -fx try_start - trap stop_docker EXIT - - if ! timeout ${STARTUP_TIMEOUT} bash -ce 'while true; do try_start && break; done'; then - echo Docker failed to start within ${STARTUP_TIMEOUT} seconds. - return 1 - fi -} - -stop_docker() { - local pid=$(cat /tmp/docker.pid) - if [ -z "$pid" ]; then - return 0 - fi - - kill -TERM $pid -} - diff --git a/ci/images/get-docker-url.sh b/ci/images/get-docker-url.sh deleted file mode 100755 index 221b3462..00000000 --- a/ci/images/get-docker-url.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -e - -version="20.10.6" -echo "https://download.docker.com/linux/static/stable/x86_64/docker-$version.tgz"; diff --git a/ci/images/setup.sh b/ci/images/setup.sh deleted file mode 100755 index 6c90192c..00000000 --- a/ci/images/setup.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -set -ex - -########################################################### -# UTILS -########################################################### -export DEBIAN_FRONTEND=noninteractive -apt-get update -apt-get install --no-install-recommends -y tzdata ca-certificates net-tools libxml2-utils git curl libudev1 libxml2-utils iptables iproute2 jq fontconfig -ln -fs /usr/share/zoneinfo/UTC /etc/localtime -dpkg-reconfigure --frontend noninteractive tzdata -rm -rf /var/lib/apt/lists/* -curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.4/concourse-java.sh > /opt/concourse-java.sh - -########################################################### -# JAVA -########################################################### -JDK_URL=https://github.com/bell-sw/Liberica/releases/download/17.0.6+10/bellsoft-jdk17.0.6+10-linux-amd64.tar.gz - -mkdir -p /opt/openjdk -cd /opt/openjdk -curl -L ${JDK_URL} | tar zx --strip-components=1 -test -f /opt/openjdk/bin/java -test -f /opt/openjdk/bin/javac - -########################################################### -# DOCKER -########################################################### -cd / -DOCKER_URL=$( ./get-docker-url.sh ) -curl -L ${DOCKER_URL} | tar zx -mv /docker/* /bin/ -chmod +x /bin/docker* -export ENTRYKIT_VERSION=0.4.0 -curl -L https://github.com/progrium/entrykit/releases/download/v${ENTRYKIT_VERSION}/entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz | tar zx -chmod +x entrykit && \ -mv entrykit /bin/entrykit && \ -entrykit --symlink \ No newline at end of file diff --git a/ci/parameters.yml b/ci/parameters.yml deleted file mode 100644 index d4564cd2..00000000 --- a/ci/parameters.yml +++ /dev/null @@ -1,10 +0,0 @@ -project: spring-javaformat -branch: main -milestone: 0.0.x -github-owner: spring-io -github-repository: spring-javaformat -docker-hub-ci-organization: springci -ci-image: spring-javaformat-ci -artifactory-server: https://repo.spring.io -build-name: spring-javaformat -task-timeout: 2h00m diff --git a/ci/pipeline.yml b/ci/pipeline.yml deleted file mode 100644 index 92027920..00000000 --- a/ci/pipeline.yml +++ /dev/null @@ -1,316 +0,0 @@ -anchors: - github-release-source: &github-release-source - owner: ((github-owner)) - repository: ((github-repository)) - access_token: ((github-ci-release-token)) - artifactory-repo-put-params: &artifactory-repo-put-params - signing_key: ((signing-key)) - signing_passphrase: ((signing-passphrase)) - repo: libs-snapshot-local - folder: distribution-repository - build_uri: https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME} - build_number: ${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME} - disable_checksum_uploads: true - threads: 8 - sonatype-task-params: &sonatype-task-params - SONATYPE_USERNAME: ((sonatype-username)) - SONATYPE_PASSWORD: ((sonatype-password)) - SONATYPE_URL: ((sonatype-url)) - SONATYPE_STAGING_PROFILE_ID: ((sonatype-staging-profile-id)) - artifactory-task-params: &artifactory-task-params - ARTIFACTORY_SERVER: ((artifactory-server)) - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) - docker-hub-task-params: &docker-hub-task-params - DOCKER_HUB_USERNAME: ((docker-hub-username)) - DOCKER_HUB_PASSWORD: ((docker-hub-password)) - slack-fail-params: &slack-fail-params - text: > - :concourse-failed: - silent: true - icon_emoji: ":concourse:" - username: concourse-ci - slack-success-params: &slack-success-params - text: > - :concourse-succeeded: - silent: true - icon_emoji: ":concourse:" - username: concourse-ci -resource_types: -- name: artifactory-resource - type: registry-image - source: - repository: springio/artifactory-resource - tag: "0.0.18" - username: ((docker-hub-username)) - password: ((docker-hub-password)) -- name: slack-notification - type: registry-image - source: - repository: cfcommunity/slack-notification-resource - username: ((docker-hub-username)) - password: ((docker-hub-password)) -resources: -- name: git-repo - type: git - icon: github - source: - uri: https://github.com/((github-owner))/((github-repository)).git - username: ((github-username)) - password: ((github-ci-release-token)) - branch: ((branch)) -- name: github-pre-release - type: github-release - icon: briefcase-download-outline - source: - <<: *github-release-source - pre_release: true - release: false -- name: github-release - type: github-release - icon: briefcase-download - source: - <<: *github-release-source - pre_release: false - release: true -- name: ci-images-git-repo - type: git - icon: github - source: - uri: https://github.com/((github-owner))/((github-repository)).git - branch: ((branch)) - paths: ["ci/images/*"] -- name: ci-image - type: registry-image - icon: docker - source: - username: ((docker-hub-username)) - password: ((docker-hub-password)) - tag: ((milestone)) - repository: ((docker-hub-ci-organization))/((ci-image)) -- name: artifactory-repo - type: artifactory-resource - icon: package-variant - source: - uri: ((artifactory-server)) - username: ((artifactory-username)) - password: ((artifactory-password)) - build_name: ((build-name)) -- name: slack-alert - type: slack-notification - icon: slack - source: - url: ((slack-webhook-url)) -jobs: -- name: build-ci-images - plan: - - get: ci-images-git-repo - trigger: true - - get: git-repo - - task: build-ci-image - privileged: true - file: git-repo/ci/tasks/build-ci-image.yml - params: - DOCKER_HUB_AUTH: ((docker-hub-auth)) - output_mapping: - image: ci-image - - put: ci-image - params: - image: ci-image/image.tar -- name: build - serial: true - public: true - plan: - - get: ci-image - - get: git-repo - trigger: true - - do: - - task: build-project - image: ci-image - privileged: true - timeout: ((task-timeout)) - file: git-repo/ci/tasks/build-project.yml - params: - <<: *docker-hub-task-params - BRANCH: ((branch)) - on_failure: - do: - - put: slack-alert - params: - <<: *slack-fail-params - - put: slack-alert - params: - <<: *slack-success-params -- name: stage-milestone - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - task: stage - image: ci-image - file: git-repo/ci/tasks/stage.yml - params: - <<: *docker-hub-task-params - RELEASE_TYPE: M - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - repo: libs-staging-local - - put: git-repo - params: - repository: stage-git-repo -- name: stage-rc - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - task: stage - image: ci-image - file: git-repo/ci/tasks/stage.yml - params: - <<: *docker-hub-task-params - RELEASE_TYPE: RC - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - repo: libs-staging-local - - put: git-repo - params: - repository: stage-git-repo -- name: stage-release - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - task: stage - image: ci-image - file: git-repo/ci/tasks/stage.yml - params: - <<: *docker-hub-task-params - RELEASE_TYPE: RELEASE - - put: artifactory-repo - params: - <<: *artifactory-repo-put-params - repo: libs-staging-local - - put: git-repo - params: - repository: stage-git-repo -- name: promote-milestone - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [stage-milestone] - params: - download_artifacts: false - save_build_info: true - - task: promote - file: git-repo/ci/tasks/promote.yml - params: - RELEASE_TYPE: M - <<: *artifactory-task-params - - task: generate-changelog - file: git-repo/ci/tasks/generate-changelog.yml - params: - RELEASE_TYPE: M - GITHUB_USERNAME: ((github-username)) - GITHUB_TOKEN: ((github-ci-release-token)) - - put: github-pre-release - params: - name: generated-changelog/tag - tag: generated-changelog/tag - body: generated-changelog/changelog.md -- name: promote-rc - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [stage-rc] - params: - download_artifacts: false - save_build_info: true - - task: promote - file: git-repo/ci/tasks/promote.yml - params: - RELEASE_TYPE: RC - <<: *artifactory-task-params - - task: generate-changelog - file: git-repo/ci/tasks/generate-changelog.yml - params: - RELEASE_TYPE: RC - - put: github-pre-release - params: - name: generated-changelog/tag - tag: generated-changelog/tag - body: generated-changelog/changelog.md -- name: promote-release - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [stage-release] - params: - download_artifacts: true - save_build_info: true - - task: promote - file: git-repo/ci/tasks/promote.yml - params: - RELEASE_TYPE: RELEASE - <<: *artifactory-task-params - <<: *sonatype-task-params -- name: create-github-release - serial: true - plan: - - get: ci-image - - get: git-repo - - get: artifactory-repo - trigger: true - passed: [promote-release] - params: - download_artifacts: false - save_build_info: true - - task: generate-changelog - file: git-repo/ci/tasks/generate-changelog.yml - params: - RELEASE_TYPE: RELEASE - - put: github-release - params: - name: generated-changelog/tag - tag: generated-changelog/tag - body: generated-changelog/changelog.md -- name: publish-eclipse-update-site - serial: true - plan: - - get: ci-image - - get: git-repo - trigger: false - - get: artifactory-repo - trigger: false - passed: [promote-release] - params: - save_build_info: true - - task: publish-eclipse-update-site - image: ci-image - file: git-repo/ci/tasks/publish-eclipse-update-site.yml - params: - ARTIFACTORY_USERNAME: ((artifactory-username)) - ARTIFACTORY_PASSWORD: ((artifactory-password)) -groups: -- name: builds - jobs: [build] -- name: releases - jobs: [stage-milestone, stage-rc, stage-release, promote-milestone, promote-rc, promote-release, create-github-release, publish-eclipse-update-site] -- name: ci-images - jobs: [build-ci-images] diff --git a/ci/scripts/build-project.sh b/ci/scripts/build-project.sh deleted file mode 100755 index 476c837e..00000000 --- a/ci/scripts/build-project.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::file://${repository} -popd > /dev/null diff --git a/ci/scripts/common.sh b/ci/scripts/common.sh deleted file mode 100644 index 8eea3f79..00000000 --- a/ci/scripts/common.sh +++ /dev/null @@ -1,9 +0,0 @@ -source /opt/concourse-java.sh - -setup_symlinks - -if [[ -n $DOCKER_HUB_USERNAME ]]; then - docker login -u $DOCKER_HUB_USERNAME -p $DOCKER_HUB_PASSWORD -fi - -cleanup_maven_repo "io.spring.javaformat" diff --git a/ci/scripts/generate-changelog.sh b/ci/scripts/generate-changelog.sh deleted file mode 100755 index 1e4b6e5b..00000000 --- a/ci/scripts/generate-changelog.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -set -e - -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) - -java -jar /github-changelog-generator.jar \ - --changelog.repository=spring-io/spring-javaformat \ - ${version} generated-changelog/changelog.md - -echo ${version} > generated-changelog/version -echo v${version} > generated-changelog/tag diff --git a/ci/scripts/promote.sh b/ci/scripts/promote.sh deleted file mode 100755 index 4ce8285b..00000000 --- a/ci/scripts/promote.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -set -e - -CONFIG_DIR=git-repo/ci/config - -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) - -export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json - -java -jar /concourse-release-scripts.jar \ - --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ - publishToCentral $RELEASE_TYPE $BUILD_INFO_LOCATION artifactory-repo || { exit 1; } - -java -jar /concourse-release-scripts.jar \ - --spring.config.location=${CONFIG_DIR}/release-scripts.yml \ - promote $RELEASE_TYPE $BUILD_INFO_LOCATION || { exit 1; } - -echo "Promotion complete" diff --git a/ci/scripts/publish-eclipse-update-site-pom-template.xml b/ci/scripts/publish-eclipse-update-site-pom-template.xml deleted file mode 100755 index 6ee635e0..00000000 --- a/ci/scripts/publish-eclipse-update-site-pom-template.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - org.eclipse.m2e.maveneclipse - m2eclipse-maveneclipse-publish - 0.0.0-SNAPSHOT - pom - - 1.1.0 - - - - - org.eclipse.tycho.extras - tycho-p2-extras-plugin - ${tycho-extras-version} - - - prepare-package - - mirror - - - - - -##repositories## - - ${project.build.directory}/repository - true - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.8 - - - prepare-package - - mvn - - - - - - - - - - - run - - - - - - - diff --git a/ci/scripts/publish-eclipse-update-site.sh b/ci/scripts/publish-eclipse-update-site.sh deleted file mode 100755 index 761f74c3..00000000 --- a/ci/scripts/publish-eclipse-update-site.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh - -buildName=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.name' ) -buildNumber=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.number' ) -groupId=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/\(.*\):.*:.*/\1/' ) -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) - -echo "Publishing ${buildName}/${buildNumber} to Eclipse Update Site" -curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -f \ - -H "X-Explode-Archive: true" \ - -X PUT \ - -T "artifactory-repo/io/spring/javaformat/io.spring.javaformat.eclipse.site/${version}/io.spring.javaformat.eclipse.site-${version}.zip" \ - "https://repo.spring.io/javaformat-eclipse-update-site/${version}/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - -releasedVersions=$( curl -s -f -X GET https://repo.spring.io/api/storage/javaformat-eclipse-update-site | jq -r '.children[] | .uri' | cut -c 2- | grep '[0-9].*' | sort -V ) - -repositories="" -while read -r releasedVersion; do - echo "Adding repository for ${releasedVersion}" - repositories="${repositories}https://repo.spring.io/javaformat-eclipse-update-site/${releasedVersion}p2" -done <<< "${releasedVersions}" - -pushd git-repo > /dev/null -sed "s|##repositories##|${repositories}|" ci/scripts/publish-eclipse-update-site-pom-template.xml > publish-eclipse-update-site-pom.xml -run_maven -f publish-eclipse-update-site-pom.xml clean package || { echo "Failed to publish" >&2; exit 1; } - -curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -f \ - -X PUT \ - -T "target/repository/content.jar" \ - "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - -curl \ - -s \ - --connect-timeout 240 \ - --max-time 2700 \ - -u ${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD} \ - -f \ - -X PUT \ - -T "target/repository/artifacts.jar" \ - "https://repo.spring.io/javaformat-eclipse-update-site/" > /dev/null || { echo "Failed to publish" >&2; exit 1; } - -popd > /dev/null - -echo "Publish complete" diff --git a/ci/scripts/stage.sh b/ci/scripts/stage.sh deleted file mode 100755 index 5b36e8b4..00000000 --- a/ci/scripts/stage.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -set -e - -source $(dirname $0)/common.sh -repository=$(pwd)/distribution-repository - -pushd git-repo > /dev/null -git fetch --tags --all > /dev/null -popd > /dev/null - -git clone git-repo stage-git-repo > /dev/null - -pushd stage-git-repo > /dev/null - -snapshotVersion=$( xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml ) -if [[ $RELEASE_TYPE = "M" ]]; then - stageVersion=$( get_next_milestone_release $snapshotVersion) - nextVersion=$snapshotVersion -elif [[ $RELEASE_TYPE = "RC" ]]; then - stageVersion=$( get_next_rc_release $snapshotVersion) - nextVersion=$snapshotVersion -elif [[ $RELEASE_TYPE = "RELEASE" ]]; then - stageVersion=$( get_next_release $snapshotVersion) - nextVersion=$( bump_version_number $snapshotVersion) -else - echo "Unknown release type $RELEASE_TYPE" >&2; exit 1; -fi - -echo "Staging ${stageVersion} (next version will be ${nextVersion})" -run_maven versions:set -DnewVersion=${stageVersion} -DgenerateBackupPoms=false -run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata -run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:install-node-and-npm frontend:npm@update-package-lock - -git config user.name "Spring Builds" > /dev/null -git config user.email "spring-builds@users.noreply.github.com" > /dev/null -git add pom.xml > /dev/null -git commit -m"Release v${stageVersion}" > /dev/null -git tag -a "v${stageVersion}" -m"Release v${stageVersion}" > /dev/null - -run_maven clean deploy -U -Dfull -DaltDeploymentRepository=distribution::default::file://${repository} - -git reset --hard HEAD^ > /dev/null -if [[ $nextVersion != $snapshotVersion ]]; then - echo "Setting next development version (v$nextVersion)" - run_maven versions:set -DnewVersion=$nextVersion -DgenerateBackupPoms=false - run_maven org.eclipse.tycho:tycho-versions-plugin:update-eclipse-metadata - run_maven --projects io.spring.javaformat:spring-javaformat-vscode-extension -P '!formatter-dependencies' antrun:run@update-version frontend:npm@update-package-lock - sed -i "s/:release-version:.*/:release-version: ${stageVersion}/g" README.adoc - sed -i "s/spring-javaformat-gradle-plugin:.*/spring-javaformat-gradle-plugin:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle - sed -i "s/spring-javaformat-checkstyle:.*/spring-javaformat-checkstyle:${nextVersion}\"\)/g" samples/spring-javaformat-gradle-sample/build.gradle - sed -i "s|.*|${nextVersion}|" samples/spring-javaformat-maven-sample/pom.xml - git add -u . > /dev/null - git commit -m"Next development version (v${nextVersion})" > /dev/null -fi; - -popd > /dev/null - -echo "Staging Complete" diff --git a/ci/scripts/sync-to-maven-central.sh b/ci/scripts/sync-to-maven-central.sh deleted file mode 100755 index f691b9f9..00000000 --- a/ci/scripts/sync-to-maven-central.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json -version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' ) -java -jar /opt/concourse-release-scripts.jar syncToCentral "RELEASE" $BUILD_INFO_LOCATION || { exit 1; } - -echo "Sync complete" diff --git a/ci/tasks/build-ci-image.yml b/ci/tasks/build-ci-image.yml deleted file mode 100644 index 6f4de778..00000000 --- a/ci/tasks/build-ci-image.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -platform: linux -image_resource: - type: registry-image - source: - repository: concourse/oci-build-task - tag: 0.10.0 - username: ((docker-hub-username)) - password: ((docker-hub-password)) -inputs: -- name: ci-images-git-repo -outputs: -- name: image -caches: -- path: ci-image-cache -params: - CONTEXT: ci-images-git-repo/ci/images - DOCKERFILE: ci-images-git-repo/ci/images/ci-image/Dockerfile -run: - path: /bin/sh - args: - - "-c" - - | - mkdir -p /root/.docker - cat > /root/.docker/config.json < Date: Wed, 24 Jul 2024 14:24:03 +0100 Subject: [PATCH 091/136] Upgrade to Java 17.0.12 Closes gh-419 --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 14fdc133..828308d2 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.6-librca +java=17.0.12-librca From 70373338ffdd0be298536a0a044eaf4bee6e9e2a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 Jul 2024 14:26:54 +0100 Subject: [PATCH 092/136] Report unnecessary and unsupported warning suppressions at info level Closes gh-418 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 41401b15..09b98f97 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -82,7 +82,7 @@ org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=info org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore @@ -99,7 +99,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference= org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=info org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on From 2c8dbd91adc3323028d609e8088dcf969c16c334 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 Jul 2024 16:16:47 +0100 Subject: [PATCH 093/136] Only require test classes to have a name ending in Tests Previously, the check would apply to interfaces and annotations as well. This commit tightens up the check so that it only applies to classes. Closes gh-364 --- .../check/SpringTestFileNameCheck.java | 24 +++++++++++++++--- .../checkstyle/SpringChecksTests.java | 8 +++--- .../src/test/java/AnnotationEndingInTest.txt | 1 + .../src/test/java/InterfaceEndingInTest.txt | 1 + .../src/test/java/AnnotationEndingInTest.java | 25 +++++++++++++++++++ .../src/test/java/InterfaceEndingInTest.java | 25 +++++++++++++++++++ 6 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index eeda7a05..da188129 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,14 +18,19 @@ import java.io.File; +import com.puppycrawl.tools.checkstyle.JavaParser; +import com.puppycrawl.tools.checkstyle.JavaParser.Options; import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck; import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FileText; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** - * Checks that test filenames end {@literal Tests.java} and not {@literal Test.java}. + * Checks that test class filenames end {@literal Tests.java} and not {@literal Test.java}. * * @author Phillip Webb + * @author Andy Wilkinson */ public class SpringTestFileNameCheck extends AbstractFileSetCheck { @@ -33,8 +38,19 @@ public class SpringTestFileNameCheck extends AbstractFileSetCheck { protected void processFiltered(File file, FileText fileText) throws CheckstyleException { String path = file.getPath().replace('\\', '/'); if (path.contains("src/test/java") && file.getName().endsWith("Test.java")) { - log(1, "testfilename.wrongName"); + visitCompilationUnit(JavaParser.parseFileText(fileText, Options.WITHOUT_COMMENTS)); } } - + + private void visitCompilationUnit(DetailAST ast) { + DetailAST child = ast.getFirstChild(); + while (child != null) { + if (child.getType() == TokenTypes.CLASS_DEF) { + log(1, "testfilename.wrongName"); + return; + } + child = child.getNextSibling(); + } + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index 7d789a94..f3d31175 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -123,8 +123,10 @@ public static Collection paramaters() throws IOException { .map(Parameter::new) .collect(Collectors.toCollection(ArrayList::new)); parameters.add(new Parameter(new File(SOURCES_DIR, "nopackageinfo/NoPackageInfo.java"))); - parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTest.java"))); - parameters.add(new Parameter(new File(SOURCES_DIR, "src/test/java/NamedTests.java"))); + Arrays.stream(new File(SOURCES_DIR, "src/test/java").listFiles(SpringChecksTests::sourceFile)) + .sorted() + .map(Parameter::new) + .forEach(parameters::add); return parameters; } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/AnnotationEndingInTest.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/src/test/java/InterfaceEndingInTest.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java new file mode 100644 index 00000000..7579aac2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017-2024 the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * This is an annotation with a legal name. Only test classes must + * have a name that ends with {@code Tests}. + * + * @author Andy Wilkinson + */ +public @interface AnnotationEndingInTest { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java new file mode 100644 index 00000000..b2aad5f9 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java @@ -0,0 +1,25 @@ +/* + * Copyright 2017-2024 the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * This is an interface with a legal name. Only test classes must + * have a name that ends with {@code Tests}. + * + * @author Andy Wilkinson + */ +public interface InterfaceEndingInTest { + +} From 096af47c74e0352849fda9053d45d03500198bc8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 24 Jul 2024 17:54:50 +0100 Subject: [PATCH 094/136] Check that JUnit 5 test classes are package-private Closes gh-281 --- .../checkstyle/check/SpringJUnit5Check.java | 51 ++++++++++++++----- .../check/SpringTestFileNameCheck.java | 4 +- .../checkstyle/check/messages.properties | 3 ++ .../resources/check/JUnit5BadModifier.txt | 4 ++ .../resources/source/JUnit5BadModifier.java | 15 ++++++ .../test/resources/source/JUnit5Valid.java | 4 +- 6 files changed, 64 insertions(+), 17 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index db7cbbfd..59eb1bec 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -63,6 +63,8 @@ public class SpringJUnit5Check extends AbstractSpringCheck { LIFECYCLE_ANNOTATIONS = Collections.unmodifiableList(new ArrayList<>(annotations)); } + private static final Annotation NESTED_ANNOTATION = new Annotation("org.junit.jupiter.api", "Nested"); + private static final Set BANNED_IMPORTS; static { Set bannedImports = new LinkedHashSet<>(); @@ -84,9 +86,13 @@ public class SpringJUnit5Check extends AbstractSpringCheck { private final List lifecycleMethods = new ArrayList<>(); + private final List nestedTestClasses = new ArrayList<>(); + + private DetailAST testClass; + @Override public int[] getAcceptableTokens() { - return new int[] { TokenTypes.METHOD_DEF, TokenTypes.IMPORT }; + return new int[] { TokenTypes.METHOD_DEF, TokenTypes.IMPORT, TokenTypes.CLASS_DEF }; } @Override @@ -101,9 +107,13 @@ public void visitToken(DetailAST ast) { switch (ast.getType()) { case TokenTypes.METHOD_DEF: visitMethodDef(ast); + break; case TokenTypes.IMPORT: visitImport(ast); break; + case TokenTypes.CLASS_DEF: + visitClassDefinition(ast); + break; } } @@ -140,6 +150,17 @@ private void visitImport(DetailAST ast) { this.imports.put(ident.getText(), ident); } + private void visitClassDefinition(DetailAST ast) { + if (ast.getParent().getType() == TokenTypes.COMPILATION_UNIT) { + this.testClass = ast; + } + else { + if (containsAnnotation(ast, Arrays.asList(NESTED_ANNOTATION))) { + this.nestedTestClasses.add(ast); + } + } + } + @Override public void finishTree(DetailAST rootAST) { if (shouldCheck()) { @@ -148,7 +169,7 @@ public void finishTree(DetailAST rootAST) { } private boolean shouldCheck() { - if (this.testMethods.isEmpty() && this.lifecycleMethods.isEmpty()) { + if (this.testMethods.isEmpty() && this.lifecycleMethods.isEmpty() && this.nestedTestClasses.isEmpty()) { return false; } for (String unlessImport : this.unlessImports) { @@ -160,6 +181,10 @@ private boolean shouldCheck() { } private void check() { + if (this.testClass != null) { + checkVisibility(Arrays.asList(this.testClass), "junit5.publicClass", null); + } + checkVisibility(this.nestedTestClasses, "junit5.publicNestedClass", "junit5.privateNestedClass"); for (String bannedImport : BANNED_IMPORTS) { FullIdent ident = this.imports.get(bannedImport); if (ident != null) { @@ -171,25 +196,25 @@ private void check() { log(testMethod, "junit5.bannedTestAnnotation"); } } - checkMethodVisibility(this.testMethods, "junit5.testPublicMethod", "junit5.testPrivateMethod"); - checkMethodVisibility(this.lifecycleMethods, "junit5.lifecyclePublicMethod", "junit5.lifecyclePrivateMethod"); + checkVisibility(this.testMethods, "junit5.testPublicMethod", "junit5.testPrivateMethod"); + checkVisibility(this.lifecycleMethods, "junit5.lifecyclePublicMethod", "junit5.lifecyclePrivateMethod"); } - private void checkMethodVisibility(List methods, String publicMessageKey, String privateMessageKey) { - for (DetailAST method : methods) { - DetailAST modifiers = method.findFirstToken(TokenTypes.MODIFIERS); + private void checkVisibility(List asts, String publicMessageKey, String privateMessageKey) { + for (DetailAST ast : asts) { + DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); if (modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC) != null) { - log(method, publicMessageKey); + log(ast, publicMessageKey); } - if (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) != null) { - log(method, privateMessageKey); + if ((privateMessageKey != null) && (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) != null)) { + log(ast, privateMessageKey); } } } - private void log(DetailAST method, String key) { - String name = method.findFirstToken(TokenTypes.IDENT).getText(); - log(method.getLineNo(), method.getColumnNo(), key, name); + private void log(DetailAST ast, String key) { + String name = ast.findFirstToken(TokenTypes.IDENT).getText(); + log(ast.getLineNo(), ast.getColumnNo(), key, name); } public void setUnlessImports(String unlessImports) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index da188129..b2041870 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -41,7 +41,7 @@ protected void processFiltered(File file, FileText fileText) throws CheckstyleEx visitCompilationUnit(JavaParser.parseFileText(fileText, Options.WITHOUT_COMMENTS)); } } - + private void visitCompilationUnit(DetailAST ast) { DetailAST child = ast.getFirstChild(); while (child != null) { @@ -52,5 +52,5 @@ private void visitCompilationUnit(DetailAST ast) { child = child.getNextSibling(); } } - + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 9982830e..a27f9263 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -16,6 +16,9 @@ junit5.bannedImport=Import ''{0}'' should not be used in a JUnit 5 test. junit5.bannedTestAnnotation=JUnit 4 @Test annotation should not be used in a JUnit 5 test. junit5.lifecyclePrivateMethod=Lifecycle method ''{0}'' should not be private. junit5.lifecyclePublicMethod=Lifecycle method ''{0}'' should not be public. +junit5.publicClass=Test class ''{0}'' should not be public. +junit5.publicNestedClass=Nested test class ''{0}'' should not be public. +junit5.privateNestedClass=Nested test class ''{0}'' should not be private. junit5.testPrivateMethod=Test method ''{0}'' should not be private. junit5.testPublicMethod=Test method ''{0}'' should not be public. lambda.missingParen=Lambda argument missing parentheses. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt index 376aa13c..7ec1d4de 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5BadModifier.txt @@ -1,7 +1,11 @@ ++Test class 'JUnit5BadModifier' should not be public ++Nested test class 'PublicNestedTests' should not be public ++Nested test class 'PrivateNestedTests' should not be private +Test method 'doSomethingWorks' should not be public +Test method 'doSomethingElseWorks' should not be private +Test method 'doSomethingWithTemplateWorks' should not be public +Test method 'doSomethingElseWithTemplateWorks' should not be private ++Test method 'nestedPublicTest' should not be public +Lifecycle method 'publicBeforeAll' should not be public +Lifecycle method 'publicBeforeEach' should not be public +Lifecycle method 'publicAfterAll' should not be public diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java index e9b91697..9c59c587 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java @@ -88,4 +88,19 @@ private void doSomethingElseWithTemplateWorks() { // test here } + @Nested + public static class PublicNestedTests { + + @Test + public void nestedPublicTest() { + + } + + } + + @Nested + private static class PrivateNestedTests { + + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java index cc7b4cd0..bad7023d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ * * @author Phillip Webb */ -public class JUnit5Valid { +class JUnit5Valid { @Test void doSomethingWorks() { From 1adc8b1c145dca113ae1c133f549ea827a1f7708 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 09:12:50 +0000 Subject: [PATCH 095/136] Bump xml2js to 0.5.0 and @vscode/vsce to 2.19.0 Bumps [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) to 0.5.0 and updates ancestor dependency [@vscode/vsce](https://github.com/Microsoft/vsce). These dependencies need to be updated together. Updates `xml2js` from 0.4.23 to 0.5.0 - [Commits](https://github.com/Leonidas-from-XIV/node-xml2js/commits/0.5.0) Updates `@vscode/vsce` from 2.17.0 to 2.19.0 - [Release notes](https://github.com/Microsoft/vsce/releases) - [Commits](https://github.com/Microsoft/vsce/compare/v2.17.0...v2.19.0) --- updated-dependencies: - dependency-name: xml2js dependency-type: indirect - dependency-name: "@vscode/vsce" dependency-type: direct:development ... Signed-off-by: dependabot[bot] See gh-375 --- .../package-lock.json | 23 ++++++++++++------- .../package.json | 2 +- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 9572cc6f..cf72087a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -14,7 +14,7 @@ "@types/vscode": "^1.75.0", "@typescript-eslint/eslint-plugin": "^5.52.0", "@vscode/test-electron": "^2.2.2", - "@vscode/vsce": "^2.17.0", + "@vscode/vsce": "^2.19.0", "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", @@ -376,9 +376,9 @@ } }, "node_modules/@vscode/vsce": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", - "integrity": "sha512-W4HN5MtTVj/mroQU1d82bUEeWM3dUykMFnMYZPtZ6jrMiHN1PUoN3RGcS896N0r2rIq8KpWDtufcQHgK8VfgpA==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.19.0.tgz", + "integrity": "sha512-dAlILxC5ggOutcvJY24jxz913wimGiUrHaPkk16Gm9/PGFbz1YezWtrXsTKUtJws4fIlpX2UIlVlVESWq8lkfQ==", "dev": true, "dependencies": { "azure-devops-node-api": "^11.0.1", @@ -387,6 +387,7 @@ "commander": "^6.1.0", "glob": "^7.0.6", "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", "leven": "^3.1.0", "markdown-it": "^12.3.2", "mime": "^1.3.4", @@ -397,7 +398,7 @@ "tmp": "^0.2.1", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", - "xml2js": "^0.4.23", + "xml2js": "^0.5.0", "yauzl": "^2.3.1", "yazl": "^2.2.2" }, @@ -2138,6 +2139,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", @@ -3636,9 +3643,9 @@ "dev": true }, "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "dependencies": { "sax": ">=0.6.0", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index cdb080b7..86a6b65b 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -33,7 +33,7 @@ "@types/vscode": "^1.75.0", "@typescript-eslint/eslint-plugin": "^5.52.0", "@vscode/test-electron": "^2.2.2", - "@vscode/vsce": "^2.17.0", + "@vscode/vsce": "^2.19.0", "eslint": "^8.33.0", "glob": "8.1.0", "mocha": "10.2.0", From 09679cce7e84ba756262006e6ae8ee36e1725c16 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 26 Jul 2024 13:53:23 +0100 Subject: [PATCH 096/136] Include MissingDeprecated in the default checks Closes gh-420 --- .../eclipse/projectsettings/org.eclipse.jdt.core.prefs | 2 +- .../spring/javaformat/checkstyle/spring-checkstyle.xml | 1 + .../checkstyle/SpringConfigurationLoaderTests.java | 10 ++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs index 09b98f97..c08217ef 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.core.prefs @@ -45,7 +45,7 @@ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=default org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index ba9026a6..a41c37bf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -22,6 +22,7 @@ + ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(61); + Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); + assertThat(commentChecks).hasSize(6); } @Test public void loadWithExcludeShouldExcludeChecks() { - Set excludes = Collections - .singleton("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck"); + Set excludes = new HashSet(Arrays.asList("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck", + "com.puppycrawl.tools.checkstyle.checks.annotation.MissingDeprecatedCheck")); Collection checks = load(excludes); assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); assertThat(ordinaryChecks).hasSize(60); + Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); + assertThat(commentChecks).hasSize(5); } @Test From ab2ecf7eb9c96bc07fe9ba75504c2d4de9450f9c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 26 Jul 2024 16:58:22 +0100 Subject: [PATCH 097/136] Polish "Check that JUnit 5 test classes are package-private" - Clear the new fields each time a new tree is begun. This prevents state from one tree affecting the checking of another. - Allow abstract test classes to be public Closes gh-281 --- .../checkstyle/check/SpringJUnit5Check.java | 9 +++++- .../check/JUnit5PublicAbstractIsValid.txt | 1 + .../source/JUnit5PublicAbstractIsValid.java | 32 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index 59eb1bec..e110eab7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -97,9 +97,11 @@ public int[] getAcceptableTokens() { @Override public void beginTree(DetailAST rootAST) { + this.testClass = null; this.imports.clear(); this.testMethods.clear(); this.lifecycleMethods.clear(); + this.nestedTestClasses.clear(); } @Override @@ -181,7 +183,7 @@ private boolean shouldCheck() { } private void check() { - if (this.testClass != null) { + if (this.testClass != null && !isAbstract(this.testClass)) { checkVisibility(Arrays.asList(this.testClass), "junit5.publicClass", null); } checkVisibility(this.nestedTestClasses, "junit5.publicNestedClass", "junit5.privateNestedClass"); @@ -200,6 +202,11 @@ private void check() { checkVisibility(this.lifecycleMethods, "junit5.lifecyclePublicMethod", "junit5.lifecyclePrivateMethod"); } + private boolean isAbstract(DetailAST ast) { + DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); + return modifiers.findFirstToken(TokenTypes.ABSTRACT) != null; + } + private void checkVisibility(List asts, String publicMessageKey, String privateMessageKey) { for (DetailAST ast : asts) { DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JUnit5PublicAbstractIsValid.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java new file mode 100644 index 00000000..d56bbbd6 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-2024 the original author or authors. + * + * 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 + * + * https://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 org.junit.jupiter.api.Test; + +/** + * This is a valid example. We allow abstract test classes to be + * public so that classes in other packages can extend them. + * + * @author Andy Wilkinson + */ +public abstract class JUnit5PublicAbstractIsValid { + + @Test + void doSomethingWorks() { + // test here + } + +} From 9eeeee17446836ae98ee1ee4fd3d5e1127081162 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 13 Aug 2024 11:19:45 +0100 Subject: [PATCH 098/136] Reformat code --- .../javaformat/checkstyle/check/SpringJUnit5Check.java | 9 +++++---- .../checkstyle/check/SpringTestFileNameCheck.java | 3 ++- .../checkstyle/SpringConfigurationLoaderTests.java | 5 +++-- .../jdk17/eclipse/JavadocLineBreakPreparator.java | 3 +-- .../jdk8/eclipse/JavadocLineBreakPreparator.java | 3 +-- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index e110eab7..cdd8efc4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -129,8 +129,9 @@ private void visitMethodDef(DetailAST ast) { } private boolean containsAnnotation(DetailAST ast, List annotations) { - List annotationNames = annotations.stream().flatMap((annotation) -> - Stream.of(annotation.simpleName, annotation.fullyQualifiedName())).collect(Collectors.toList()); + List annotationNames = annotations.stream() + .flatMap((annotation) -> Stream.of(annotation.simpleName, annotation.fullyQualifiedName())) + .collect(Collectors.toList()); try { return AnnotationUtil.containsAnnotation(ast, annotationNames); } @@ -138,8 +139,8 @@ private boolean containsAnnotation(DetailAST ast, List annotations) // Checkstyle >= 10.3 (https://github.com/checkstyle/checkstyle/issues/14134) Set annotationNamesSet = new HashSet<>(annotationNames); try { - return (boolean) AnnotationUtil.class.getMethod("containsAnnotation", DetailAST.class, Set.class) - .invoke(null, ast, annotationNamesSet); + return (boolean) AnnotationUtil.class.getMethod("containsAnnotation", DetailAST.class, Set.class) + .invoke(null, ast, annotationNamesSet); } catch (Exception ex2) { throw new RuntimeException("containsAnnotation failed", ex2); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index b2041870..01708750 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -27,7 +27,8 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** - * Checks that test class filenames end {@literal Tests.java} and not {@literal Test.java}. + * Checks that test class filenames end {@literal Tests.java} and not + * {@literal Test.java}. * * @author Phillip Webb * @author Andy Wilkinson diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 760d5ed2..33536e6b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -57,8 +57,9 @@ public void loadShouldLoadChecks() { @Test public void loadWithExcludeShouldExcludeChecks() { - Set excludes = new HashSet(Arrays.asList("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck", - "com.puppycrawl.tools.checkstyle.checks.annotation.MissingDeprecatedCheck")); + Set excludes = new HashSet( + Arrays.asList("com.puppycrawl.tools.checkstyle.checks.whitespace.MethodParamPadCheck", + "com.puppycrawl.tools.checkstyle.checks.annotation.MissingDeprecatedCheck")); Collection checks = load(excludes); assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index e0dd5d8c..b66efa27 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -94,8 +94,7 @@ public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); this.commentTokenManager = (commentToken.getInternalStructure() != null) - ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) - : null; + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 4113bbf2..3a4a5f41 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -94,8 +94,7 @@ public boolean visit(Javadoc node) { int commentIndex = this.tokenManager.firstIndexIn(node, TerminalTokens.TokenNameCOMMENT_JAVADOC); Token commentToken = this.tokenManager.get(commentIndex); this.commentTokenManager = (commentToken.getInternalStructure() != null) - ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) - : null; + ? new TokenManager(commentToken.getInternalStructure(), this.tokenManager) : null; this.declaration = node.getParent(); this.firstTagElement = true; this.hasText = false; From 30ce46901ff03f2205b347ea4b957e978472f9c3 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 13 Aug 2024 11:17:38 +0100 Subject: [PATCH 099/136] Skip SpringLeadingWhitespaceCheck in text blocks Closes gh-421 --- .../check/SpringLeadingWhitespaceCheck.java | 53 ++++++++++++++++++- .../LeadingWhitespaceTabsAndTextBlock.txt | 1 + .../LeadingWhitespaceTabsAndTextBlock.java | 33 ++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java index 188e6781..8e3fa83f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java @@ -17,7 +17,9 @@ package io.spring.javaformat.checkstyle.check; import java.io.File; +import java.util.ArrayDeque; import java.util.Collections; +import java.util.Deque; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -26,6 +28,7 @@ import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FileContents; import com.puppycrawl.tools.checkstyle.api.FileText; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; import io.spring.javaformat.config.IndentationStyle; import io.spring.javaformat.config.JavaFormatConfig; @@ -49,14 +52,32 @@ public class SpringLeadingWhitespaceCheck extends AbstractSpringCheck { private IndentationStyle indentationStyle; + private final Deque textBlockPairs = new ArrayDeque<>(); + @Override public int[] getAcceptableTokens() { - return NO_REQUIRED_TOKENS; + return new int[] { TokenTypes.TEXT_BLOCK_LITERAL_BEGIN, TokenTypes.TEXT_BLOCK_LITERAL_END }; + } + + @Override + public void visitToken(DetailAST ast) { + super.visitToken(ast); + if (ast.getType() == TokenTypes.TEXT_BLOCK_LITERAL_BEGIN) { + this.textBlockPairs.add(new TextBlockPair(ast)); + } + else if (ast.getType() == TokenTypes.TEXT_BLOCK_LITERAL_END) { + this.textBlockPairs.getLast().end(ast); + } } @Override public void beginTree(DetailAST rootAST) { super.beginTree(rootAST); + this.textBlockPairs.clear(); + } + + @Override + public void finishTree(DetailAST rootAST) { FileContents fileContents = getFileContents(); FileText fileText = fileContents.getText(); File file = fileText.getFile(); @@ -66,8 +87,11 @@ public void beginTree(DetailAST rootAST) { IndentationStyle indentationStyle = (this.indentationStyle != null) ? this.indentationStyle : JavaFormatConfig.findFrom(file.getParentFile()).getIndentationStyle(); for (int i = 0; i < fileText.size(); i++) { - String line = fileText.get(i); int lineNo = i + 1; + if (isInTextBlock(lineNo)) { + continue; + } + String line = fileText.get(i); Matcher matcher = PATTERN.matcher(line); boolean found = matcher.find(0); while (found @@ -78,6 +102,11 @@ public void beginTree(DetailAST rootAST) { log(lineNo, "leadingwhitespace.incorrect", indentationStyle.toString().toLowerCase()); } } + super.finishTree(rootAST); + } + + private boolean isInTextBlock(int lineNo) { + return this.textBlockPairs.stream().anyMatch((textBlockPair) -> textBlockPair.contains(lineNo)); } public void setIndentationStyle(String indentationStyle) { @@ -85,4 +114,24 @@ public void setIndentationStyle(String indentationStyle) { ? IndentationStyle.valueOf(indentationStyle.toUpperCase()) : null; } + private static class TextBlockPair { + + private final DetailAST begin; + + private DetailAST end; + + TextBlockPair(DetailAST begin) { + this.begin = begin; + } + + public boolean contains(int lineNo) { + return (lineNo > this.begin.getLineNo()) && (lineNo <= this.end.getLineNo()); + } + + void end(DetailAST end) { + this.end = end; + } + + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/LeadingWhitespaceTabsAndTextBlock.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java new file mode 100644 index 00000000..e9e27b7b --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Leading whitepace with a text block. + * + * @author Phillip Webb + */ +public class LeadingWhitespaceTabsAndTextBlock { + + /** + * Comments are ignored. + */ + public void hello() { + System.out.println("""" + Hello + World!"""); + } + +} From bbd8fa95abe07c2cf998443a0cb56dc12563d092 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 13 Aug 2024 13:21:33 +0000 Subject: [PATCH 100/136] Next development version (v0.0.44-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 60e85607..d8ed6e45 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.42 +:release-version: 0.0.43 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index a619156b..c7e0ba80 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index b3bc0f41..251a0478 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.43-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.44-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.43-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.44-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index cec0c38e..cf225184 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index b50eb61c..9f08618a 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.43.qualifier" + version="0.0.44.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index f0447048..0393db0c 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index 3bb9eaf8..e3ad51fd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 511b7d62..fc5cf2eb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 806bab83..7d8f71ce 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index eed2c0de..4f9fbff4 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 29003f38..bf8669b4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 5bbf628e..46b89ccb 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 81e1a81b..dec698d9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index c1f85ed9..b0d1b674 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 650c586f..21ea0f9b 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index e0da30d0..e3026aee 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index c96c929e..f6967ca0 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 3605f2a0..1daa8cad 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 46ee2658..a1e09a0e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 8575c456..3e577cbd 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 299baf24..896f87b8 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 3e2efc32..bdcb704c 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 703c3a3c..e87f39f0 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index cf72087a..f991a7ab 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.43-SNAPSHOT", + "version": "0.0.44-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.43-SNAPSHOT", + "version": "0.0.44-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 86a6b65b..290ae51f 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.43-SNAPSHOT", + "version": "0.0.44-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index cdac8ac0..66239a95 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index fc14a0f0..e5991b91 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 98a45e42..3ea8357e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 39d27d20..cf59a073 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index e8f28aee..abc2e727 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index cda64abf..2eff5105 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 6ceab19d..24f373c1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.43.qualifier +Bundle-Version: 0.0.44.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 0016a013..d2ce8030 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 3f8b1057..5e64f7b4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 83f65fb9..88f90cfc 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 44a54dbd..2a686bb6 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 12ae265c..9be91feb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 72eb47c8..d047564d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 601f6dd7..6485c73e 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 9f247485..a2315b1f 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index bc439188..41e52b05 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 3a6c41c3..c604551e 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.43-SNAPSHOT + 0.0.44-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From def2b30c59589a7457a97da1df1ffe225d978ab1 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 15 Jan 2025 09:41:11 +0000 Subject: [PATCH 101/136] Switch from CLA to DCO --- .github/dco.yml | 2 ++ CONTRIBUTING.adoc | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 .github/dco.yml diff --git a/.github/dco.yml b/.github/dco.yml new file mode 100644 index 00000000..0c4b142e --- /dev/null +++ b/.github/dco.yml @@ -0,0 +1,2 @@ +require: + members: false diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index c4378ac3..a7e07f62 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -12,10 +12,9 @@ Please report unacceptable behavior to spring-code-of-conduct@pivotal.io. -== Sign the Contributor License Agreement -Before we accept a non-trivial patch or pull request we will need you to https://cla.pivotal.io/sign/spring[sign the Contributor License Agreement]. -Signing the contributor's agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. -Active contributors might be asked to join the core team, and given the ability to merge pull requests. +== Include a Signed-off-by Trailer +All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin[Developer Certificate of Origin (DCO)]. +For additional details, please refer to the blog post https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring[Hello DCO, Goodbye CLA: Simplifying Contributions to Spring]. From bdd396fef8a7fa34be2bc44eae19102373ff170e Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 23 Apr 2025 15:35:43 +0100 Subject: [PATCH 102/136] Upgrade to Java 17.0.14 --- .sdkmanrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.sdkmanrc b/.sdkmanrc index 828308d2..83ec5a0a 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.12-librca +java=17.0.14-librca From 601aa275b425d3b06ed32221725fc0cc8ad2cc0f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 23 Apr 2025 19:10:43 +0100 Subject: [PATCH 103/136] Tolerate breaking change in Checkstyle 10.22 In Checkstyle 10.22 the scope property on JavadocVariableCheck was renamed to accessModifiers. This commit tolerates this change by templating spring-checkstyle.xml and replacing the property name in the XML based on the name of the method that's available on JavadocVariableCheck. Closes gh-433 --- .../checkstyle/SpringConfigurationLoader.java | 44 ++++++++++++++++--- .../checkstyle/spring-checkstyle.xml | 2 +- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 12bd56c7..42ca7311 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,11 @@ package io.spring.javaformat.checkstyle; +import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; @@ -30,6 +34,8 @@ import com.puppycrawl.tools.checkstyle.api.Context; import com.puppycrawl.tools.checkstyle.api.Contextualizable; import com.puppycrawl.tools.checkstyle.api.FileSetCheck; +import com.puppycrawl.tools.checkstyle.api.Scope; +import com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocVariableCheck; import org.xml.sax.InputSource; /** @@ -50,17 +56,45 @@ class SpringConfigurationLoader { } public Collection load(PropertyResolver propertyResolver) { - Configuration config = loadConfiguration(getClass().getResourceAsStream("spring-checkstyle.xml"), - propertyResolver); + Configuration config = loadConfiguration(loadConfigurationSource(), propertyResolver); return Arrays.stream(config.getChildren()) .filter(this.moduleFactory::nonFiltered) .map(this::load) .collect(Collectors.toList()); } - private Configuration loadConfiguration(InputStream inputStream, PropertyResolver propertyResolver) { + private String loadConfigurationSource() { + try (InputStream stream = getClass().getResourceAsStream("spring-checkstyle.xml")) { + StringBuilder builder = new StringBuilder(); + byte[] buffer = new byte[4096]; + int read; + while ((read = stream.read(buffer)) > 0) { + builder.append(new String(buffer, 0, read, StandardCharsets.UTF_8)); + } + return preprocessConfigurationSource(builder.toString()); + } + catch (IOException ex) { + throw new UncheckedIOException(ex); + } + } + + private String preprocessConfigurationSource(String source) { + return source.replace("{{javadocVariableCheckScopeProperty}}", javadocVariableCheckScopeProperty()); + } + + private String javadocVariableCheckScopeProperty() { + try { + JavadocVariableCheck.class.getMethod("setScope", Scope.class); + return "scope"; + } + catch (NoSuchMethodException ex) { + return "accessModifiers"; + } + } + + private Configuration loadConfiguration(String source, PropertyResolver propertyResolver) { try { - InputSource inputSource = new InputSource(inputStream); + InputSource inputSource = new InputSource(new StringReader(source)); return ConfigurationLoader.loadConfiguration(inputSource, propertyResolver, IgnoredModulesOptions.EXECUTE); } catch (CheckstyleException ex) { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index a41c37bf..fa6f8a64 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -90,7 +90,7 @@ - + From 35984352460298190f8ae9e45d5dd35a74b30518 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sat, 21 Sep 2024 21:25:25 +0900 Subject: [PATCH 104/136] Polish sample in README See gh-423 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index d8ed6e45..cb549f97 100644 --- a/README.adoc +++ b/README.adoc @@ -391,7 +391,7 @@ For example: [source,java,indent=0,subs="normal"] ---- -class Name { +public class Name { private final String first; From f923fae0f490126f6eabb51dcb7b690ccc10717c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 28 Apr 2025 13:53:11 +0100 Subject: [PATCH 105/136] Fix copy-paste error in build-pull-request workflow --- .github/workflows/build-pull-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml index 0965a8c3..9e085b69 100644 --- a/.github/workflows/build-pull-request.yml +++ b/.github/workflows/build-pull-request.yml @@ -6,7 +6,7 @@ jobs: build: name: Build Pull Request runs-on: ubuntu-latest - if: ${{ github.repository == 'spring-projects/spring-boot' }} + if: ${{ github.repository == 'spring-io/spring-javaformat' }} steps: - name: Check Out uses: actions/checkout@v4 From 61466c2e234865f3b83344497b3b7df53df2f242 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Sun, 27 Apr 2025 22:44:29 +0900 Subject: [PATCH 106/136] Throw VerificationException for build verification failures See gh-436 Signed-off-by: Johnny Lim --- .../java/io/spring/javaformat/gradle/tasks/CheckFormat.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 096e1109..7e531d42 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -24,10 +24,10 @@ import java.util.List; import java.util.stream.Collectors; -import org.gradle.api.GradleException; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.VerificationException; import io.spring.javaformat.formatter.FileEdit; @@ -63,7 +63,7 @@ public void checkFormatting() throws IOException, InterruptedException { message.append("\nRun `format` to fix."); Files.write(this.reportLocation.toPath(), Collections.singletonList(message.toString()), StandardOpenOption.CREATE); - throw new GradleException(message.toString()); + throw new VerificationException(message.toString()); } else { this.reportLocation.createNewFile(); From 79d64af8ddf0c847abd6bd113b5577dff58f41dc Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 2 May 2025 19:45:48 -0700 Subject: [PATCH 107/136] Upgrade tests to use Java 17 --- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 41e52b05..6a0da60a 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -12,7 +12,7 @@ Spring JavaFormat Formatter Tests ${basedir}/../.. - 11 + 17 From 355abdc953839b4318af7b67cb4a8337dc5ddf1d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 2 May 2025 19:45:57 -0700 Subject: [PATCH 108/136] Add JSpecifyPreparator to consistently format `@Nullable` Fixes gh-435 --- .../projectsettings/org.eclipse.jdt.ui.prefs | 1 + .../formatter/AbstractFormatterTests.java | 2 +- .../src/test/resources/expected/nullable.txt | 21 +++++ .../src/test/resources/source/nullable.txt | 20 ++++ .../eclipse/EclipseJdk17CodeFormatter.java | 3 +- .../jdk17/eclipse/JSpecifyPreparator.java | 94 +++++++++++++++++++ .../eclipse/EclipseJdk8CodeFormatter.java | 3 +- .../jdk8/eclipse/JSpecifyPreparator.java | 94 +++++++++++++++++++ 8 files changed, 235 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java create mode 100644 spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs index af9117f9..23d79e64 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/org.eclipse.jdt.ui.prefs @@ -1,3 +1,4 @@ +cleanup.add_all=false cleanup.add_default_serial_version_id=true cleanup.add_generated_serial_version_id=false cleanup.add_missing_annotations=true diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index bf873dd2..c01324c2 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt new file mode 100644 index 00000000..b077cb5d --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -0,0 +1,21 @@ +package example; + +import org.jspecify.annotations.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override + @Nullable String myMethod(String param); + + @Override + public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt new file mode 100644 index 00000000..b2952241 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -0,0 +1,20 @@ +package example; + +import org.jspecify.annotations.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override @Nullable String myMethod(String param); + + @Override public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable + String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index 45103159..b902e3f3 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ public EclipseJdk17CodeFormatter(JavaFormatConfig javaFormatConfig) { this.appliedOptions = options; addPreparator(new JavadocLineBreakPreparator()); addPreparator(new CodeLineBreakPreparator()); + addPreparator(new JSpecifyPreparator()); } @Override diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java new file mode 100644 index 00000000..7d017570 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter.jdk17.eclipse; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; + +public class JSpecifyPreparator implements Preparator { + + private static final Set ANNOTATION_NAMES = new HashSet<>( + Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + + @Override + public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { + if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { + ASTVisitor visitor = new Vistor(tokenManager); + astRoot.accept(visitor); + } + } + + private static class Vistor extends ASTVisitor { + + private final TokenManager tokenManager; + + Vistor(TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + @Override + @SuppressWarnings("unchecked") + public boolean visit(MethodDeclaration node) { + Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + return true; + } + + @Override + @SuppressWarnings("unchecked") + public void endVisit(SingleVariableDeclaration node) { + if (node.isVarargs()) { + List annotations = node.varargsAnnotations(); + Annotation lastAnnotation = getLastAnnotation(annotations); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).spaceAfter(); + } + } + } + + private Annotation getLastAnnotation(List modifiers) { + Annotation annotation = null; + for (IExtendedModifier modifier : modifiers) { + if (!modifier.isAnnotation()) { + return annotation; + } + annotation = (Annotation) modifier; + } + return annotation; + } + + private boolean isJSpecifyAnnotation(Annotation annotation) { + return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java index 5038538f..fa365db4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ public EclipseJdk8CodeFormatter(JavaFormatConfig javaFormatConfig) { this.appliedOptions = options; addPreparator(new JavadocLineBreakPreparator()); addPreparator(new CodeLineBreakPreparator()); + addPreparator(new JSpecifyPreparator()); } @Override diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java new file mode 100644 index 00000000..620b462f --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.formatter.jdk8.eclipse; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; +import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; + +public class JSpecifyPreparator implements Preparator { + + private static final Set ANNOTATION_NAMES = new HashSet<>( + Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + + @Override + public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { + if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { + ASTVisitor visitor = new Vistor(tokenManager); + astRoot.accept(visitor); + } + } + + private static class Vistor extends ASTVisitor { + + private final TokenManager tokenManager; + + Vistor(TokenManager tokenManager) { + this.tokenManager = tokenManager; + } + + @Override + @SuppressWarnings("unchecked") + public boolean visit(MethodDeclaration node) { + Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + return true; + } + + @Override + @SuppressWarnings("unchecked") + public void endVisit(SingleVariableDeclaration node) { + if (node.isVarargs()) { + List annotations = node.varargsAnnotations(); + Annotation lastAnnotation = getLastAnnotation(annotations); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).spaceAfter(); + } + } + } + + private Annotation getLastAnnotation(List modifiers) { + Annotation annotation = null; + for (IExtendedModifier modifier : modifiers) { + if (!modifier.isAnnotation()) { + return annotation; + } + annotation = (Annotation) modifier; + } + return annotation; + } + + private boolean isJSpecifyAnnotation(Annotation annotation) { + return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + } + + } + +} From c497b86370b2a62c1c5aff34969251c110263c08 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 14 May 2025 11:53:32 -0700 Subject: [PATCH 109/136] Attempt to fix apt-get install problem --- .github/actions/setup/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 7f8bc0e2..c1d38d98 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -4,7 +4,7 @@ runs: steps: - name: Set Up Utilities shell: bash - run: sudo apt-get -y install libxml2-utils + run: sudo apt-get update && sudo apt-get -y install libxml2-utils - name: Set Up Java uses: actions/setup-java@v4 with: From 2ffeb8ef2bb96d588bcc7c13e6041c77755947f9 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Wed, 14 May 2025 19:13:53 +0000 Subject: [PATCH 110/136] Next development version (v0.0.45-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index cb549f97..6ebfec9a 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.43 +:release-version: 0.0.44 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index c7e0ba80..ff0d2732 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 251a0478..cebfcad0 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.44-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.45-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.44-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.45-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index cf225184..e7492a31 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 9f08618a..bbd37c1f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.44.qualifier" + version="0.0.45.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 0393db0c..80811b23 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index e3ad51fd..b1a0200a 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index fc5cf2eb..0b2c41b6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 7d8f71ce..6272fb89 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 4f9fbff4..f9dc324d 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index bf8669b4..68810401 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 46b89ccb..30ff2e88 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index dec698d9..9f05ae23 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index b0d1b674..22815dd0 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 21ea0f9b..e9925fbb 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index e3026aee..5ad6e456 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index f6967ca0..233242b6 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 1daa8cad..2a7bdf51 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index a1e09a0e..6c454f53 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index 3e577cbd..e46a0764 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 896f87b8..b014b693 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index bdcb704c..9ea0fc98 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index e87f39f0..5d2cc25d 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index f991a7ab..8390499b 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.44-SNAPSHOT", + "version": "0.0.45-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.44-SNAPSHOT", + "version": "0.0.45-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 290ae51f..b6be66c5 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.44-SNAPSHOT", + "version": "0.0.45-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 66239a95..446a2c54 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index e5991b91..ff871443 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 3ea8357e..5ab40720 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index cf59a073..54ddd0c9 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index abc2e727..7f5780eb 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 2eff5105..1ba8c47a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 24f373c1..2c93d052 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.44.qualifier +Bundle-Version: 0.0.45.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index d2ce8030..869a7fd8 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 5e64f7b4..b36d3e7e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 88f90cfc..2a6af271 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 2a686bb6..09a3ad1b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 9be91feb..eb28f8e8 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index d047564d..96af85e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 6485c73e..caae72af 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index a2315b1f..ef0f059b 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index 6a0da60a..b9269ce4 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index c604551e..1537e2fd 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.44-SNAPSHOT + 0.0.45-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 4122a3e5528fef124c38a2bd027464bf6423140a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 14 May 2025 12:41:00 -0700 Subject: [PATCH 111/136] Upgrade to jfrog/setup-jfrog-cli v4.5.11 --- .github/workflows/promote.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml index cad6e40b..e1faac58 100644 --- a/.github/workflows/promote.yml +++ b/.github/workflows/promote.yml @@ -36,7 +36,7 @@ jobs: - name: Check Out uses: actions/checkout@v4 - name: Set Up JFrog CLI - uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 + uses: jfrog/setup-jfrog-cli@ff5cb544114ffc152db9cea1cd3d5978d5074946 # v4.5.11 env: JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} - name: Check Maven Central Sync Status From e0f76992415e8ff441b4fa7d52a4de0f7d6e9ce5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 15 May 2025 12:20:16 -0700 Subject: [PATCH 112/136] Refine JSpecify support Update formatter to ignore non JSpecify `@Nullable` annotations and relax checkstyle to allow `@Nullable` on the same line. Fixes gh-440 --- .../check/SpringAnnotationLocationCheck.java | 124 ++++++++++++++++++ .../checkstyle/check/messages.properties | 2 + .../checkstyle/spring-checkstyle.xml | 5 +- .../resources/check/AnnotationOnNewLine.txt | 1 + .../resources/source/AnnotationOnNewLine.java | 45 +++++++ .../formatter/AbstractFormatterTests.java | 6 + .../expected/nullable-not-jspecify.txt | 23 ++++ .../expected/nullable-wildcard-import.txt | 22 ++++ .../src/test/resources/expected/nullable.txt | 3 +- .../source/nullable-not-jspecify.txt | 20 +++ .../source/nullable-wildcard-import.txt | 20 +++ .../src/test/resources/source/nullable.txt | 2 +- .../jdk17/eclipse/JSpecifyPreparator.java | 37 +++++- .../jdk8/eclipse/JSpecifyPreparator.java | 37 +++++- 14 files changed, 339 insertions(+), 8 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt create mode 100644 spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java new file mode 100644 index 00000000..f0fc0d5e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java @@ -0,0 +1,124 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.checkstyle.check; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import com.puppycrawl.tools.checkstyle.api.AbstractCheck; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; +import com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationLocationCheck; +import com.puppycrawl.tools.checkstyle.utils.CommonUtil; + +/** + * Spring variant of {@link AnnotationLocationCheck}. + * + * @author Phillip Webb + */ +public class SpringAnnotationLocationCheck extends AbstractCheck { + + private static final Set JSPECIFY_ANNOTATION_NAMES = new HashSet<>( + Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + + @Override + public int[] getDefaultTokens() { + return new int[] { TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF, TokenTypes.PACKAGE_DEF, + TokenTypes.ENUM_CONSTANT_DEF, TokenTypes.ENUM_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF, + TokenTypes.VARIABLE_DEF, TokenTypes.RECORD_DEF, TokenTypes.COMPACT_CTOR_DEF, }; + } + + @Override + public int[] getAcceptableTokens() { + return new int[] { TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF, TokenTypes.PACKAGE_DEF, + TokenTypes.ENUM_CONSTANT_DEF, TokenTypes.ENUM_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF, + TokenTypes.VARIABLE_DEF, TokenTypes.ANNOTATION_DEF, TokenTypes.ANNOTATION_FIELD_DEF, + TokenTypes.RECORD_DEF, TokenTypes.COMPACT_CTOR_DEF, }; + } + + @Override + public int[] getRequiredTokens() { + return CommonUtil.EMPTY_INT_ARRAY; + } + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() != TokenTypes.VARIABLE_DEF || ast.getParent().getType() == TokenTypes.OBJBLOCK) { + DetailAST node = ast.findFirstToken(TokenTypes.MODIFIERS); + node = (node != null) ? node : ast.findFirstToken(TokenTypes.ANNOTATIONS); + checkAnnotations(node, getExpectedAnnotationIndentation(node)); + } + } + + private int getExpectedAnnotationIndentation(DetailAST node) { + return node.getColumnNo(); + } + + private void checkAnnotations(DetailAST node, int correctIndentation) { + DetailAST annotation = node.getFirstChild(); + while (annotation != null && annotation.getType() == TokenTypes.ANNOTATION) { + checkAnnotation(correctIndentation, annotation); + annotation = annotation.getNextSibling(); + } + } + + private void checkAnnotation(int correctIndentation, DetailAST annotation) { + String annotationName = getAnnotationName(annotation); + if (!isCorrectLocation(annotation) && !isJSpecifyAnnotation(annotationName)) { + log(annotation, AnnotationLocationCheck.MSG_KEY_ANNOTATION_LOCATION_ALONE, annotationName); + } + else if (annotation.getColumnNo() != correctIndentation && !hasNodeBefore(annotation)) { + log(annotation, AnnotationLocationCheck.MSG_KEY_ANNOTATION_LOCATION, annotationName, + annotation.getColumnNo(), correctIndentation); + } + } + + private String getAnnotationName(DetailAST annotation) { + DetailAST identNode = annotation.findFirstToken(TokenTypes.IDENT); + if (identNode == null) { + identNode = annotation.findFirstToken(TokenTypes.DOT).findFirstToken(TokenTypes.IDENT); + } + return identNode.getText(); + } + + private boolean isCorrectLocation(DetailAST annotation) { + return !hasNodeBeside(annotation); + } + + private boolean hasNodeBeside(DetailAST annotation) { + return hasNodeBefore(annotation) || hasNodeAfter(annotation); + } + + private boolean hasNodeBefore(DetailAST annotation) { + int annotationLineNo = annotation.getLineNo(); + DetailAST previousNode = annotation.getPreviousSibling(); + return (previousNode != null) && (annotationLineNo == previousNode.getLineNo()); + } + + private boolean hasNodeAfter(DetailAST annotation) { + int annotationLineNo = annotation.getLineNo(); + DetailAST nextNode = annotation.getNextSibling(); + nextNode = (nextNode != null) ? nextNode : annotation.getParent().getNextSibling(); + return annotationLineNo == nextNode.getLineNo(); + } + + private boolean isJSpecifyAnnotation(String annotationName) { + return JSPECIFY_ANNOTATION_NAMES.contains(annotationName); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index a27f9263..cdea619e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -1,3 +1,5 @@ +annotation.location=Annotation ''{0}'' have incorrect indentation level {1}, expected level should be {2}. +annotation.location.alone=Annotation ''{0}'' should be alone on line. catch.singleLetter=Single letter catch variable (use "ex" instead). catch.wideEye=''o_O'' catch variable (use "ex" instead). header.unexpected=Unexpected header. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index fa6f8a64..4da52558 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -24,10 +24,7 @@ - - - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationOnNewLine.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java new file mode 100644 index 00000000..8799aae3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java @@ -0,0 +1,45 @@ +/* + * Copyright 2017-2025 the original author or authors. + * + * 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 + * + * https://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 org.jspecify.annotations.Nullable; + +/** + * This is a valid example. + * + * @author Phillip Webb + */ +public class AnnotationOnNewLine { + + @Override + public String toString() { + return ""; + } + + @Nullable String test1() { + return ""; + } + + @Override + @Nullable String test2() { + return ""; + } + + @Override + public @Nullable String test3() { + return ""; + } + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index c01324c2..f2bebe0a 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -21,6 +21,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import io.spring.javaformat.config.JavaBaseline; @@ -60,6 +61,7 @@ protected static Item[] items(String expectedOverride) { addItem(items, javaBaseline, source, expected, config); } } + items.sort(Comparator.comparing(Item::getName)); return items.toArray(new Item[0]); } @@ -139,6 +141,10 @@ private JavaFormatConfig loadConfig(JavaBaseline javaBaseline, File configFile) return JavaFormatConfig.of(javaBaseline, config.getIndentationStyle()); } + String getName() { + return this.source.getName(); + } + public File getSource() { return this.source; } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt new file mode 100644 index 00000000..dbdb1f45 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-not-jspecify.txt @@ -0,0 +1,23 @@ +package example; + +import com.example.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override + @Nullable + String myMethod(String param); + + @Override + public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, + @Nullable String @Nullable... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt new file mode 100644 index 00000000..053cbc13 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable-wildcard-import.txt @@ -0,0 +1,22 @@ +package example; + +import org.jspecify.annotations.*; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override + @Nullable String myMethod(String param); + + @Override + public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, + @Nullable String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index b077cb5d..8c2d80e6 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -16,6 +16,7 @@ public interface ExampleNullables { @Override public @Nullable String myPublicMethod(String param); - Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, + @Nullable String @Nullable ... varargs); } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt new file mode 100644 index 00000000..011a2189 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-not-jspecify.txt @@ -0,0 +1,20 @@ +package example; + +import com.example.Nullable; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override @Nullable String myMethod(String param); + + @Override public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable + String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt new file mode 100644 index 00000000..11c65198 --- /dev/null +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable-wildcard-import.txt @@ -0,0 +1,20 @@ +package example; + +import org.jspecify.annotations.*; + +/** + * Nullable. + * + * @author Phillip Webb + * @since 1.0.0 + */ +public interface ExampleNullables { + + @Override @Nullable String myMethod(String param); + + @Override public @Nullable String myPublicMethod(String param); + + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable + String @Nullable ... varargs); + +} diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index b2952241..286e78fc 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -14,7 +14,7 @@ public interface ExampleNullables { @Override public @Nullable String myPublicMethod(String param); - Object myArrayMethod(@Nullable String @Nullable [] array, @Nullable + Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 7d017570..e99256c2 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -17,14 +17,20 @@ package io.spring.javaformat.formatter.jdk17.eclipse; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SingleVariableDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; @@ -33,9 +39,15 @@ public class JSpecifyPreparator implements Preparator { + private static final String PACKAGE_NAME = "org.jspecify.annotations"; + private static final Set ANNOTATION_NAMES = new HashSet<>( Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() + .map((annotationName) -> PACKAGE_NAME + "." + annotationName) + .collect(Collectors.toSet()); + @Override public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { @@ -48,10 +60,31 @@ private static class Vistor extends ASTVisitor { private final TokenManager tokenManager; + private final Map fullyQualified = new HashMap<>(); + Vistor(TokenManager tokenManager) { this.tokenManager = tokenManager; } + @Override + public boolean visit(CompilationUnit node) { + this.fullyQualified.clear(); + return super.visit(node); + } + + @Override + public boolean visit(ImportDeclaration node) { + String name = node.getName().toString(); + if (name.equals(PACKAGE_NAME) || name.startsWith(PACKAGE_NAME)) { + Set annotationNames = (node.isOnDemand()) ? ANNOTATION_NAMES + : Collections.singleton(name.substring(name.lastIndexOf(".") + 1)); + for (String annotationName : annotationNames) { + this.fullyQualified.put(annotationName, PACKAGE_NAME + "." + annotationName); + } + } + return super.visit(node); + } + @Override @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { @@ -86,7 +119,9 @@ private Annotation getLastAnnotation(List modifiers } private boolean isJSpecifyAnnotation(Annotation annotation) { - return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + String fullyQualifiedName = (annotation != null) + ? this.fullyQualified.get(annotation.getTypeName().toString()) : null; + return (fullyQualifiedName != null) && FULLY_QUALIFIED_ANNOTATION_NAMES.contains(fullyQualifiedName); } } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index 620b462f..e1f0e121 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -17,14 +17,20 @@ package io.spring.javaformat.formatter.jdk8.eclipse; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTNode; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Annotation; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.IExtendedModifier; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SingleVariableDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; @@ -33,9 +39,15 @@ public class JSpecifyPreparator implements Preparator { + private static final String PACKAGE_NAME = "org.jspecify.annotations"; + private static final Set ANNOTATION_NAMES = new HashSet<>( Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() + .map((annotationName) -> PACKAGE_NAME + "." + annotationName) + .collect(Collectors.toSet()); + @Override public void apply(int kind, TokenManager tokenManager, ASTNode astRoot) { if ((kind & CodeFormatter.K_COMPILATION_UNIT) != 0) { @@ -48,10 +60,31 @@ private static class Vistor extends ASTVisitor { private final TokenManager tokenManager; + private final Map fullyQualified = new HashMap<>(); + Vistor(TokenManager tokenManager) { this.tokenManager = tokenManager; } + @Override + public boolean visit(CompilationUnit node) { + this.fullyQualified.clear(); + return super.visit(node); + } + + @Override + public boolean visit(ImportDeclaration node) { + String name = node.getName().toString(); + if (name.equals(PACKAGE_NAME) || name.startsWith(PACKAGE_NAME)) { + Set annotationNames = (node.isOnDemand()) ? ANNOTATION_NAMES + : Collections.singleton(name.substring(name.lastIndexOf(".") + 1)); + for (String annotationName : annotationNames) { + this.fullyQualified.put(annotationName, PACKAGE_NAME + "." + annotationName); + } + } + return super.visit(node); + } + @Override @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { @@ -86,7 +119,9 @@ private Annotation getLastAnnotation(List modifiers } private boolean isJSpecifyAnnotation(Annotation annotation) { - return (annotation != null) && ANNOTATION_NAMES.contains(annotation.getTypeName().toString()); + String fullyQualifiedName = (annotation != null) + ? this.fullyQualified.get(annotation.getTypeName().toString()) : null; + return (fullyQualifiedName != null) && FULLY_QUALIFIED_ANNOTATION_NAMES.contains(fullyQualifiedName); } } From 43a13d291a2533e6754200e1b87d7e6c6286531f Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Tue, 20 May 2025 00:37:16 +0000 Subject: [PATCH 113/136] Next development version (v0.0.46-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 6ebfec9a..2c00258a 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.44 +:release-version: 0.0.45 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index ff0d2732..3374b863 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index cebfcad0..cf53cc79 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.45-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.46-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.45-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.46-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index e7492a31..22ac6ca4 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index bbd37c1f..566fc75f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.45.qualifier" + version="0.0.46.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 80811b23..8781b88f 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index b1a0200a..a7901f2c 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 0b2c41b6..542c8623 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 6272fb89..73044003 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index f9dc324d..6dc39cf8 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 68810401..3e3b7156 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 30ff2e88..62909cb6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 9f05ae23..6c1fa6a7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 22815dd0..1a2639c5 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index e9925fbb..93f26ee8 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 5ad6e456..39880551 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 233242b6..0c7792a2 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 2a7bdf51..42d82863 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 6c454f53..f5581b69 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index e46a0764..bdbf48d4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index b014b693..02900b22 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 9ea0fc98..100d5a83 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index 5d2cc25d..ed69c065 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 8390499b..7a1dbc61 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.45-SNAPSHOT", + "version": "0.0.46-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.45-SNAPSHOT", + "version": "0.0.46-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index b6be66c5..0b7e7feb 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.45-SNAPSHOT", + "version": "0.0.46-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 446a2c54..afa9b39a 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index ff871443..c7815e7c 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 5ab40720..709a2f6a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 54ddd0c9..897d4d9a 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index 7f5780eb..b66f5efe 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 1ba8c47a..32c72950 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 2c93d052..a6aef027 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.45.qualifier +Bundle-Version: 0.0.46.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 869a7fd8..3d3c8a4c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index b36d3e7e..4b0ce32f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 2a6af271..0f557001 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 09a3ad1b..eb7b4352 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index eb28f8e8..a9bd4c45 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 96af85e1..13723df1 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index caae72af..2eea794d 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index ef0f059b..97190e18 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index b9269ce4..e43f5e4c 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 1537e2fd..0f2ce215 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.45-SNAPSHOT + 0.0.46-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From cbf53be4fedc606f5d1af1435ef2aab57dcafe0d Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 27 May 2025 08:05:59 -0700 Subject: [PATCH 114/136] Further Refine JSpecify support Support `@Nullable` annotations in method bodies. Fixes gh-442 --- .../src/test/resources/expected/nullable.txt | 7 +++++++ .../src/test/resources/source/nullable.txt | 7 +++++++ .../jdk17/eclipse/JSpecifyPreparator.java | 21 ++++++++++++++----- .../jdk8/eclipse/JSpecifyPreparator.java | 21 ++++++++++++++----- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index 8c2d80e6..b3e8f925 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -19,4 +19,11 @@ public interface ExampleNullables { Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + default Object inBody() { + @Nullable Object[] args = new Object[length]; + @Nullable List<@Nullable Object> list = new Object[length]; + Object @Nullable [] moreArgs = new Object[length]; + return args; + } + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index 286e78fc..acbefead 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -17,4 +17,11 @@ public interface ExampleNullables { Object myArrayMethod(@Nullable String string, @Nullable String @Nullable [] array, @Nullable String @Nullable ... varargs); + default Object inBody() { + @Nullable Object[] args = new Object[length]; + @Nullable List<@Nullable Object> list = new Object[length]; + Object @Nullable [] moreArgs = new Object[length]; + return args; + } + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index e99256c2..645bf75d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -33,6 +33,7 @@ import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.VariableDeclarationStatement; import io.spring.javaformat.eclipse.jdt.jdk17.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.Preparator; import io.spring.javaformat.eclipse.jdt.jdk17.internal.formatter.TokenManager; @@ -86,12 +87,14 @@ public boolean visit(ImportDeclaration node) { } @Override - @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { - Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); - if (isJSpecifyAnnotation(lastAnnotation)) { - this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); - } + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return true; + } + + @Override + public boolean visit(VariableDeclarationStatement node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); return true; } @@ -107,6 +110,14 @@ public void endVisit(SingleVariableDeclaration node) { } } + @SuppressWarnings("unchecked") + private void clearLineBreaksIfHasJSpecifyAnnotation(List modifiers) { + Annotation lastAnnotation = getLastAnnotation((List) modifiers); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + } + private Annotation getLastAnnotation(List modifiers) { Annotation annotation = null; for (IExtendedModifier modifier : modifiers) { diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index e1f0e121..4bc1aa0e 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -33,6 +33,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.SingleVariableDeclaration; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.VariableDeclarationStatement; import io.spring.javaformat.eclipse.jdt.jdk8.core.formatter.CodeFormatter; import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.Preparator; import io.spring.javaformat.eclipse.jdt.jdk8.internal.formatter.TokenManager; @@ -86,12 +87,14 @@ public boolean visit(ImportDeclaration node) { } @Override - @SuppressWarnings("unchecked") public boolean visit(MethodDeclaration node) { - Annotation lastAnnotation = getLastAnnotation((List) node.modifiers()); - if (isJSpecifyAnnotation(lastAnnotation)) { - this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); - } + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return true; + } + + @Override + public boolean visit(VariableDeclarationStatement node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); return true; } @@ -107,6 +110,14 @@ public void endVisit(SingleVariableDeclaration node) { } } + @SuppressWarnings("unchecked") + private void clearLineBreaksIfHasJSpecifyAnnotation(List modifiers) { + Annotation lastAnnotation = getLastAnnotation((List) modifiers); + if (isJSpecifyAnnotation(lastAnnotation)) { + this.tokenManager.lastTokenIn(lastAnnotation, -1).clearLineBreaksAfter(); + } + } + private Annotation getLastAnnotation(List modifiers) { Annotation annotation = null; for (IExtendedModifier modifier : modifiers) { From 5f3470b3344682d78da10c57ca16b3805063bcb3 Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Mon, 2 Jun 2025 18:24:21 +0000 Subject: [PATCH 115/136] Next development version (v0.0.47-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index 2c00258a..bf0a6e1c 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.45 +:release-version: 0.0.46 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 3374b863..99e69cc7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index cf53cc79..9e1f5c9a 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.46-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.47-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.46-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.47-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 22ac6ca4..9eb60913 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index 566fc75f..aebcd72d 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.46.qualifier" + version="0.0.47.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 8781b88f..7b4a2a51 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index a7901f2c..cc2c89a7 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 542c8623..20f32d4b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 73044003..982bb285 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index 6dc39cf8..d9e188f3 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 3e3b7156..99fa280e 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 62909cb6..12cac3a6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 6c1fa6a7..72042fa1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 1a2639c5..3590c925 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index 93f26ee8..be5f1d3e 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index 39880551..c13954a9 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 0c7792a2..5a6de1f3 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 42d82863..4d8c434c 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index f5581b69..611a99fe 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index bdbf48d4..dc437a12 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index 02900b22..a14e54eb 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 100d5a83..88294ec8 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index ed69c065..c217c403 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 7a1dbc61..5ea30c21 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.46-SNAPSHOT", + "version": "0.0.47-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.46-SNAPSHOT", + "version": "0.0.47-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 0b7e7feb..63e3b775 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.46-SNAPSHOT", + "version": "0.0.47-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index afa9b39a..3c439b79 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index c7815e7c..7c086cc7 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 709a2f6a..7d74f0cc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 897d4d9a..72fe7b7b 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index b66f5efe..f3b70674 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index 32c72950..cd3752e1 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index a6aef027..652b5065 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.46.qualifier +Bundle-Version: 0.0.47.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index 3d3c8a4c..f22c974e 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 4b0ce32f..8621592f 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 0f557001..0689734b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index eb7b4352..306b6166 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index a9bd4c45..73007642 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 13723df1..5476a0c9 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 2eea794d..0648a5b4 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index 97190e18..e34149fe 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index e43f5e4c..ce9bf2a2 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 0f2ce215..24b89552 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.46-SNAPSHOT + 0.0.47-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From 7308be977d601574313cd3c1145f49164ce34667 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 2 Jun 2025 11:52:03 -0700 Subject: [PATCH 116/136] Fix release workflow to use correct build number --- .github/workflows/release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4e5d4746..c80a4091 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -48,6 +48,7 @@ jobs: run: git push origin HEAD --tags outputs: release-version: ${{ steps.deduce-versions.outputs.release-version }} + release-build-number: ${{ github.run_number }} promote: name: Promote needs: stage @@ -55,4 +56,4 @@ jobs: with: environment: ${{ inputs.environment }} version: ${{needs.stage.outputs.release-version}} - build-number: ${{ github.run_number }} + build-number: ${{ needs.stage.outputs.release-build-number }} From 8ba5651f86da448af5b76b5d3801afc08d42f635 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:43:42 -0700 Subject: [PATCH 117/136] Support '20NN-present' format in headers Closes gh-448 --- .../checkstyle/check/SpringHeaderCheck.java | 2 +- .../check/HeaderWithDateToPresent.txt | 1 + .../source/HeaderWithDateToPresent.java | 24 +++++++++++++++++++ .../source/HeaderWithSingleDate.java | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java index 7820d4b3..95053274 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java @@ -61,7 +61,7 @@ public class SpringHeaderCheck extends AbstractFileSetCheck { /** * The default header copyright pattern. */ - public static final String DEFAULT_HEADER_COPYRIGHT_PATTERN = "20\\d\\d(-20\\d\\d)?"; + public static final String DEFAULT_HEADER_COPYRIGHT_PATTERN = "20\\d\\d(-20\\d\\d|-present)?"; private static final String DEFAULT_CHARSET = System.getProperty("file.encoding", StandardCharsets.UTF_8.name()); diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/HeaderWithDateToPresent.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java new file mode 100644 index 00000000..5f6957b3 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithDateToPresent.java @@ -0,0 +1,24 @@ +/* + * Copyright 2019-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * The header uses NNNN-present. + * + * @author Phillip Webb + */ +public class HeaderWithDateToPresent { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java index a3045e8e..28b3eb6f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2019 the original author or authors. + * Copyright 2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 6d85b73432e42eda6bc6a916d86108b4fe85c16a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:48:00 -0700 Subject: [PATCH 118/136] Don't format `@NullMarked` and `@NullUnmarked` Fixes gh-446 --- .../src/test/resources/expected/nullable.txt | 8 ++++++++ .../src/test/resources/source/nullable.txt | 8 ++++++++ .../formatter/jdk17/eclipse/JSpecifyPreparator.java | 3 +-- .../formatter/jdk8/eclipse/JSpecifyPreparator.java | 3 +-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index b3e8f925..219786a9 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -1,6 +1,8 @@ package example; import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.NullUnmarked; /** * Nullable. @@ -26,4 +28,10 @@ public interface ExampleNullables { return args; } + @NullMarked + void withNullMarked(String str); + + @NullUnmarked + void withNullUnmarked(String str); + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index acbefead..b3458f3f 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -1,6 +1,8 @@ package example; import org.jspecify.annotations.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.NullUnmarked; /** * Nullable. @@ -24,4 +26,10 @@ public interface ExampleNullables { return args; } + @NullMarked + void withNullMarked(String str); + + @NullUnmarked + void withNullUnmarked(String str); + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 645bf75d..72bdee79 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -42,8 +42,7 @@ public class JSpecifyPreparator implements Preparator { private static final String PACKAGE_NAME = "org.jspecify.annotations"; - private static final Set ANNOTATION_NAMES = new HashSet<>( - Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set ANNOTATION_NAMES = new HashSet<>(Arrays.asList("NonNull", "Nullable")); private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() .map((annotationName) -> PACKAGE_NAME + "." + annotationName) diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index 4bc1aa0e..1a6fac06 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -42,8 +42,7 @@ public class JSpecifyPreparator implements Preparator { private static final String PACKAGE_NAME = "org.jspecify.annotations"; - private static final Set ANNOTATION_NAMES = new HashSet<>( - Arrays.asList("NonNull", "Nullable", "NullMarked", "NullUnmarked")); + private static final Set ANNOTATION_NAMES = new HashSet<>(Arrays.asList("NonNull", "Nullable")); private static final Set FULLY_QUALIFIED_ANNOTATION_NAMES = ANNOTATION_NAMES.stream() .map((annotationName) -> PACKAGE_NAME + "." + annotationName) From dc894dbab1378b485da438439b628e663dc9fb6c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:53:28 -0700 Subject: [PATCH 119/136] Support JSpecify on fields with default visibility Fixes gh-447 --- .../src/test/resources/expected/nullable.txt | 13 +++++++++++++ .../src/test/resources/source/nullable.txt | 13 +++++++++++++ .../formatter/jdk17/eclipse/JSpecifyPreparator.java | 7 +++++++ .../formatter/jdk8/eclipse/JSpecifyPreparator.java | 7 +++++++ 4 files changed, 40 insertions(+) diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt index 219786a9..aa859a6e 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/expected/nullable.txt @@ -1,5 +1,6 @@ package example; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.NullUnmarked; @@ -34,4 +35,16 @@ public interface ExampleNullables { @NullUnmarked void withNullUnmarked(String str); + static class Fields { + + @Nullable Object one; + + @NonNull Object two; + + private @Nullable Object three; + + private @NonNull Object four; + + } + } diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt index b3458f3f..45c9c0da 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/resources/source/nullable.txt @@ -1,5 +1,6 @@ package example; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.NullUnmarked; @@ -32,4 +33,16 @@ public interface ExampleNullables { @NullUnmarked void withNullUnmarked(String str); + static class Fields { + + @Nullable Object one; + + @NonNull Object two; + + private @Nullable Object three; + + private @NonNull Object four; + + } + } diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 72bdee79..31c89782 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -29,6 +29,7 @@ import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.Annotation; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.FieldDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.IExtendedModifier; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk17.core.dom.MethodDeclaration; @@ -85,6 +86,12 @@ public boolean visit(ImportDeclaration node) { return super.visit(node); } + @Override + public boolean visit(FieldDeclaration node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return super.visit(node); + } + @Override public boolean visit(MethodDeclaration node) { clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index 1a6fac06..e2615a5f 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -29,6 +29,7 @@ import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ASTVisitor; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.Annotation; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.CompilationUnit; +import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.FieldDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.IExtendedModifier; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.ImportDeclaration; import io.spring.javaformat.eclipse.jdt.jdk8.core.dom.MethodDeclaration; @@ -85,6 +86,12 @@ public boolean visit(ImportDeclaration node) { return super.visit(node); } + @Override + public boolean visit(FieldDeclaration node) { + clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); + return super.visit(node); + } + @Override public boolean visit(MethodDeclaration node) { clearLineBreaksIfHasJSpecifyAnnotation(node.modifiers()); From 38e106549f2e5f92eb228b562b6c2c51bd239ed8 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 20 Jun 2025 15:56:01 -0700 Subject: [PATCH 120/136] Update license headers Closes gh-449 --- .../src/main/java/sample/SampleApplication.java | 2 +- .../src/main/java/sample/SampleApplication.java | 2 +- .../src/io/spring/javaformat/eclipse/MessagesTests.java | 2 +- .../eclipse/projectsettings/ProjectPropertiesTests.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFileTests.java | 2 +- .../projectsettings/ProjectSettingsFilesLocatorTests.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesTests.java | 2 +- .../src/io/spring/javaformat/eclipse/Activator.java | 2 +- .../src/io/spring/javaformat/eclipse/Executor.java | 2 +- .../src/io/spring/javaformat/eclipse/Messages.java | 2 +- .../src/io/spring/javaformat/eclipse/Startup.java | 2 +- .../javaformat/eclipse/formatter/SpringCodeFormatter.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk17Spaces.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk17Tabs.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk8Spaces.java | 2 +- .../eclipse/formatter/SpringCodeFormatterJdk8Tabs.java | 2 +- .../eclipse/gradle/GradleProjectSettingsConfigurator.java | 2 +- .../eclipse/m2e/MavenProjectSettingsConfigurator.java | 2 +- .../javaformat/eclipse/projectsettings/ProjectProperties.java | 2 +- .../javaformat/eclipse/projectsettings/ProjectSettingsFile.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFiles.java | 2 +- .../eclipse/projectsettings/ProjectSettingsFilesLocator.java | 2 +- .../io/spring/javaformat/gradle/SpringJavaFormatPlugin.java | 2 +- .../java/io/spring/javaformat/gradle/tasks/CheckFormat.java | 2 +- .../src/main/java/io/spring/javaformat/gradle/tasks/Format.java | 2 +- .../java/io/spring/javaformat/gradle/tasks/FormatterTask.java | 2 +- .../test/java/io/spring/javaformat/gradle/CheckTaskTests.java | 2 +- .../test/java/io/spring/javaformat/gradle/FormatTaskTests.java | 2 +- .../java/io/spring/javaformat/gradle/testkit/GradleBuild.java | 2 +- .../spring/javaformat/gradle/testkit/GradleBuildExtension.java | 2 +- .../formatter/intellij/formatting/EclipseDocumentAdapter.java | 2 +- .../formatter/intellij/formatting/EclipseRegionAdapter.java | 2 +- .../intellij/formatting/SpringJavaFormatFormattingService.java | 2 +- .../spring/format/formatter/intellij/monitor/FileMonitor.java | 2 +- .../spring/format/formatter/intellij/monitor/GradleMonitor.java | 2 +- .../spring/format/formatter/intellij/monitor/MavenMonitor.java | 2 +- .../io/spring/format/formatter/intellij/monitor/Monitor.java | 2 +- .../io/spring/format/formatter/intellij/monitor/Monitors.java | 2 +- .../io/spring/format/formatter/intellij/monitor/Trigger.java | 2 +- .../intellij/startup/ManagedSpringJavaFormatProject.java | 2 +- .../intellij/startup/SpringJavaFormatStartupActivity.java | 2 +- .../java/io/spring/format/formatter/intellij/state/State.java | 2 +- .../io/spring/format/formatter/intellij/ui/StatusIndicator.java | 2 +- .../intellij/formatting/EclipseDocumentAdapterTests.java | 2 +- .../intellij/formatting/EclipseRegionAdapterTests.java | 2 +- .../formatting/SpringJavaFormatFormattingServiceTests.java | 2 +- .../src/main/java/io/spring/format/maven/ApplyMojo.java | 2 +- .../src/main/java/io/spring/format/maven/FormatMojo.java | 2 +- .../src/main/java/io/spring/format/maven/ValidateMojo.java | 2 +- .../src/test/java/io/spring/format/maven/VerifyApply.java | 2 +- .../java/io/spring/format/vscode/VisualStudioCodeFormatter.java | 2 +- .../io/spring/javaformat/checkstyle/FilteredModuleFactory.java | 2 +- .../main/java/io/spring/javaformat/checkstyle/SpringChecks.java | 2 +- .../spring/javaformat/checkstyle/SpringConfigurationLoader.java | 2 +- .../spring/javaformat/checkstyle/check/AbstractSpringCheck.java | 2 +- .../checkstyle/check/SpringAnnotationLocationCheck.java | 2 +- .../checkstyle/check/SpringAvoidStaticImportCheck.java | 2 +- .../io/spring/javaformat/checkstyle/check/SpringCatchCheck.java | 2 +- .../javaformat/checkstyle/check/SpringDeprecatedCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringHeaderCheck.java | 2 +- .../checkstyle/check/SpringHideUtilityClassConstructor.java | 2 +- .../javaformat/checkstyle/check/SpringImportOrderCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJUnit5Check.java | 2 +- .../spring/javaformat/checkstyle/check/SpringJavadocCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringLambdaCheck.java | 2 +- .../checkstyle/check/SpringLeadingWhitespaceCheck.java | 2 +- .../javaformat/checkstyle/check/SpringMethodOrderCheck.java | 2 +- .../checkstyle/check/SpringMethodVisibilityCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringNoThisCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringParenPadCheck.java | 2 +- .../spring/javaformat/checkstyle/check/SpringTernaryCheck.java | 2 +- .../javaformat/checkstyle/check/SpringTestFileNameCheck.java | 2 +- .../io/spring/javaformat/checkstyle/filter/CheckFilter.java | 2 +- .../spring/javaformat/checkstyle/filter/IdentCheckFilter.java | 2 +- .../javaformat/checkstyle/filter/RequiresOuterThisFilter.java | 2 +- .../spring/javaformat/checkstyle/AssertionsAuditListener.java | 2 +- .../spring/javaformat/checkstyle/SpringChecksTestParameter.java | 2 +- .../java/io/spring/javaformat/checkstyle/SpringChecksTests.java | 2 +- .../javaformat/checkstyle/SpringConfigurationLoaderTests.java | 2 +- .../src/test/resources/source/AnnotationOnNewLine.java | 2 +- .../src/test/resources/source/AsciidoctorCallout.java | 2 +- .../src/test/resources/source/AssertJBadAssertImport.java | 2 +- .../src/test/resources/source/AssertJBadAssertionsImport.java | 2 +- .../src/test/resources/source/CatchE.java | 2 +- .../src/test/resources/source/CatchEx.java | 2 +- .../src/test/resources/source/CatchOo.java | 2 +- .../src/test/resources/source/CatchWord.java | 2 +- .../src/test/resources/source/DeprecatedBadCase.java | 2 +- .../src/test/resources/source/DeprecatedValid.java | 2 +- .../src/test/resources/source/FiltersToSkipThis.java | 2 +- .../src/test/resources/source/HeaderDate.java | 2 +- .../src/test/resources/source/HeaderMismatch.java | 2 +- .../src/test/resources/source/HeaderTooLong.java | 2 +- .../src/test/resources/source/HeaderTooShort.java | 2 +- .../src/test/resources/source/HeaderWithSingleDate.java | 2 +- .../resources/source/HideUtilityClassConstructorInvalid.java | 2 +- .../source/HideUtilityClassConstructorSpringApplication.java | 2 +- .../source/HideUtilityClassConstructorSpringConfiguration.java | 2 +- .../test/resources/source/ImportOrderCustomPackageInvalid.java | 2 +- .../test/resources/source/ImportOrderCustomPackageValid.java | 2 +- .../src/test/resources/source/JUnit5BadAnnotation.java | 2 +- .../src/test/resources/source/JUnit5BadImport.java | 2 +- .../src/test/resources/source/JUnit5BadImportWithOptOut.java | 2 +- .../src/test/resources/source/JUnit5BadModifier.java | 2 +- .../src/test/resources/source/JUnit5PublicAbstractIsValid.java | 2 +- .../src/test/resources/source/JUnit5Valid.java | 2 +- .../src/test/resources/source/JavadocAuthorWithoutSpace.java | 2 +- .../src/test/resources/source/JavadocBadCase.java | 2 +- .../test/resources/source/JavadocMethodEmptyLineBeforeTag.java | 2 +- .../source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java | 2 +- .../src/test/resources/source/JavadocMissingSince.java | 2 +- .../src/test/resources/source/JavadocNonJavadocComment.java | 2 +- .../src/test/resources/source/JavadocNonPublicSince.java | 2 +- .../resources/source/JavadocNonPublicSinceInsideAnnotation.java | 2 +- .../resources/source/JavadocNonPublicSinceInsideInterface.java | 2 +- .../src/test/resources/source/JavadocSoundtrack.java | 2 +- .../src/test/resources/source/JavadocValid.java | 2 +- .../src/test/resources/source/LambdaExtraParens.java | 2 +- .../src/test/resources/source/LambdaMissingParens.java | 2 +- .../src/test/resources/source/LambdaNecessaryBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryEmptyBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryIfBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryIfElseBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryThrowBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryTryBlock.java | 2 +- .../src/test/resources/source/LambdaNecessaryVoidCallable.java | 2 +- .../src/test/resources/source/LambdaSwitch.java | 2 +- .../src/test/resources/source/LambdaUnnecessaryBlock.java | 2 +- .../src/test/resources/source/LambdaValid.java | 2 +- .../src/test/resources/source/LeadingWhitespaceSpaces.java | 2 +- .../src/test/resources/source/LeadingWhitespaceTabs.java | 2 +- .../resources/source/LeadingWhitespaceTabsAndTextBlock.java | 2 +- .../src/test/resources/source/MethodOrderInvalid.java | 2 +- .../src/test/resources/source/MethodOrderValid.java | 2 +- .../source/MethodVisibilityInnerClassesWithPublicMethod.java | 2 +- .../source/MethodVisibilityPackagePrivateWithPublicMethod.java | 2 +- .../src/test/resources/source/MethodVisibilityWithOverride.java | 2 +- .../src/test/resources/source/NestedInterfaceItems.java | 2 +- .../src/test/resources/source/NewlineAtEndOfFile.java | 2 +- .../src/test/resources/source/NoThis.java | 2 +- .../src/test/resources/source/OuterTypeFilenameInvalid.java | 2 +- .../src/test/resources/source/OuterTypeFilenameValid.java | 2 +- .../src/test/resources/source/SpringApplication.java | 2 +- .../src/test/resources/source/TernaryEqualsEquals.java | 2 +- .../src/test/resources/source/TernaryEqualsEqualsAny.java | 2 +- .../src/test/resources/source/TernaryEqualsEqualsNever.java | 2 +- .../src/test/resources/source/TernaryInArray.java | 2 +- .../src/test/resources/source/TernaryInIf.java | 2 +- .../src/test/resources/source/TernaryInWhile.java | 2 +- .../src/test/resources/source/TernaryParensAndPlus.java | 2 +- .../src/test/resources/source/TernaryParensInvalid.java | 2 +- .../src/test/resources/source/TernaryParensValid.java | 2 +- .../src/test/resources/source/TryWithResources.java | 2 +- .../src/test/resources/source/Valid.java | 2 +- .../src/test/resources/source/nopackageinfo/NoPackageInfo.java | 2 +- .../resources/source/package-info-header-must-be-missing.java | 2 +- .../resources/source/src/test/java/AnnotationEndingInTest.java | 2 +- .../resources/source/src/test/java/InterfaceEndingInTest.java | 2 +- .../src/test/resources/source/src/test/java/NamedTest.java | 2 +- .../src/test/resources/source/src/test/java/NamedTests.java | 2 +- .../io/spring/javaformat/config/DefaultJavaFormatConfig.java | 2 +- .../main/java/io/spring/javaformat/config/IndentationStyle.java | 2 +- .../src/main/java/io/spring/javaformat/config/JavaBaseline.java | 2 +- .../main/java/io/spring/javaformat/config/JavaFormatConfig.java | 2 +- .../io/spring/javaformat/config/PropertiesJavaFormatConfig.java | 2 +- .../javaformat/config/PropertiesJavaFormatConfigTests.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java | 2 +- .../java/org/eclipse/jdt/internal/formatter/Preparator.java | 2 +- .../javaformat/formatter/eclipse/rewrite/EclipseRewriter.java | 2 +- .../content/IContentTypeManager$ContentTypeChangeEvent.java | 2 +- .../content/IContentTypeManager$IContentTypeChangeListener.java | 2 +- .../javaformat/formatter/shader/PrefsResourceTransformer.java | 2 +- .../main/java/io/spring/javaformat/formatter/FormatterApp.java | 2 +- .../io/spring/javaformat/formatter/AbstractFormatterTests.java | 2 +- .../test/java/io/spring/javaformat/formatter/FileEditTests.java | 2 +- .../java/io/spring/javaformat/formatter/FileFormatterTests.java | 2 +- .../spring/javaformat/formatter/FormatterIntegrationTests.java | 2 +- .../java/io/spring/javaformat/formatter/FormatterTests.java | 2 +- .../test/java/io/spring/javaformat/formatter/JavaContainer.java | 2 +- .../java/io/spring/javaformat/formatter/StreamsEditTests.java | 2 +- .../io/spring/javaformat/formatter/StreamsFormatterTests.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/Edit.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/FileEdit.java | 2 +- .../main/java/io/spring/javaformat/formatter/FileFormatter.java | 2 +- .../io/spring/javaformat/formatter/FileFormatterException.java | 2 +- .../src/main/java/io/spring/javaformat/formatter/Formatter.java | 2 +- .../main/java/io/spring/javaformat/formatter/StreamsEdit.java | 2 +- .../java/io/spring/javaformat/formatter/StreamsFormatter.java | 2 +- .../javaformat/formatter/eclipse/EclipseCodeFormatter.java | 2 +- .../java/io/spring/javaformat/formatter/eclipse/Options.java | 2 +- .../formatter/jdk17/eclipse/CodeLineBreakPreparator.java | 2 +- .../formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java | 2 +- .../javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java | 2 +- .../formatter/jdk17/eclipse/JavadocLineBreakPreparator.java | 2 +- .../formatter/jdk8/eclipse/CodeLineBreakPreparator.java | 2 +- .../formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java | 2 +- .../javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java | 2 +- .../formatter/jdk8/eclipse/JavadocLineBreakPreparator.java | 2 +- src/checkstyle/checkstyle-header.txt | 2 +- 201 files changed, 201 insertions(+), 201 deletions(-) diff --git a/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java b/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java index a01d0bb3..480785d1 100644 --- a/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java +++ b/samples/spring-javaformat-gradle-sample/src/main/java/sample/SampleApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java b/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java index a01d0bb3..480785d1 100644 --- a/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java +++ b/samples/spring-javaformat-maven-sample/src/main/java/sample/SampleApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java index 2db40cd9..7684c764 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/MessagesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java index 3ab28f27..a8568832 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectPropertiesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java index 31bda8ff..769226b6 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFileTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java index 226e0625..26ca3380 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocatorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java index 20c06744..a5eb2ed1 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java index cfa779b0..bef6af6b 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Activator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java index c5c0ec77..7782afd3 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Executor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java index 8db3c5dc..3fc7ab01 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Messages.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java index bf20fc1a..c19e50e9 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/Startup.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java index 01d5499e..d26d70bd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java index 8680dbf8..d0682ff2 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Spaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java index b0301b2e..718e9846 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk17Tabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java index 1b78c15a..536c85ef 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Spaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java index 6381f3e4..0750be23 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/formatter/SpringCodeFormatterJdk8Tabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java index d21fe831..9ab4bb69 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/gradle/GradleProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java index 67f669d6..62e94e26 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/m2e/MavenProjectSettingsConfigurator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java index 9cb095f0..982777bd 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java index d07f1cf9..ec7ef383 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java index c7480cf6..2b40f5ae 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFiles.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java index 5062bfe9..e5d5f412 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/src/io/spring/javaformat/eclipse/projectsettings/ProjectSettingsFilesLocator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index 95e171a8..b0c48331 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java index 7e531d42..d6504edf 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/CheckFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java index d89abe61..b1f6b312 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/Format.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java index ed55a945..b99ded44 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/tasks/FormatterTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java index 16d3aa4a..3f413277 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java index ed1648cc..e3d29e16 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/FormatTaskTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java index a045feb5..1414da78 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java index d5b1cc80..bb5b8a6d 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/testkit/GradleBuildExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java index 8d874234..255a72f1 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java index 20888b55..1b1fdc9e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java index a457072f..60e40a70 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java index ac930e50..84128c15 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/FileMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java index a1e4f420..8a41e441 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/GradleMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java index 5af1f808..6ddb20e8 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/MavenMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java index ec69d85e..d0663c86 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java index 5af61007..cfe8dc4a 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Monitors.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java index 8bab9300..f1c7d223 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/monitor/Trigger.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java index 043de49c..2b87dd56 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/ManagedSpringJavaFormatProject.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java index 4d9c4a98..f11e345c 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/startup/SpringJavaFormatStartupActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java index c093671b..6d8fe7c1 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/state/State.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java index 85287af9..935b738e 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/ui/StatusIndicator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java index 11ae23e8..4fe90665 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseDocumentAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java index 873d7fec..f4c2d2a4 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/EclipseRegionAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java index c49bae99..39c24c5f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java index abfece47..3d8bdc6d 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ApplyMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java index effde959..6270b549 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/FormatMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java index 7d124eac..c9a77b81 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/main/java/io/spring/format/maven/ValidateMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java index 74899016..4338b633 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/src/test/java/io/spring/format/maven/VerifyApply.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java index 811ccc78..1c4178f5 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/src/main/java/io/spring/format/vscode/VisualStudioCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java index 3a5a9921..e595863f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/FilteredModuleFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java index c006edcb..244b7edf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringChecks.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java index 42ca7311..0be1ecc6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/SpringConfigurationLoader.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java index 347f1ed1..af4511d2 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/AbstractSpringCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java index f0fc0d5e..c697521f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationLocationCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java index 2e0de968..b9b3c3e4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAvoidStaticImportCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java index 638951c1..81d2144b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringCatchCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java index 3e56dd2d..42bf0f4b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringDeprecatedCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java index 95053274..c58e74c4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHeaderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java index 84b25ec4..882b9b9a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringHideUtilityClassConstructor.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java index 94198a8b..69f8bf31 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringImportOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java index cdd8efc4..722c8868 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJUnit5Check.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index 7fd8a0dd..d0d0844a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java index 42822761..c0f45f07 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLambdaCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java index 8e3fa83f..abeba9de 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringLeadingWhitespaceCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java index d5efe2f3..bbb088bc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodOrderCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java index ab431020..2a32b244 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java index ffeda211..1a4ee466 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoThisCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java index 9d8e271f..a49789b0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringParenPadCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java index 23c79dda..caf82d1e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTernaryCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java index 01708750..31dda6a0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringTestFileNameCheck.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java index 5e83fccf..5388e5bd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/CheckFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java index d8950d5e..6e434bcc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/IdentCheckFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java index e12e8b4f..080bf8ec 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/filter/RequiresOuterThisFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java index 5812901c..6b36f545 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/AssertionsAuditListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java index 2cad6835..62e4a959 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTestParameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java index f3d31175..0be6bdb9 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringChecksTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 33536e6b..37f9b9c4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java index 8799aae3..f4893731 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationOnNewLine.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java index 3f32c462..4f8a00ef 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AsciidoctorCallout.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java index 28d2b972..7646caff 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertImport.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java index 7d8e2fe7..5d877c52 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AssertJBadAssertionsImport.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java index aedce6b2..c1e81c66 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchE.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java index 68bb8c00..e9739ae0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchEx.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java index 9e48ba4a..1d21cda5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchOo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java index 50bc7af6..3c7d230b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/CatchWord.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java index 84292469..b806639d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedBadCase.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java index f9cf915c..e52e3ae1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/DeprecatedValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java index 82c0a957..e25b5cf8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/FiltersToSkipThis.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java index ecf31c47..2f23d85c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderDate.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java index d410278e..48e94313 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderMismatch.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this foil except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java index cdf92b18..8b8a0b85 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooLong.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java index 467a2381..0325be9e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderTooShort.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java index 28b3eb6f..11600fcd 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HeaderWithSingleDate.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 the original author or authors. + * Copyright 2019-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java index 414731c4..5a6b3543 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java index 23ee070d..ece74108 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java index 080feb69..cafe6164 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/HideUtilityClassConstructorSpringConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java index 796175c7..7aa089cf 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java index 129348fb..427075e6 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/ImportOrderCustomPackageValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java index e157a8fa..e9c41790 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java index 92d8f1ab..2870f5fb 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImport.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java index 668ca7c8..4b471be5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadImportWithOptOut.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java index 9c59c587..0e665db0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5BadModifier.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java index d56bbbd6..dee91ee2 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5PublicAbstractIsValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java index bad7023d..df921319 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JUnit5Valid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java index d96d4e66..8a421b44 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAuthorWithoutSpace.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java index 8bdca2a1..4a5df596 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocBadCase.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java index ff292fc9..dcb778a8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTag.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java index a6704c45..2d92f513 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodEmptyLineBeforeTagWithStarAtEnd.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java index 9f22ace8..c9afd407 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMissingSince.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java index 8f4b66d2..047b2a05 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonJavadocComment.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java index 58e914d3..c76a57a3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java index e05c6c89..da8c6f46 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java index a8fa5f47..edefdd29 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java index ea598898..846bf48d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocSoundtrack.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java index 21d30add..30eec4c3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java index c4f17b30..5e82a117 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaExtraParens.java @@ -1,6 +1,6 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java index 4e621d28..9ab33a37 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaMissingParens.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java index 86807333..cfb42294 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java index d1f83089..b8246fee 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryEmptyBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java index 4208b212..5468bb48 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java index 059bb564..473fa096 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryIfElseBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java index 24f4da47..61350fe8 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryThrowBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java index d2f5cde9..2c874d0d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryTryBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java index c9cab5fa..54864d72 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaNecessaryVoidCallable.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java index 59d213ac..55640621 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaSwitch.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java index b5f9b616..df215545 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaUnnecessaryBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java index 465f92c0..768488e7 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LambdaValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java index 88621291..0e69080a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceSpaces.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java index dda09ef0..53d64c19 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabs.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java index e9e27b7b..21a2311a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/LeadingWhitespaceTabsAndTextBlock.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java index 9271ba92..0db3e04c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java index 2bffbcae..b44ad87b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodOrderValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java index cf10eb76..262a258f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityInnerClassesWithPublicMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java index 75d5b080..c6377f3d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityPackagePrivateWithPublicMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java index 2be96a19..f1c9d6f4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java index d41dbaee..8f9bb820 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NestedInterfaceItems.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java index 2e80c229..436c72a4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NewlineAtEndOfFile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java index aa8fe05d..556214ab 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NoThis.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java index 0c2f80ad..59f7dc88 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java index c9ee62bc..6814ed2f 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/OuterTypeFilenameValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java index 0dd10214..d72c300b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/SpringApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java index 355cfad5..afd0926d 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEquals.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java index bc73a067..9eb48eb9 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsAny.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java index 8371a02e..3a30c31a 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryEqualsEqualsNever.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java index 1fedecbe..99c43de5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInArray.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java index c3fc5a56..6414b748 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInIf.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java index 84e14ac6..1bef3bee 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryInWhile.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java index 942b1bce..36e22af3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensAndPlus.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java index 69fc4218..cbd7ce9e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensInvalid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java index 42f842c3..f9f490ee 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TernaryParensValid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java index 473889ae..c68396dc 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/TryWithResources.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java index da4f0436..e14319f1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/Valid.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java index a6f8b3ae..5ae26280 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/nopackageinfo/NoPackageInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java index b426e3ba..039f3f05 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/package-info-header-must-be-missing.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this foil except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java index 7579aac2..cdc31f8c 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/AnnotationEndingInTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java index b2aad5f9..d79b6453 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/InterfaceEndingInTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java index a8da0363..a042f613 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java index aa494a65..423428e5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/src/test/java/NamedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java index 60f615ff..d2b5ee8c 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/DefaultJavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java index 7477b099..f6e2144d 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/IndentationStyle.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java index 492f068c..a27c3df0 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaBaseline.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java index 89d19b78..23bf45c8 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/JavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java index 23d87a59..d631312d 100644 --- a/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java +++ b/spring-javaformat/spring-javaformat-config/src/main/java/io/spring/javaformat/config/PropertiesJavaFormatConfig.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java index 4fc21f26..2c702617 100644 --- a/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java +++ b/spring-javaformat/spring-javaformat-config/src/test/java/io/spring/javaformat/config/PropertiesJavaFormatConfigTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index 46e0f01d..a2664b72 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index df66cda6..bfd16b37 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java index 60b0e6e1..a2664b72 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/ExtendedCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java index df66cda6..bfd16b37 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/src/main/java/org/eclipse/jdt/internal/formatter/Preparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java index e7ccea52..7053dc0c 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/src/main/java/io/spring/javaformat/formatter/eclipse/rewrite/EclipseRewriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java index 913abdea..78e9cd52 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$ContentTypeChangeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java index 52462f79..6458ef5a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/src/main/java/org/eclipse/core/runtime/content/IContentTypeManager$IContentTypeChangeListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java b/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java index 47ba9843..09882163 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java +++ b/spring-javaformat/spring-javaformat-formatter-shader/src/main/java/io/spring/javaformat/formatter/shader/PrefsResourceTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java b/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java index 9adaacc6..ca679983 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java +++ b/spring-javaformat/spring-javaformat-formatter-test-support/src/main/java/io/spring/javaformat/formatter/FormatterApp.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java index f2bebe0a..1af21b70 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/AbstractFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java index 79570f7d..015b9eb7 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java index 5c43641b..f9d14f7c 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FileFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java index 4639a550..383b07cd 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java index d6af9c71..cc1c8b50 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/FormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java index 9eacfbc6..8f847bbb 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/JavaContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java index be73afcc..b054f57d 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsEditTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java index 34477c47..388c123c 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java +++ b/spring-javaformat/spring-javaformat-formatter-tests/src/test/java/io/spring/javaformat/formatter/StreamsFormatterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java index ee14ed94..8e6a9c4d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Edit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java index a0fe488e..457fcc7c 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileEdit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java index 7f6fbf34..49b05234 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java index 09f17a5d..2d054698 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/FileFormatterException.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java index dd87b20c..ed6169c4 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/Formatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java index 168d40b6..7263a5e6 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsEdit.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java index 289577a4..fb8257d7 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/StreamsFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java index 4f17a95a..121ddc4a 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/EclipseCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2021 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java index 37f4faa9..b80c0346 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/eclipse/Options.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java index 51c98b52..3f5a7337 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java index b902e3f3..a7530156 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/EclipseJdk17CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java index 31c89782..2f9b8aeb 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JSpecifyPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java index b66efa27..28b369c7 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk17/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java index df26a623..2cb2ef68 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/CodeLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java index fa365db4..9887ccb2 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/EclipseJdk8CodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java index e2615a5f..89397c6d 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JSpecifyPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2025 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java index 3a4a5f41..a5b8a035 100644 --- a/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java +++ b/spring-javaformat/spring-javaformat-formatter/src/main/java/io/spring/javaformat/formatter/jdk8/eclipse/JavadocLineBreakPreparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2024 the original author or authors. + * Copyright 2017-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/checkstyle/checkstyle-header.txt b/src/checkstyle/checkstyle-header.txt index 39429ee6..7e182ab3 100644 --- a/src/checkstyle/checkstyle-header.txt +++ b/src/checkstyle/checkstyle-header.txt @@ -1,5 +1,5 @@ ^\Q/*\E$ -^\Q * Copyright \E20\d\d\-20\d\d\Q the original author or authors.\E$ +^\Q * Copyright \E20\d\d\-present\Q the original author or authors.\E$ ^\Q *\E$ ^\Q * Licensed under the Apache License, Version 2.0 (the "License");\E$ ^\Q * you may not use this file except in compliance with the License.\E$ From cdcd8fcce92c5230881a9d354fd8d02b8657c79e Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Mon, 19 May 2025 11:55:42 +0300 Subject: [PATCH 121/136] Fix UnsupportedOperationException with IDEA 'scratch file' See gh-441 Signed-off-by: Dmytro Nosan --- .../SpringJavaFormatFormattingService.java | 2 +- ...pringJavaFormatFormattingServiceTests.java | 52 +++++++++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java index 60e40a70..70bb51e9 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java @@ -78,7 +78,7 @@ public boolean canFormat(@NotNull PsiFile file) { public void formatDocument(@NotNull Document document, @NotNull List formattingRanges, @NotNull FormattingContext formattingContext, boolean canChangeWhiteSpaceOnly, boolean quickFormat) { VirtualFile file = formattingContext.getVirtualFile(); - Path path = (file != null) ? file.toNioPath() : null; + Path path = (file != null) ? file.getFileSystem().getNioPath(file) : null; JavaFormatConfig config = JavaFormatConfig.findFrom(path); Formatter formatter = new Formatter(config); String source = document.getText(); diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java index 39c24c5f..6524e10d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java @@ -16,6 +16,8 @@ package io.spring.format.formatter.intellij.formatting; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Collections; import com.intellij.formatting.FormattingContext; @@ -25,16 +27,21 @@ import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.local.CoreLocalFileSystem; +import com.intellij.openapi.vfs.local.CoreLocalVirtualFile; import com.intellij.psi.PsiFile; +import com.intellij.testFramework.LightVirtualFile; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import io.spring.format.formatter.intellij.state.State; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willAnswer; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; /** * Tests for {@link SpringJavaFormatFormattingService}. @@ -72,14 +79,49 @@ void canFormatWhenJavaFileAndActiveReturnsTrue() { assertThat(this.service.canFormat(file)).isTrue(); } + @Test + void formatDocumentAppliesFormatting(@TempDir Path projectDir) throws Exception { + Files.writeString(projectDir.resolve(".springjavaformatconfig"), "indentation-style=spaces"); + Document document = mockDocument("public class Hello{" + + "\tpublic void hello() {" + + "\tString value =\t\"Hello World\";}}"); + FormattingContext formattingContext = mock(FormattingContext.class); + VirtualFile virtualFile = new CoreLocalVirtualFile(new CoreLocalFileSystem(), projectDir.resolve("Hello.java")); + given(formattingContext.getVirtualFile()).willReturn(virtualFile); + this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false); + assertThat(document.getText()).isEqualTo("public class Hello {\n\n" + + " public void hello() {\n" + + " String value = \"Hello World\";\n" + + " }\n\n" + + "}"); + } + @Test void formatDocumentAppliesFormatting() { - Document document = mock(Document.class); - String text = "public class Hello {}"; - given(document.getText()).willReturn(text); + Document document = mockDocument("public class Hello{" + + "\tpublic void hello() {" + + "\tString value =\t\"Hello World\";}}"); FormattingContext formattingContext = mock(FormattingContext.class); + VirtualFile virtualFile = new LightVirtualFile("Hello.java", document.getText()); + given(formattingContext.getVirtualFile()).willReturn(virtualFile); this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false); - verify(document).replaceString(20, 20, "\n\n"); + assertThat(document.getText()).isEqualTo("public class Hello {\n\n" + + "\tpublic void hello() {\n" + + "\t\tString value = \"Hello World\";\n" + + "\t}\n\n" + + "}"); + } + + + private Document mockDocument(String text) { + Document document = mock(Document.class); + StringBuilder documentText = new StringBuilder(text); + willAnswer((invocation) -> { + documentText.replace(invocation.getArgument(0), invocation.getArgument(1), invocation.getArgument(2)); + return null; + }).given(document).replaceString(any(Integer.class), any(Integer.class), any(CharSequence.class)); + given(document.getText()).willAnswer((invocation) -> documentText.toString()); + return document; } private PsiFile mockFile(FileType fileType, State state) { From 77dc2f6d4da4e3640d33f3fdead3d76a5ca172ec Mon Sep 17 00:00:00 2001 From: Spring Builds Date: Fri, 20 Jun 2025 23:29:51 +0000 Subject: [PATCH 122/136] Next development version (v0.0.48-SNAPSHOT) --- README.adoc | 2 +- pom.xml | 2 +- samples/spring-javaformat-gradle-sample/build.gradle | 4 ++-- samples/spring-javaformat-maven-sample/pom.xml | 2 +- .../io.spring.javaformat.eclipse.feature/feature.xml | 4 ++-- .../io.spring.javaformat.eclipse.feature/pom.xml | 2 +- .../io.spring.javaformat.eclipse.site/category.xml | 2 +- .../io.spring.javaformat.eclipse.product | 2 +- .../io.spring.javaformat.eclipse.site/pom.xml | 2 +- .../io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse.tests/pom.xml | 2 +- .../io.spring.javaformat.eclipse/META-INF/MANIFEST.MF | 2 +- .../io.spring.javaformat.eclipse/pom.xml | 2 +- spring-javaformat-eclipse/pom.xml | 2 +- .../io.spring.javaformat.gradle.plugin/pom.xml | 2 +- spring-javaformat-gradle/pom.xml | 2 +- .../spring-javaformat-gradle-plugin/pom.xml | 2 +- spring-javaformat-intellij-idea/pom.xml | 2 +- .../spring-javaformat-intellij-idea-plugin/pom.xml | 2 +- .../spring-javaformat-intellij-idea-runtime/pom.xml | 2 +- spring-javaformat-maven/pom.xml | 2 +- .../spring-javaformat-maven-plugin/pom.xml | 2 +- spring-javaformat-vscode/pom.xml | 2 +- .../spring-javaformat-vscode-extension/package-lock.json | 4 ++-- .../spring-javaformat-vscode-extension/package.json | 2 +- .../spring-javaformat-vscode-extension/pom.xml | 2 +- spring-javaformat/pom.xml | 2 +- spring-javaformat/spring-javaformat-checkstyle/pom.xml | 2 +- spring-javaformat/spring-javaformat-config/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk17/pom.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../spring-javaformat-formatter-eclipse-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-rewriter/pom.xml | 2 +- .../spring-javaformat-formatter-eclipse-runtime/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shaded/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-shader/pom.xml | 2 +- .../spring-javaformat-formatter-test-support/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter-tests/pom.xml | 2 +- spring-javaformat/spring-javaformat-formatter/pom.xml | 2 +- 42 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.adoc b/README.adoc index bf0a6e1c..3894a5ea 100644 --- a/README.adoc +++ b/README.adoc @@ -1,4 +1,4 @@ -:release-version: 0.0.46 +:release-version: 0.0.47 :checkstyle-version: 9.3 == Spring Java Format diff --git a/pom.xml b/pom.xml index 99e69cc7..57d056c6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT pom Spring JavaFormat Build Spring JavaFormat diff --git a/samples/spring-javaformat-gradle-sample/build.gradle b/samples/spring-javaformat-gradle-sample/build.gradle index 9e1f5c9a..3fa4c986 100644 --- a/samples/spring-javaformat-gradle-sample/build.gradle +++ b/samples/spring-javaformat-gradle-sample/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.47-SNAPSHOT") + classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.48-SNAPSHOT") } } @@ -25,5 +25,5 @@ checkstyle { } dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.47-SNAPSHOT") + checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.48-SNAPSHOT") } diff --git a/samples/spring-javaformat-maven-sample/pom.xml b/samples/spring-javaformat-maven-sample/pom.xml index 9eb60913..9354db42 100644 --- a/samples/spring-javaformat-maven-sample/pom.xml +++ b/samples/spring-javaformat-maven-sample/pom.xml @@ -8,7 +8,7 @@ 0.0.1-SNAPSHOT UTF-8 - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml index aebcd72d..5204ad42 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/feature.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ id="io.spring.javaformat.eclipse" download-size="0" install-size="0" - version="0.0.47.qualifier" + version="0.0.48.qualifier" unpack="false"/> diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml index 7b4a2a51..7b294c42 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.feature/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse.feature eclipse-feature diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml index cc2c89a7..325568f3 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/category.xml @@ -3,7 +3,7 @@ Maven Integration for Eclipse (maven-eclipse-plugin support) - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product index 20f32d4b..4fc99abc 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/io.spring.javaformat.eclipse.product @@ -1,7 +1,7 @@ - + diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml index 982bb285..5d4e2f97 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.site/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse.site eclipse-repository diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF index d9e188f3..650cb7b0 100755 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Tests Bundle-SymbolicName: io.spring.javaformat.eclipse.tests Automatic-Module-Name: io.spring.javaformat.eclipse.tests -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-ClassPath: ., lib/assertj-core.jar, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml index 99fa280e..532aefb8 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse.tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse.tests eclipse-test-plugin diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF index 12cac3a6..2e0f34c4 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Spring Java Format Plugin Bundle-SymbolicName: io.spring.javaformat.eclipse;singleton:=true Automatic-Module-Name: io.spring.javaformat.eclipse -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Bundle-Activator: io.spring.javaformat.eclipse.Activator Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: org.eclipse.ui, diff --git a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml index 72042fa1..3ccfe109 100644 --- a/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml +++ b/spring-javaformat-eclipse/io.spring.javaformat.eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-eclipse - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat.eclipse eclipse-plugin diff --git a/spring-javaformat-eclipse/pom.xml b/spring-javaformat-eclipse/pom.xml index 3590c925..7bed9c79 100644 --- a/spring-javaformat-eclipse/pom.xml +++ b/spring-javaformat-eclipse/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-eclipse pom diff --git a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml index be5f1d3e..1c2e0383 100644 --- a/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml +++ b/spring-javaformat-gradle/io.spring.javaformat.gradle.plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT io.spring.javaformat io.spring.javaformat.gradle.plugin diff --git a/spring-javaformat-gradle/pom.xml b/spring-javaformat-gradle/pom.xml index c13954a9..681a1645 100644 --- a/spring-javaformat-gradle/pom.xml +++ b/spring-javaformat-gradle/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-gradle pom diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index 5a6de1f3..ee8098c1 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-gradle - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-gradle-plugin pom diff --git a/spring-javaformat-intellij-idea/pom.xml b/spring-javaformat-intellij-idea/pom.xml index 4d8c434c..9de7cec6 100644 --- a/spring-javaformat-intellij-idea/pom.xml +++ b/spring-javaformat-intellij-idea/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-intellij-idea pom diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml index 611a99fe..7915af9f 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-intellij-idea-plugin Spring JavaFormat IntelliJ IDEA Plugin diff --git a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml index dc437a12..b6202b0d 100644 --- a/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml +++ b/spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-intellij-idea - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-intellij-idea-runtime pom diff --git a/spring-javaformat-maven/pom.xml b/spring-javaformat-maven/pom.xml index a14e54eb..61cb5d27 100644 --- a/spring-javaformat-maven/pom.xml +++ b/spring-javaformat-maven/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-maven pom diff --git a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml index 88294ec8..af8474d3 100644 --- a/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml +++ b/spring-javaformat-maven/spring-javaformat-maven-plugin/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-maven - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-maven-plugin maven-plugin diff --git a/spring-javaformat-vscode/pom.xml b/spring-javaformat-vscode/pom.xml index c217c403..f42bc4bb 100644 --- a/spring-javaformat-vscode/pom.xml +++ b/spring-javaformat-vscode/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-vscode pom diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json index 5ea30c21..5da1cec7 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "spring-javaformat-vscode-extension", - "version": "0.0.47-SNAPSHOT", + "version": "0.0.48-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spring-javaformat-vscode-extension", - "version": "0.0.47-SNAPSHOT", + "version": "0.0.48-SNAPSHOT", "devDependencies": { "@types/glob": "^8.0.1", "@types/mocha": "^10.0.1", diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json index 63e3b775..c10d286e 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/package.json @@ -2,7 +2,7 @@ "name": "spring-javaformat-vscode-extension", "description": "Spring JavaFormat Visual Studio Code Extension", "displayName": "Spring JavaFormat", - "version": "0.0.47-SNAPSHOT", + "version": "0.0.48-SNAPSHOT", "publisher": "io.spring.javaformat", "engines": { "vscode": "^1.75.0" diff --git a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml index 3c439b79..7891d15d 100644 --- a/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml +++ b/spring-javaformat-vscode/spring-javaformat-vscode-extension/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat-vscode - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-vscode-extension Spring JavaFormat Visual Studio Code Extension diff --git a/spring-javaformat/pom.xml b/spring-javaformat/pom.xml index 7c086cc7..849cefc1 100644 --- a/spring-javaformat/pom.xml +++ b/spring-javaformat/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat-build - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat pom diff --git a/spring-javaformat/spring-javaformat-checkstyle/pom.xml b/spring-javaformat/spring-javaformat-checkstyle/pom.xml index 7d74f0cc..5605577e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/pom.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-checkstyle Spring JavaFormat CheckStyle diff --git a/spring-javaformat/spring-javaformat-config/pom.xml b/spring-javaformat/spring-javaformat-config/pom.xml index 72fe7b7b..e984a073 100644 --- a/spring-javaformat/spring-javaformat-config/pom.xml +++ b/spring-javaformat/spring-javaformat-config/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-config Spring JavaFormat Config diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF index f3b70674..5e2e9099 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse Runtime JDK17 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk17 -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml index cd3752e1..0e73c0e4 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdk17 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF index 652b5065..3c5dbb8b 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Spring Formatter Eclipse JDK8 Bundle-SymbolicName: spring-javaformat-formatter-eclipse-jdk8 -Bundle-Version: 0.0.47.qualifier +Bundle-Version: 0.0.48.qualifier Require-Bundle: org.eclipse.jdt.core;bundle-version="[1.0.0,10.0.0)", org.eclipse.jface;bundle-version="[1.0.0,10.0.0)", org.eclipse.jdt.core.source;bundle-version="[1.0.0,10.0.0)";resolution:=optional, diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml index f22c974e..0e52bf06 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdk8 eclipse-plugin diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml index 8621592f..9aef9a9a 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk17/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk17 Spring JavaFormat Eclipse JDT JDK-17 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml index 0689734b..30a2af39 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-jdt-jdk8/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-jdt-jdk8 Spring JavaFormat Eclipse JDT JDK-8 diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml index 306b6166..9be11ea0 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-rewriter/pom.xml @@ -5,7 +5,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-rewriter Spring JavaFormat Eclipse Rewriter diff --git a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml index 73007642..dab30621 100644 --- a/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-eclipse-runtime/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-eclipse-runtime Spring JavaFormat Eclipse Runtime diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 5476a0c9..6aeff1c4 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-shaded Spring JavaFormat Formatter Shaded diff --git a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml index 0648a5b4..a07cf239 100644 --- a/spring-javaformat/spring-javaformat-formatter-shader/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shader/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-shader Spring JavaFormat Formatter Shader diff --git a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml index e34149fe..1f72a67a 100644 --- a/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-test-support/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-test-support Spring JavaFormat Formatter Test Support diff --git a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml index ce9bf2a2..30ea6a7e 100644 --- a/spring-javaformat/spring-javaformat-formatter-tests/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-tests/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter-tests Spring JavaFormat Formatter Tests diff --git a/spring-javaformat/spring-javaformat-formatter/pom.xml b/spring-javaformat/spring-javaformat-formatter/pom.xml index 24b89552..d4642459 100644 --- a/spring-javaformat/spring-javaformat-formatter/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter/pom.xml @@ -6,7 +6,7 @@ io.spring.javaformat spring-javaformat - 0.0.47-SNAPSHOT + 0.0.48-SNAPSHOT spring-javaformat-formatter Spring JavaFormat Formatter From aa7536f21db419f734682a0931d707d4b7f89ffd Mon Sep 17 00:00:00 2001 From: Stefano Cordio Date: Sat, 21 Jun 2025 19:25:22 +0200 Subject: [PATCH 123/136] Polish README Signed-off-by: Stefano Cordio See gh-450 --- README.adoc | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.adoc b/README.adoc index 3894a5ea..e3d7786f 100644 --- a/README.adoc +++ b/README.adoc @@ -81,8 +81,8 @@ If you want to skip both, you can use `-Dspring-javaformat.skip=true`. -=== Checkstyle -To enforce checksyle conventions add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +==== Checkstyle +To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,xml,indent=0,subs="normal"] ---- @@ -149,7 +149,7 @@ For source formatting, add the `spring-javaformat-gradle-plugin` to your `build` The plugin adds `format` and `checkFormat` tasks to your project. The `checkFormat` task is automatically applied when running the standard Gradle `check` task. -In case you want to exclude a package from being checked, for example if you generate sources, you can do this by adding following configuration: +In case you want to exclude a package from being checked, for example if you generate sources, you can do this by adding the following configuration: [source,groovy,indent=0,subs="normal"] ---- @@ -161,7 +161,7 @@ tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { ==== Checkstyle -To enforce checksyle conventions add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,groovy,indent=0,subs="normal"] ---- @@ -208,9 +208,9 @@ java-baseline=8 The Eclipse plugin provides a custom formatter implementation and automatically applies project specific settings. The plugin is automatically activated whenever the Maven or Gradle plugins are discovered in a project build script. -If you need to customize the project specific settings that the plugin applies you should add a `.eclipse` folder in the root of your project. +If you need to customize the project specific settings that the plugin applies, you should add a `.eclipse` folder in the root of your project. All `.prefs` files from this folder will be copied to the project `.settings` folders. -Usually you'll provide your own `org.eclipse.jdt.core.prefs` and `org.eclipse.jdt.ui.prefs` files. +Usually, you'll provide your own `org.eclipse.jdt.core.prefs` and `org.eclipse.jdt.ui.prefs` files. You can also add a `.eclipse/eclipse.properties` file to customize the following items: @@ -232,7 +232,7 @@ The plugin is automatically activated whenever the Maven or Gradle plugins are d A Spring Java Format icon (image:spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/resources/spring-javaformat/formatOn.png[title="Icon"]) will also be displayed in the status bar to indicate the formatter is active. You can use the standard `code` -> `reformat code` action to format the code. -To install the plugin use the `spring-javaformat-intellij-idea-plugin` jar file. +To install the plugin, use the `spring-javaformat-intellij-idea-plugin` jar file. You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/{release-version}[Maven Central]. @@ -275,24 +275,24 @@ Once the configuration file is created, configure your IDE to use it: === Visual Studio Code The Visual Studio Code extension provides custom formatter support for Microsoft Visual Studio Code. -The extension using the https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider[`DocumentFormattingEditProvider`] API. +The extension uses the https://code.visualstudio.com/api/references/vscode-api#DocumentFormattingEditProvider[`DocumentFormattingEditProvider`] API. Once installed it may be activated by using the "`Format Document`" action available in the editor context menu or from the Command Palette. -To install the extension select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. +To install the extension, select "`Install from VSIX`" in the extensions panel and choose the `spring-javaformat-vscode-extension` vsix file. You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-vscode-extension/{release-version}[Maven Central]. === About the Conventions -Most of the coding conventions and style comes from the Spring Framework and Spring Boot projects. -Spring Framework manually formats code, where as Spring Boot uses automatic formatting. +Most of the coding conventions and style come from the Spring Framework and Spring Boot projects. +Spring Framework manually formats code, whereas Spring Boot uses automatic formatting. === Indenting With Spaces -By default tabs are used for indenting formatted code. +By default, tabs are used for indenting formatted code. We strongly recommend that this default is not changed, especially for official Spring projects. -If, however, you feel that you can't live with tabs then switching to spaces is the one configuration option that we do support. +If, however, you feel that you can't live with tabs, then switching to spaces is the one configuration option that we do support. To use spaces rather than tabs, add a file called `.springjavaformatconfig` to the root of your project with the following content: @@ -331,7 +331,7 @@ If you want most `SpringChecks` but need to exclude one or two, you can do somet Some code isn't particularly amenable to automatic formatting. For example, Spring Security configurations often work better when manually formatted. -If you need to disable formatting for a specific block of code you can enclose it in a `@formatter:off` / `@formatter:on` set: +If you need to disable formatting for a specific block of code, you can enclose it in a `@formatter:off` / `@formatter:on` set: [source,java] ---- @@ -350,8 +350,8 @@ making use of available horizontal space in your IDE and avoiding unwanted addit wrapping when viewing code on GitHub and the like. If you're used to longer lines, 120 chars can take some getting used to. Specifically, if -you have many nesting levels things can start to look quite bad. Generally, if you see -code bunched up to the right of your screen you should take that as a signal to use the +you have many nesting levels, things can start to look quite bad. Generally, if you see +code bunched up to the right of your screen, you should take that as a signal to use the "`extract method`" refactor. Extracting small private methods will improve formatting and it helps when reading the code and debugging. @@ -359,8 +359,8 @@ it helps when reading the code and debugging. ==== Whitespace Keeping whitespace lines out of method bodies can help make the code easier to scan. -If blank lines are only included between methods it becomes easier to see the overall structure of the class. -If you find you need whitespace inside your method, consider if extracting a private method might give a better result. +If blank lines are only included between methods, it becomes easier to see the overall structure of the class. +If you find you need whitespace inside your method, consider whether extracting a private method might give a better result. @@ -375,18 +375,18 @@ They will also ensure that `@author` tags are well formed. ==== Final Private members should be `final` whenever possible. -Local variable and parameters should generally not be explicitly declared as final since it adds so much noise. +Local variables and parameters should generally not be explicitly declared as final since it adds so much noise. ==== Read-down Methods, Fields and Parameters Methods don't need to be organized by scope. There's no need to group all `private`, `protected` and `public` methods together. -Instead try to make your code easy to read when scanning the file from top to bottom. -In other words, try to have methods only reference method further down in the file. +Instead, try to make your code easy to read when scanning the file from top to bottom. +In other words, try to have methods only reference methods further down in the file. Keep private methods as close to the thing that calls them as possible. -It's also recommend that you try to keep consistent ordering with fields and constructor parameters. +It's also recommended that you try to keep consistent ordering with fields and constructor parameters. For example: [source,java,indent=0,subs="normal"] From 87cb6dbb415d5c336afcc1889f29d37fa86cb6ce Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 23 Jun 2025 09:03:08 +0100 Subject: [PATCH 124/136] Polish "Polish README" See gh-450 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index e3d7786f..6c7e7510 100644 --- a/README.adoc +++ b/README.adoc @@ -292,7 +292,7 @@ Spring Framework manually formats code, whereas Spring Boot uses automatic forma === Indenting With Spaces By default, tabs are used for indenting formatted code. We strongly recommend that this default is not changed, especially for official Spring projects. -If, however, you feel that you can't live with tabs, then switching to spaces is the one configuration option that we do support. +If, however, you feel that you can't live with tabs, switching to spaces is the one configuration option that we do support. To use spaces rather than tabs, add a file called `.springjavaformatconfig` to the root of your project with the following content: From 048828049753e6079c6f6cad5a67d3a4537c947f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 8 Jul 2025 13:56:12 +0100 Subject: [PATCH 125/136] Check that annotation attribute values are concise When the value of an annotation's attribute references something defined by an inner type of the annotation, the inner type should be imported and referenced directly rather than through the containing type. Consider the following: @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) The repetition of SpringBootTest in both the annotation itself and the value of one of its attributes is overly verbose. Instead, we prefer to import WebEnvironment and refer to it directly: @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) This commit adds a check that enforces the style described above. In the event of there being an existing import for a different WebEnvironment type, no error will be reported as the more verbose style is necessary to avoid referencing the wrong WebEnvironment. Closes gh-452 --- ...gAnnotationAttributeConciseValueCheck.java | 151 ++++++++++++++++++ .../checkstyle/check/messages.properties | 1 + .../checkstyle/spring-checkstyle.xml | 1 + .../SpringConfigurationLoaderTests.java | 4 +- ...asConciseReferenceToContainedEnumValue.txt | 1 + ...lueThatHasReferenceToContainedConstant.txt | 1 + ...asVerboseReferenceToContainedEnumValue.txt | 2 + ...asConciseReferenceToContainedEnumValue.txt | 1 + ...lyVerboseReferenceToContainedEnumValue.txt | 1 + ...lueThatHasReferenceToContainedConstant.txt | 1 + ...asVerboseReferenceToContainedEnumValue.txt | 2 + ...sConciseReferenceToContainedEnumValue.java | 20 +++ ...ueThatHasReferenceToContainedConstant.java | 20 +++ ...sVerboseReferenceToContainedEnumValue.java | 20 +++ ...sConciseReferenceToContainedEnumValue.java | 20 +++ ...yVerboseReferenceToContainedEnumValue.java | 24 +++ ...ueThatHasReferenceToContainedConstant.java | 20 +++ ...sVerboseReferenceToContainedEnumValue.java | 20 +++ 18 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java new file mode 100644 index 00000000..703d9919 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java @@ -0,0 +1,151 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.checkstyle.check; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.puppycrawl.tools.checkstyle.api.AbstractCheck; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +/** + * Spring-specific check of the concision of an annotation's attribute values. + * + * @author Andy Wilkinson + */ +public class SpringAnnotationAttributeConciseValueCheck extends AbstractCheck { + + private final List imports = new ArrayList<>(); + + @Override + public int[] getDefaultTokens() { + return getRequiredTokens(); + } + + @Override + public int[] getAcceptableTokens() { + return getRequiredTokens(); + } + + @Override + public int[] getRequiredTokens() { + return new int[] { TokenTypes.ANNOTATION, TokenTypes.IMPORT }; + } + + @Override + public void init() { + this.imports.clear(); + } + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() == TokenTypes.IMPORT) { + visitImport(ast); + } + else if (ast.getType() == TokenTypes.ANNOTATION) { + visitAnnotation(ast); + } + } + + private void visitImport(DetailAST importNode) { + List components = dotSeparatedComponents(importNode.getFirstChild()); + if (components != null) { + this.imports.add(new ImportStatement(components)); + } + } + + private void visitAnnotation(DetailAST annotation) { + int valuePairCount = annotation.getChildCount(TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR); + if (valuePairCount == 0) { + DetailAST valueExpression = annotation.findFirstToken(TokenTypes.EXPR); + visitValueExpression(valueExpression, annotation, "value"); + } + else { + DetailAST candidate = annotation.getFirstChild(); + while (candidate != null) { + if (candidate.getType() == TokenTypes.ANNOTATION_MEMBER_VALUE_PAIR) { + visitMemberValuePair(candidate); + } + candidate = candidate.getNextSibling(); + } + } + } + + private void visitMemberValuePair(DetailAST annotationValue) { + DetailAST annotation = annotationValue.getParent(); + DetailAST attribute = annotationValue.findFirstToken(TokenTypes.IDENT); + DetailAST valueExpression = annotationValue.findFirstToken(TokenTypes.EXPR); + visitValueExpression(valueExpression, annotation, attribute.getText()); + } + + private void visitValueExpression(DetailAST valueExpression, DetailAST annotation, String attributeName) { + if (valueExpression != null && valueExpression.getChildCount() == 1) { + List expressionComponents = dotSeparatedComponents(valueExpression.getFirstChild()); + if (expressionComponents != null && expressionComponents.size() > 2) { + String outerTypeName = expressionComponents.get(0); + String annotationName = annotation.findFirstToken(TokenTypes.IDENT).getText(); + if (outerTypeName.equals(annotationName)) { + String innerTypeName = expressionComponents.get(1); + if (!existingClashingImport(outerTypeName, innerTypeName)) { + String toImport = outerTypeName + "." + innerTypeName; + String replacement = String.join(".", expressionComponents.subList(1, expressionComponents.size())); + log(valueExpression.getLineNo(), valueExpression.getColumnNo(), + "annotation.attribute.overlyVerboseValue", attributeName, toImport, replacement); + } + } + } + } + } + + private List dotSeparatedComponents(DetailAST ast) { + if (ast.getType() == TokenTypes.IDENT) { + return Collections.singletonList(ast.getText()); + } + if (ast.getType() == TokenTypes.DOT) { + List left = dotSeparatedComponents(ast.getFirstChild()); + List right = dotSeparatedComponents(ast.getLastChild()); + if (left != null && right != null) { + List components = new ArrayList<>(); + components.addAll(left); + components.addAll(right); + return components; + } + } + return null; + } + + private boolean existingClashingImport(String outer, String inner) { + return this.imports.stream().filter((imported) -> imported.clashesWith(outer, inner)).findFirst().isPresent(); + } + + static class ImportStatement { + + private final String imported; + + ImportStatement(List components) { + this.imported = String.join(".", components); + } + + boolean clashesWith(String outer, String inner) { + return this.imported.endsWith("." + inner) && !this.imported.endsWith("." + outer + "." + inner); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index cdea619e..4c865ff0 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -1,3 +1,4 @@ +annotation.attribute.overlyVerboseValue=Value of ''{0}'' attribute is overly verbose. Import ''{1}'' and use ''{2}'' instead. annotation.location=Annotation ''{0}'' have incorrect indentation level {1}, expected level should be {2}. annotation.location.alone=Annotation ''{0}'' should be alone on line. catch.singleLetter=Single letter catch variable (use "ex" instead). diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 4da52558..7fc6d02e 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -25,6 +25,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index 37f9b9c4..e1e60608 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -50,7 +50,7 @@ public void loadShouldLoadChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(61); + assertThat(ordinaryChecks).hasSize(62); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(6); } @@ -64,7 +64,7 @@ public void loadWithExcludeShouldExcludeChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(60); + assertThat(ordinaryChecks).hasSize(61); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(5); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..17a91c25 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt @@ -0,0 +1,2 @@ ++AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java:17:84: Value of 'value' attribute is overly verbose. Import 'ConditionalOnWebApplicationType.WebApplicationType' and use 'WebApplicationType.SERVLET' instead. [SpringAnnotationAttributeConciseValue] ++1 error \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..2c02256f --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.txt @@ -0,0 +1,2 @@ ++AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java:17:91: Value of 'type' attribute is overly verbose. Import 'ConditionalOnWebApplicationType.WebApplicationType' and use 'WebApplicationType.SERVLET' instead. [SpringAnnotationAttributeConciseValue] ++1 error \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..d7ea8e09 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@ConditionalOnWebApplicationType(WebApplicationType.A.B.C.D.SERVLET) +public class AnnotationAttributeWithValueThatHasConciseReferenceToContainedEnumValue { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java new file mode 100644 index 00000000..edc98fb7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasReferenceToContainedConstant.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@ConditionalOnSomething(ConditionalOnSomething.TYPE_ONE) +public class AnnotationAttributeWithValueThatHasReferenceToContainedConstant { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..8594fc9b --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@ConditionalOnWebApplicationType(ConditionalOnWebApplicationType.WebApplicationType.SERVLET) +public class AnnotationAttributeWithValueThatHasVerboseReferenceToContainedEnumValue { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..ea1a39cd --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@ConditionalOnWebApplicationType(type = WebApplicationType.A.B.C.D.SERVLET) +public class AnnotationNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..12557326 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue.java @@ -0,0 +1,24 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 com.example.some.other.WebApplicationType; + +@ConditionalOnWebApplicationType(type = ConditionalOnWebApplicationType.WebApplicationType.SERVLET) +public class AnnotationNamedAttributeWithValueThatHasNecessarilyVerboseReferenceToContainedEnumValue { + + WebApplicationType type; + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java new file mode 100644 index 00000000..44d6eb5a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@ConditionalOnSomething(type = ConditionalOnSomething.TYPE_ONE) +public class AnnotationNamedAttributeWithValueThatHasReferenceToContainedConstant { + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..c652976e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@ConditionalOnWebApplicationType(type = ConditionalOnWebApplicationType.WebApplicationType.SERVLET) +public class AnnotationNamedAttributeWithValueThatHasVerboseReferenceToContainedEnumValue { + +} From 2ba40a67587cd8b50574907279880510f6b272a8 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 9 Jul 2025 10:47:52 +0100 Subject: [PATCH 126/136] Modernize Gradle instructions in the README --- README.adoc | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/README.adoc b/README.adoc index 6c7e7510..e472cb07 100644 --- a/README.adoc +++ b/README.adoc @@ -9,7 +9,7 @@ A set of plugins that can be applied to any Java project to provide a consistent The set currently consists of: * A source formatter that applies wrapping and whitespace conventions -* A checkstyle plugin that enforces consistency across a codebase +* A Checkstyle plugin that enforces consistency across a codebase Since the aim of this project is to provide consistency, each plugin is not generally configurable. You need to change your code to match the required conventions. @@ -82,7 +82,7 @@ If you want to skip both, you can use `-Dspring-javaformat.skip=true`. ==== Checkstyle -To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce Checkstyle conventions, add the Checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: [source,xml,indent=0,subs="normal"] ---- @@ -126,46 +126,49 @@ To enforce checkstyle conventions, add the checkstyle plugin and include a depen === Gradle +A plugin is provided. +To use it, first update `settings.gradle` to add Maven Central as a plugin repository: +[source,groovy,indent=0,subs="normal"] +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } +} - -==== Source Formatting -For source formatting, add the `spring-javaformat-gradle-plugin` to your `build` plugins as follows: +The plugin can then be added in the usual way in `build.gradle`: [source,groovy,indent=0,subs="normal"] ---- - buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath("io.spring.javaformat:spring-javaformat-gradle-plugin:{release-version}") - } - } - - apply plugin: 'io.spring.javaformat' +plugins { + id "io.spring.javaformat" version "{release-version}"" +} ---- +==== Source Formatting The plugin adds `format` and `checkFormat` tasks to your project. -The `checkFormat` task is automatically applied when running the standard Gradle `check` task. +The `checkFormat` task is automatically executed when running the standard Gradle `check` task. -In case you want to exclude a package from being checked, for example if you generate sources, you can do this by adding the following configuration: +In case you want to exclude a package from being checked, for example if you generate sources, add configuration similar to the following: [source,groovy,indent=0,subs="normal"] ---- tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { - exclude "package/to/exclude" + exclude "package/to/exclude" } ---- ==== Checkstyle -To enforce checkstyle conventions, add the checkstyle plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce Checkstyle conventions, add the `checkstyle` plugin and include a dependency on `spring-javaformat-checkstyle`: [source,groovy,indent=0,subs="normal"] ---- -apply plugin: 'checkstyle' +plugins { + id "checkstyle" +} checkstyle { toolVersion = "{checkstyle-version}" @@ -176,7 +179,7 @@ dependencies { } ---- -Your `checkstyle.xml` file should look then like this: +To use the Spring checks, your `checkstyle.xml` file should look like this: [source,xml,indent=0] ---- @@ -368,7 +371,7 @@ If you find you need whitespace inside your method, consider whether extracting Try to add javadoc for each public method and constant. Private methods shouldn't generally need javadoc, unless it provides a natural place to document unusual behavior. -The checkstyle rules will enforce that all public classes have javadoc. +The Checkstyle rules will enforce that all public classes have javadoc. They will also ensure that `@author` tags are well formed. From 4dddd32ee6147e7c0e05152488b20681903a6fd0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 8 Jul 2025 20:26:22 +0100 Subject: [PATCH 127/136] Improve Gradle integration This commit adds improved Gradle integration. The Java Format Gradle plugin now: - Reacts to the Checkstyle plugin being applied by adding a dependency on spring-javaformat-checkstyle - Provide a DSL extension that can be used to: - Apply the default checkstyle.xml configuration - Opt out of the automatic dependency configuration Closes gh-443 Closes gh-453 --- README.adoc | 38 +++++--- .../spring-javaformat-gradle-plugin/pom.xml | 6 ++ .../gradle/SpringJavaFormatExtension.java | 90 +++++++++++++++++++ .../gradle/SpringJavaFormatPlugin.java | 49 ++++++++++ .../javaformat/gradle/CheckstyleTests.java | 59 ++++++++++++ .../build.gradle | 27 ++++++ .../build.gradle | 25 ++++++ .../checkstyle-configure/build.gradle | 21 +++++ .../checkstyle-do-not-configure/build.gradle | 23 +++++ .../pom.xml | 5 ++ 10 files changed, 331 insertions(+), 12 deletions(-) create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle create mode 100644 spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle diff --git a/README.adoc b/README.adoc index e472cb07..ee170a9e 100644 --- a/README.adoc +++ b/README.adoc @@ -162,34 +162,48 @@ tasks.withType(io.spring.javaformat.gradle.tasks.CheckFormat) { ==== Checkstyle -To enforce Checkstyle conventions, add the `checkstyle` plugin and include a dependency on `spring-javaformat-checkstyle`: +To enforce Checkstyle conventions, apply the Checkstyle plugin in addition to the `io.spring.javaformat` plugin: [source,groovy,indent=0,subs="normal"] ---- plugins { + id "io.spring.javaformat" version "{release-version}" id "checkstyle" } +The Spring Java Format plugin will react to the Checkstyle plugin being applied and configure the necessary dependencies in the `checkstyle` configuration. + +You should also configure Checkstyle's tool version: + +[source,groovy,indent=0,subs="normal"] +---- checkstyle { toolVersion = "{checkstyle-version}" } +---- + +To configure Checkstyle to use the default Spring checks, add the following configuration: -dependencies { - checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:{release-version}") +[source,groovy,indent=0,subs="normal"] +---- +springJavaFormat { + checkstyle { + applyDefaultConfig() + } } ---- -To use the Spring checks, your `checkstyle.xml` file should look like this: +Alternatively, provide your own `checkstyle.xml` that configures the `io.spring.javaformat.checkstyle.SpringChecks` module. -[source,xml,indent=0] +If you want to use both Spring Java Format and Checkstyle but you do not want to use Spring Java Format's checks, disable the aforementioned dependency configuration: + +[source,groovy,indent=0,subs="normal"] ---- - - - - - +springJavaFormat { + checkstyle { + configureDependencies = false + } +} ---- diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml index ee8098c1..3170b015 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/pom.xml @@ -115,6 +115,12 @@ spring-javaformat-formatter-shaded ${project.version} + + + io.spring.javaformat + spring-javaformat-checkstyle + ${project.version} + diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java new file mode 100644 index 00000000..2f173b99 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatExtension.java @@ -0,0 +1,90 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.gradle; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import javax.inject.Inject; + +import org.gradle.api.Action; +import org.gradle.api.Project; +import org.gradle.api.plugins.quality.CheckstyleExtension; +import org.gradle.api.provider.Property; +import org.gradle.api.resources.TextResource; + +/** + * DSL extension for Spring Java Format. + * + * @author Andy Wilkinson + */ +public abstract class SpringJavaFormatExtension { + + private final Checkstyle checkstyle; + + @Inject + public SpringJavaFormatExtension(Project project) { + this.checkstyle = project.getObjects().newInstance(Checkstyle.class, project); + this.checkstyle.getConfigureDependencies().convention(true); + } + + public Checkstyle getCheckstyle() { + return this.checkstyle; + } + + public void checkstyle(Action action) { + action.execute(this.checkstyle); + } + + public abstract static class Checkstyle { + + private final Project project; + + @Inject + public Checkstyle(Project project) { + this.project = project; + } + + /** + * Property that controls whether Checkstyle's dependencies should be configured to + * use Spring Java Format's checks. + * @return the property + */ + public abstract Property getConfigureDependencies(); + + /** + * Applies Spring Java Format's default Checkstyle config, enabling all Spring checks. + * @see CheckstyleExtension#setConfig(TextResource) + */ + public void applyDefaultConfig() { + CheckstyleExtension extension = this.project.getExtensions().getByType(CheckstyleExtension.class); + StringWriter defaultConfig = new StringWriter(); + PrintWriter writer = new PrintWriter(defaultConfig); + writer.println(""); + writer.println(""); + writer.println(""); + writer.println(" "); + writer.println(" "); + writer.println(""); + extension.setConfig(this.project.getResources().getText().fromString(defaultConfig.toString())); + } + + } + +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java index b0c48331..4dc2f423 100644 --- a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/main/java/io/spring/javaformat/gradle/SpringJavaFormatPlugin.java @@ -17,17 +17,24 @@ package io.spring.javaformat.gradle; import java.io.File; +import java.util.ArrayList; +import java.util.List; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.artifacts.Dependency; +import org.gradle.api.artifacts.DependencySet; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.plugins.quality.CheckstyleExtension; +import org.gradle.api.plugins.quality.CheckstylePlugin; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; import io.spring.javaformat.config.JavaFormatConfig; +import io.spring.javaformat.formatter.Formatter; import io.spring.javaformat.gradle.tasks.CheckFormat; import io.spring.javaformat.gradle.tasks.Format; import io.spring.javaformat.gradle.tasks.FormatterTask; @@ -46,6 +53,13 @@ public class SpringJavaFormatPlugin implements Plugin { public void apply(Project project) { this.project = project; addSourceTasks(); + SpringJavaFormatExtension extension = registerExtension(); + new CheckstyleConfigurer(project, extension).apply(); + } + + private SpringJavaFormatExtension registerExtension() { + SpringJavaFormatExtension extension = this.project.getExtensions().create("springJavaFormat", SpringJavaFormatExtension.class); + return extension; } private void addSourceTasks() { @@ -90,4 +104,39 @@ private TaskProvider addFormatterTask(SourceSet sou return provider; } + private static final class CheckstyleConfigurer { + + private final Project project; + + private final SpringJavaFormatExtension extension; + + private CheckstyleConfigurer(Project project, SpringJavaFormatExtension extension) { + this.project = project; + this.extension = extension; + } + + private void apply() { + this.project.getPlugins().withType(CheckstylePlugin.class).configureEach((checkstylePlugin) -> { + CheckstyleExtension checkstyle = this.project.getExtensions().getByType(CheckstyleExtension.class); + DependencySet checkstyleDependencies = this.project.getConfigurations().getByName("checkstyle").getDependencies(); + checkstyleDependencies.addAllLater(this.project.provider(() -> checkstyleDependencies(checkstyle))); + }); + } + + private List checkstyleDependencies(CheckstyleExtension checkstyle) { + List dependencies = new ArrayList<>(); + if (configuringCheckstyleDependencies()) { + dependencies.add(this.project.getDependencies().create("com.puppycrawl.tools:checkstyle:" + checkstyle.getToolVersion())); + dependencies.add(this.project.getDependencies().create("io.spring.javaformat:spring-javaformat-checkstyle:" + + Formatter.class.getPackage().getImplementationVersion())); + } + return dependencies; + } + + private boolean configuringCheckstyleDependencies() { + return Boolean.TRUE.equals(this.extension.getCheckstyle().getConfigureDependencies().get()); + } + + } + } diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java new file mode 100644 index 00000000..8995edad --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/java/io/spring/javaformat/gradle/CheckstyleTests.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.gradle; + +import org.gradle.testkit.runner.BuildResult; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import io.spring.javaformat.gradle.testkit.GradleBuild; +import io.spring.javaformat.gradle.testkit.GradleBuildExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(GradleBuildExtension.class) +class CheckstyleTests { + + private final GradleBuild gradleBuild = new GradleBuild(); + + @Test + void configureCheckstyle() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-configure").build("checkstyleDependencies"); + assertThat(result.getOutput()).contains("io.spring.javaformat:spring-javaformat-checkstyle:"); + assertThat(result.getOutput()).contains("com.puppycrawl.tools:checkstyle:8.45.1"); + } + + @Test + void configureCheckstyleWithCustomToolVersion() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-configure-with-custom-tool-version").build("checkstyleDependencies"); + assertThat(result.getOutput()).contains("io.spring.javaformat:spring-javaformat-checkstyle:"); + assertThat(result.getOutput()).contains("com.puppycrawl.tools:checkstyle:10.26.1"); + } + + @Test + void doNotConfigureCheckstyle() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-do-not-configure").build("checkstyleDependencies"); + assertThat(result.getOutput()).doesNotContain("spring-javaformat-checkstyle"); + } + + @Test + void applyDefaultConfigToCheckstyle() { + BuildResult result = this.gradleBuild.source("src/test/resources/checkstyle-apply-default-config").build("checkstyleConfig"); + assertThat(result.getOutput()).contains(""); + } + +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle new file mode 100644 index 00000000..302352be --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-apply-default-config/build.gradle @@ -0,0 +1,27 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +springJavaFormat { + checkstyle { + applyDefaultConfig() + } +} + +tasks.register("checkstyleConfig") { + doFirst { + println checkstyle.config.asString() + } +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle new file mode 100644 index 00000000..cc42d068 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure-with-custom-tool-version/build.gradle @@ -0,0 +1,25 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +checkstyle { + toolVersion = "10.26.1" +} + +tasks.register("checkstyleDependencies") { + doFirst { + configurations.checkstyle.dependencies.each { println "${it.group}:${it.name}:${it.version}" } + } +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle new file mode 100644 index 00000000..08207b88 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-configure/build.gradle @@ -0,0 +1,21 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +tasks.register("checkstyleDependencies") { + doFirst { + configurations.checkstyle.dependencies.each { println "${it.group}:${it.name}:${it.version}" } + } +} diff --git a/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle new file mode 100644 index 00000000..561ffa61 --- /dev/null +++ b/spring-javaformat-gradle/spring-javaformat-gradle-plugin/src/test/resources/checkstyle-do-not-configure/build.gradle @@ -0,0 +1,23 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'checkstyle' +apply plugin: 'java' +apply plugin: 'io.spring.javaformat' + +sourceCompatibility = 1.8 + +springJavaFormat { + checkstyle { + configureDependencies = false + } +} + +tasks.register("checkstyleDependencies") { + doFirst { + configurations.checkstyle.dependencies.each { println "${it.group}:${it.name}:${it.version}" } + } +} diff --git a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml index 6aeff1c4..330f53c9 100644 --- a/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml +++ b/spring-javaformat/spring-javaformat-formatter-shaded/pom.xml @@ -80,6 +80,11 @@ + + + ${project.version} + + From 2f512ea067c186ff48ef34b375e0d54c51e0d1c3 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Thu, 10 Jul 2025 09:24:55 +0200 Subject: [PATCH 128/136] Fix readme --- README.adoc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index ee170a9e..d5dfb4ea 100644 --- a/README.adoc +++ b/README.adoc @@ -130,19 +130,21 @@ A plugin is provided. To use it, first update `settings.gradle` to add Maven Central as a plugin repository: [source,groovy,indent=0,subs="normal"] +---- pluginManagement { repositories { gradlePluginPortal() mavenCentral() } } +---- The plugin can then be added in the usual way in `build.gradle`: [source,groovy,indent=0,subs="normal"] ---- plugins { - id "io.spring.javaformat" version "{release-version}"" + id "io.spring.javaformat" version "{release-version}" } ---- @@ -170,6 +172,7 @@ plugins { id "io.spring.javaformat" version "{release-version}" id "checkstyle" } +---- The Spring Java Format plugin will react to the Checkstyle plugin being applied and configure the necessary dependencies in the `checkstyle` configuration. From 3a3e69dd3b8312ffcc9c9fca4cd9e713be22cb96 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 15 Jul 2025 11:08:43 +0100 Subject: [PATCH 129/136] Relax NoWhitespaceBeforeCheck to allow annotated varags Closes gh-454 --- .../check/SpringNoWhitespaceBeforeCheck.java | 52 +++++++++++++++++++ .../checkstyle/spring-checkstyle.xml | 2 +- .../check/WhitespaceNullableArray.txt | 1 + .../check/WhitespaceNullableArrayElements.txt | 1 + .../check/WhitespaceNullableVarargs.txt | 1 + .../resources/check/WhitespaceVarargs.txt | 2 + .../source/WhitespaceNullableArray.java | 28 ++++++++++ .../WhitespaceNullableArrayElements.java | 28 ++++++++++ .../source/WhitespaceNullableVarargs.java | 28 ++++++++++ .../resources/source/WhitespaceVarargs.java | 28 ++++++++++ 10 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java new file mode 100644 index 00000000..f06a88c5 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNoWhitespaceBeforeCheck.java @@ -0,0 +1,52 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.checkstyle.check; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; +import com.puppycrawl.tools.checkstyle.checks.whitespace.NoWhitespaceBeforeCheck; + +/** + * Spring-specific customization of {@link NoWhitespaceBeforeCheck} that permits + * whitespace before {@code ...} when it is a separator after an annotation, for + * example {@code int @Nullable ...}. + * + * @author Andy Wilkinson + */ +public class SpringNoWhitespaceBeforeCheck extends NoWhitespaceBeforeCheck { + + @Override + public void visitToken(DetailAST ast) { + if (ast.getType() != TokenTypes.ELLIPSIS) { + super.visitToken(ast); + } + else { + visitEllipsis(ast); + } + } + + private void visitEllipsis(DetailAST ellipsis) { + DetailAST previousSibling = ellipsis.getPreviousSibling(); + if (previousSibling.getType() == TokenTypes.TYPE && + previousSibling.getChildCount() == 2 && + previousSibling.getLastChild().getType() == TokenTypes.ANNOTATIONS) { + return; + } + super.visitToken(ellipsis); + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 7fc6d02e..38071be9 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -145,7 +145,7 @@ - + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArray.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableArrayElements.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt new file mode 100644 index 00000000..69174e4c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceNullableVarargs.txt @@ -0,0 +1 @@ ++0 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt new file mode 100644 index 00000000..1ec0d7e2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/WhitespaceVarargs.txt @@ -0,0 +1,2 @@ ++WhitespaceVarargs.java:24:24: '...' is preceded with whitespace. [SpringNoWhitespaceBefore] ++1 error \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java new file mode 100644 index 00000000..2d25cfa7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArray.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Whitespace is expected before {@code []} when @Nullable. + * + * @author Andy Wilkinson + */ +public class WhitespaceNullableArray { + + void bytes(int @Nullable [] elements) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java new file mode 100644 index 00000000..6e23b7fb --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableArrayElements.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Whitespace is expected before {@code type[]} when @Nullable. + * + * @author Andy Wilkinson + */ +public class WhitespaceNullableArrayElements { + + void bytes(@Nullable int[] elements) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java new file mode 100644 index 00000000..1b4eaeae --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceNullableVarargs.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Whitespace is expected before ... when @Nullable. + * + * @author Andy Wilkinson + */ +public class WhitespaceNullableVarargs { + + void bytes(int @Nullable ... elements) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java new file mode 100644 index 00000000..2a962abe --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/WhitespaceVarargs.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Whitespace is not expected before {@code ...}. + * + * @author Andy Wilkinson + */ +public class WhitespaceVarargs { + + void bytes(int ... elements) { + + } + +} From 4f4e08a171fe5ccb545e242e935b98a48e478416 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 29 Jul 2025 12:12:43 +0100 Subject: [PATCH 130/136] Ignore fully-qualified annotation in attribute value concision check Closes gh-455 --- ...gAnnotationAttributeConciseValueCheck.java | 34 +++++++++++-------- ...asConciseReferenceToContainedEnumValue.txt | 1 + ...sConciseReferenceToContainedEnumValue.java | 20 +++++++++++ 3 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java index 703d9919..b8b0ad81 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringAnnotationAttributeConciseValueCheck.java @@ -95,20 +95,26 @@ private void visitMemberValuePair(DetailAST annotationValue) { } private void visitValueExpression(DetailAST valueExpression, DetailAST annotation, String attributeName) { - if (valueExpression != null && valueExpression.getChildCount() == 1) { - List expressionComponents = dotSeparatedComponents(valueExpression.getFirstChild()); - if (expressionComponents != null && expressionComponents.size() > 2) { - String outerTypeName = expressionComponents.get(0); - String annotationName = annotation.findFirstToken(TokenTypes.IDENT).getText(); - if (outerTypeName.equals(annotationName)) { - String innerTypeName = expressionComponents.get(1); - if (!existingClashingImport(outerTypeName, innerTypeName)) { - String toImport = outerTypeName + "." + innerTypeName; - String replacement = String.join(".", expressionComponents.subList(1, expressionComponents.size())); - log(valueExpression.getLineNo(), valueExpression.getColumnNo(), - "annotation.attribute.overlyVerboseValue", attributeName, toImport, replacement); - } - } + if (valueExpression == null || valueExpression.getChildCount() != 1) { + return; + } + List expressionComponents = dotSeparatedComponents(valueExpression.getFirstChild()); + if (expressionComponents == null || expressionComponents.size() <= 2) { + return; + } + String outerTypeName = expressionComponents.get(0); + DetailAST annotationIdent = annotation.findFirstToken(TokenTypes.IDENT); + if (annotationIdent == null) { + return; + } + String annotationName = annotationIdent.getText(); + if (outerTypeName.equals(annotationName)) { + String innerTypeName = expressionComponents.get(1); + if (!existingClashingImport(outerTypeName, innerTypeName)) { + String toImport = outerTypeName + "." + innerTypeName; + String replacement = String.join(".", expressionComponents.subList(1, expressionComponents.size())); + log(valueExpression.getLineNo(), valueExpression.getColumnNo(), + "annotation.attribute.overlyVerboseValue", attributeName, toImport, replacement); } } } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java new file mode 100644 index 00000000..614e11c0 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue.java @@ -0,0 +1,20 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +@com.example.web.condition.ConditionalOnWebApplicationType(type = WebApplicationType.A.B.C.D.SERVLET) +public class AnnotationWithFullyQualifiedNameAndNamedAttributeWithValueThatHasConciseReferenceToContainedEnumValue { + +} From bcd9ab0948d637f8509e5a1f40edb5da698f65d4 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 14 Aug 2025 15:16:28 -0700 Subject: [PATCH 131/136] Update README for Eclipse update site Closes gh-457 --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index d5dfb4ea..907d9a2c 100644 --- a/README.adoc +++ b/README.adoc @@ -242,7 +242,7 @@ You can also add a `.eclipse/eclipse.properties` file to customize the following To install the plugin use the `io.spring.javaformat.eclipse.site` zip file. You can download the latest version from https://repo1.maven.org/maven2/io/spring/javaformat/io.spring.javaformat.eclipse.site/{release-version}[Maven Central] -or use the https://repo.spring.io/javaformat-eclipse-update-site/[update site]. +or use the `https://repo.spring.io/javaformat-eclipse-update-site/` as an Eclipse update site (do not use the `/ui/native/` links that you are redirected to when using a web browser). From 3d3db5fdbcfcc07d4a20f68ada86f0ba191d2074 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 31 Oct 2025 10:34:11 +0000 Subject: [PATCH 132/136] Check since tags on nested elements Closes gh-462 --- .../checkstyle/check/SpringJavadocCheck.java | 142 ++++++++++++++++-- .../checkstyle/check/messages.properties | 2 + .../JavadocAnnotationFieldHasEarlierSince.txt | 2 + .../JavadocInnerClassHasEarlierSince.txt | 2 + .../check/JavadocMethodHasEarlierSince.txt | 2 + ...JavadocAnnotationFieldHasEarlierSince.java | 32 ++++ .../JavadocInnerClassHasEarlierSince.java | 34 +++++ .../source/JavadocMethodHasEarlierSince.java | 33 ++++ .../source/JavadocNonPublicSince.java | 2 +- ...JavadocNonPublicSinceInsideAnnotation.java | 2 +- .../JavadocNonPublicSinceInsideInterface.java | 2 +- 11 files changed, 238 insertions(+), 17 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index d0d0844a..d9cd08f5 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -81,7 +81,7 @@ public class SpringJavadocCheck extends AbstractSpringCheck { @Override public int[] getDefaultTokens() { return new int[] { TokenTypes.INTERFACE_DEF, TokenTypes.CLASS_DEF, TokenTypes.ENUM_DEF, - TokenTypes.ANNOTATION_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF }; + TokenTypes.ANNOTATION_DEF, TokenTypes.METHOD_DEF, TokenTypes.CTOR_DEF, TokenTypes.ANNOTATION_FIELD_DEF }; } @Override @@ -130,6 +130,7 @@ private void checkJavadoc(DetailAST ast, TextBlock javadoc) { checkTagCase(ast, javadoc); checkSinceTag(ast, javadoc); checkMethodJavaDoc(ast, javadoc); + checkAnnotationFieldJavaDoc(ast, javadoc); } private void checkBannedTags(DetailAST ast, TextBlock javadoc) { @@ -164,25 +165,54 @@ private void checkSinceTag(DetailAST ast, TextBlock javadoc) { if (!TOP_LEVEL_TYPES.contains(ast.getType())) { return; } - String[] text = javadoc.getText(); DetailAST interfaceOrAnnotationDef = getInterfaceOrAnnotationDef(ast); boolean privateType = !isPublicOrProtected(ast) && (interfaceOrAnnotationDef == null || !isPublicOrProtected(interfaceOrAnnotationDef)); - boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; - boolean found = false; - for (int i = 0; i < text.length; i++) { - Matcher matcher = SINCE_TAG_PATTERN.matcher(text[i]); - if (matcher.find()) { - found = true; - String description = matcher.group(1).trim(); - if (this.publicOnlySinceTags && privateType) { - log(javadoc.getStartLineNo() + i, text[i].length() - description.length(), "javadoc.publicSince"); - } + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + if (this.publicOnlySinceTags && privateType) { + log(sinceTag.lineNumber, sinceTag.columnNumber, "javadoc.publicSince"); + } + else { + checkContainingSince(ast, sinceTag); } } - if (this.requireSinceTag && !innerType && !found && !(this.publicOnlySinceTags && privateType)) { - log(javadoc.getStartLineNo(), 0, "javadoc.missingSince"); + else { + boolean innerType = ast.getParent() != null && ast.getParent().getType() != TokenTypes.COMPILATION_UNIT; + if (this.requireSinceTag && !innerType && sinceTag == null && !(this.publicOnlySinceTags && privateType)) { + log(javadoc.getStartLineNo(), 0, "javadoc.missingSince"); + } + } + } + + private void checkContainingSince(DetailAST ast, SinceTag currentTag) { + SinceTag containingSince = findContainingSince(ast); + if (containingSince != null) { + SinceVersion current = currentTag.version; + SinceVersion container = containingSince.version; + int comparison = current.compareTo(container); + if (comparison < 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.earlierSince", current, container, containingSince.lineNumber, containingSince.columnNumber); + } + else if (comparison == 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.sameSince", current, containingSince.lineNumber, containingSince.columnNumber); + } + } + } + + private SinceTag findContainingSince(DetailAST ast) { + DetailAST parent = ast.getParent(); + while (parent != null && parent.getType() != TokenTypes.COMPILATION_UNIT) { + TextBlock javadoc = getFileContents().getJavadocBefore(parent.getLineNo()); + if (javadoc != null) { + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + return sinceTag; + } + } + parent = parent.getParent(); } + return null; } private void checkMethodJavaDoc(DetailAST ast, TextBlock javadoc) { @@ -196,6 +226,20 @@ private void checkMethodJavaDoc(DetailAST ast, TextBlock javadoc) { log(javadoc.getStartLineNo() + i - 1, 0, "javadoc.emptyLineBeforeTag"); } } + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + checkContainingSince(ast, sinceTag); + } + } + + private void checkAnnotationFieldJavaDoc(DetailAST ast, TextBlock javadoc) { + if (TokenTypes.ANNOTATION_FIELD_DEF != ast.getType()) { + return; + } + SinceTag sinceTag = SinceTag.find(ast, javadoc); + if (sinceTag != null) { + checkContainingSince(ast, sinceTag); + } } private boolean startsWithUppercase(String description) { @@ -251,4 +295,74 @@ private boolean isPublicOrProtected(DetailAST ast) { || modifiers.findFirstToken(TokenTypes.LITERAL_PROTECTED) != null; } + private static final class SinceTag { + + private final int lineNumber; + + private final int columnNumber; + + private final SinceVersion version; + + private SinceTag(int lineNumber, int columnNumber, SinceVersion version) { + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + this.version = version; + } + + private static SinceTag find(DetailAST ast, TextBlock javadoc) { + String[] text = javadoc.getText(); + for (int i = 0; i < text.length; i++) { + Matcher matcher = SINCE_TAG_PATTERN.matcher(text[i]); + if (matcher.find()) { + String description = matcher.group(1).trim(); + return new SinceTag(javadoc.getStartLineNo() + i, text[i].length() - description.length(), SinceVersion.of(description)); + } + } + return null; + } + } + + private static final class SinceVersion implements Comparable { + + private final int major; + + private final int minor; + + private final int patch; + + private final String text; + + private SinceVersion(int major, int minor, int patch, String text) { + this.major = major; + this.minor = minor; + this.patch = patch; + this.text = text; + } + + private static SinceVersion of(String text) { + String[] components = text.split("\\."); + int major = (components.length > 0) ? Integer.parseInt(components[0]) : 0; + int minor = (components.length > 1) ? Integer.parseInt(components[1]) : 0; + int patch = (components.length > 2) ? Integer.parseInt(components[2]) : 0; + return new SinceVersion(major, minor, patch, text); + } + + public String toString() { + return this.text; + } + + @Override + public int compareTo(SinceVersion other) { + int diff = this.major - other.major; + if (diff == 0) { + diff = this.minor - other.minor; + if (diff == 0) { + diff = this.patch - other.patch; + } + } + return diff; + } + + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 4c865ff0..3d402e0b 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -11,7 +11,9 @@ import.avoidStatic=Using a static member import should be avoided - {0}. import.ordering=Wrong order for ''{0}'' import. javadoc.badCase=Javadoc element descriptions should not start with an uppercase letter. javadoc.bannedTag=Javadoc tag ''{0}'' should not be used. +javadoc.earlierSince=Javadoc @since version ''{0}'' is earlier than @since version ''{1}'' at {2}:{3}. javadoc.missingSince=Missing Javadoc @since tag. +javadoc.sameSince=Javadoc @since version ''{0}'' is unnecessary as it is the same as the @since version at {1}:{2}. javadoc.publicSince=Javadoc @since tag should not be used on private classes. javadoc.emptyLineBeforeTag=Method Javadoc should not have empty line before tag. javadoc.nonJavadocComment=Comments should not include \"(non-Javadoc)\". diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt new file mode 100644 index 00000000..e5c19bf9 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocAnnotationFieldHasEarlierSince.txt @@ -0,0 +1,2 @@ ++28:19: Javadoc @since version '1.1.0' is earlier than @since version '1.2.0' at 21:10. ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt new file mode 100644 index 00000000..73737acb --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocInnerClassHasEarlierSince.txt @@ -0,0 +1,2 @@ ++28:19: Javadoc @since version '1.2.3' is earlier than @since version '2.0.0' at 21:10. ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt new file mode 100644 index 00000000..7d3a7148 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/JavadocMethodHasEarlierSince.txt @@ -0,0 +1,2 @@ ++27:19: Javadoc @since version '1.2.3' is earlier than @since version '2.0.0' at 21:10. ++1 error diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java new file mode 100644 index 00000000..2ecaf03c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocAnnotationFieldHasEarlierSince.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Javadoc with a good since tag. + * + * @author Andy Wilkinson + * @since 1.2.0 + */ +public @interface JavadocAnnotationFieldHasEarlierSince { + + /** + * An attribute. + * @return the value + * @since 1.1.0 + */ + boolean attribute() default true; + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java new file mode 100644 index 00000000..2ad74700 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocInnerClassHasEarlierSince.java @@ -0,0 +1,34 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Javadoc with an earlier since tag on an inner class. + * + * @author Phillip Webb + * @since 2.0.0 + */ +class JavadocInnerClassHasEarlierSince { + + /** + * Inner class. + * + * @since 1.2.3 + */ + private static class Inner { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java new file mode 100644 index 00000000..d23d74ee --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocMethodHasEarlierSince.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Javadoc with an earlier since tag on a method. + * + * @author Andy Wilkinson + * @since 2.0.0 + */ +public class JavadocMethodHasEarlierSince { + + /** + * Some method. + * @since 1.2.3 + */ + public void someMethod() { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java index c76a57a3..4f0f2fde 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSince.java @@ -25,7 +25,7 @@ class JavadocNonPublicSince { /** * Inner class. * - * @since 1.2.3 + * @since 1.2.4 */ private static class Inner { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java index da8c6f46..b79a5a85 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideAnnotation.java @@ -25,7 +25,7 @@ /** * Inner enum. * - * @since 1.2.3 + * @since 1.2.4 */ enum Inner { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java index edefdd29..c0e4b412 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocNonPublicSinceInsideInterface.java @@ -25,7 +25,7 @@ public interface JavadocNonPublicSinceInsideInterface { /** * Inner enum. * - * @since 1.2.3 + * @since 1.2.4 */ enum Inner { From 40f2ff5d19035350052d8cbf515843aeaecdfd61 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 29 Jan 2026 11:06:01 +0000 Subject: [PATCH 133/136] Ignore date-like since when comparing with nested since See gh-462 --- .../checkstyle/check/SpringJavadocCheck.java | 36 +++++++++++++------ .../test/resources/source/JavadocValid.java | 30 ++++++++++++++++ 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java index d9cd08f5..56f7ea63 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringJavadocCheck.java @@ -190,12 +190,14 @@ private void checkContainingSince(DetailAST ast, SinceTag currentTag) { if (containingSince != null) { SinceVersion current = currentTag.version; SinceVersion container = containingSince.version; - int comparison = current.compareTo(container); - if (comparison < 0) { - log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.earlierSince", current, container, containingSince.lineNumber, containingSince.columnNumber); - } - else if (comparison == 0) { - log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.sameSince", current, containingSince.lineNumber, containingSince.columnNumber); + if (current != SinceVersion.UNKNOWN && container != SinceVersion.UNKNOWN) { + int comparison = current.compareTo(container); + if (comparison < 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.earlierSince", current, container, containingSince.lineNumber, containingSince.columnNumber); + } + else if (comparison == 0) { + log(currentTag.lineNumber, currentTag.columnNumber, "javadoc.sameSince", current, containingSince.lineNumber, containingSince.columnNumber); + } } } } @@ -324,6 +326,10 @@ private static SinceTag find(DetailAST ast, TextBlock javadoc) { private static final class SinceVersion implements Comparable { + private static final SinceVersion UNKNOWN = new SinceVersion(-1, -1, -1, "unknown"); + + private static final Pattern DATE_PATTERN = Pattern.compile("[0-3][0-9]\\.[0-1][0-9]\\.20[0-2][0-9]"); + private final int major; private final int minor; @@ -340,11 +346,19 @@ private SinceVersion(int major, int minor, int patch, String text) { } private static SinceVersion of(String text) { - String[] components = text.split("\\."); - int major = (components.length > 0) ? Integer.parseInt(components[0]) : 0; - int minor = (components.length > 1) ? Integer.parseInt(components[1]) : 0; - int patch = (components.length > 2) ? Integer.parseInt(components[2]) : 0; - return new SinceVersion(major, minor, patch, text); + if (DATE_PATTERN.matcher(text).matches()) { + return UNKNOWN; + } + try { + String[] components = text.split("\\."); + int major = (components.length > 0) ? Integer.parseInt(components[0]) : 0; + int minor = (components.length > 1) ? Integer.parseInt(components[1]) : 0; + int patch = (components.length > 2) ? Integer.parseInt(components[2]) : 0; + return new SinceVersion(major, minor, patch, text); + } + catch (NumberFormatException ex) { + return UNKNOWN; + } } public String toString() { diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java index 30eec4c3..6584ef36 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/JavadocValid.java @@ -46,4 +46,34 @@ public void test2(String something) { public String test3(String something) throws RuntimeException { } + /** + * Class with a numeric date since. + * @since 28.12.2003 + */ + public class NumericDateSince { + + /** + * Method with version-based since. + * @since 1.3.0 + */ + public void versionSince() { + } + + } + + /** + * Class with an alphanumeric date since. + * @since 16 April 2001 + */ + public class AlphanumericDateSince { + + /** + * Method with version-based since. + * @since 1.3.0 + */ + public void versionSince() { + } + + } + } From 2fac7723af97eeaae47344774fbc9f0168af4cb4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 29 Jan 2026 11:08:11 +0000 Subject: [PATCH 134/136] Enforce Spring team's nullability style and conventions - JSpecify annotations are used to express nullability - Type use annotations (@Nullable and @NonNull) are positioned immediately before the type Closes gh-465 --- .../check/SpringNullabilityCheck.java | 140 ++++++++++++++++++ .../checkstyle/check/messages.properties | 2 + .../checkstyle/spring-checkstyle.xml | 1 + .../SpringConfigurationLoaderTests.java | 4 +- .../check/NullabilityBannedNonNull.txt | 3 + .../check/NullabilityBannedNullable.txt | 1 + ...llabilityNullableNotPrecedingFieldType.txt | 1 + ...ilityNullableNotPrecedingParameterType.txt | 1 + ...labilityNullableNotPrecedingReturnType.txt | 1 + .../NullabilityNullableOnSeparateLine.txt | 0 .../test/resources/check/NullabilityValid.txt | 1 + .../source/NullabilityBannedNonNull.java | 32 ++++ .../source/NullabilityBannedNullable.java | 30 ++++ ...labilityNullableNotPrecedingFieldType.java | 28 ++++ ...lityNullableNotPrecedingParameterType.java | 30 ++++ ...abilityNullableNotPrecedingReturnType.java | 30 ++++ .../NullabilityNullableOnSeparateLine.java | 31 ++++ .../resources/source/NullabilityValid.java | 59 ++++++++ 18 files changed, 393 insertions(+), 2 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableOnSeparateLine.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java new file mode 100644 index 00000000..4c48c381 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringNullabilityCheck.java @@ -0,0 +1,140 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 io.spring.javaformat.checkstyle.check; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.FullIdent; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +/** + * Checks compliance with Spring team's nullability conventions. JSpecify annotations + * should be used to express nullability and type-use annotations ({@code @Nullable} + * and {@code @NonNull}) should appear immediately before a type. + * + * @author Andy Wilkinson + */ +public class SpringNullabilityCheck extends AbstractSpringCheck { + + private final Set unwantedNullabilityImports = new HashSet<>(); + + private final List modifiers = new ArrayList<>(); + + @Override + public int[] getAcceptableTokens() { + return new int[] { TokenTypes.IMPORT, TokenTypes.MODIFIERS }; + } + + @Override + public void beginTree(DetailAST rootAST) { + this.modifiers.clear(); + this.unwantedNullabilityImports.clear(); + } + + @Override + public void finishTree(DetailAST rootAST) { + this.modifiers.forEach(this::visitModifiers); + } + + @Override + public void visitToken(DetailAST ast) { + switch (ast.getType()) { + case TokenTypes.IMPORT: + visitImport(ast); + break; + case TokenTypes.MODIFIERS: + this.modifiers.add(ast); + break; + } + } + + private void visitImport(DetailAST ast) { + FullIdent ident = FullIdent.createFullIdentBelow(ast); + if (!isFullyQualifiedJSpecifyAnnotation(ident)) { + String simpleName = simpleNameOf(ident); + for (JSpecifyAnnotation annotation: JSpecifyAnnotation.values()) { + if (annotation.replaces.contains(simpleName)) { + log(ident.getLineNo(), ident.getColumnNo(), "nullability.bannedImport", ident.getText(), annotation.name); + this.unwantedNullabilityImports.add(simpleName); + } + } + } + } + + private boolean isFullyQualifiedJSpecifyAnnotation(FullIdent ident) { + for (JSpecifyAnnotation annotation: JSpecifyAnnotation.values()) { + if (ident.getText().equals(annotation.name)) { + return true; + } + } + return false; + } + + private String simpleNameOf(FullIdent ident) { + String identText = ident.getText(); + return identText.substring(identText.lastIndexOf(".") + 1); + } + + private void visitModifiers(DetailAST ast) { + DetailAST annotation = ast.findFirstToken(TokenTypes.ANNOTATION); + if (annotation != null) { + DetailAST ident = annotation.findFirstToken(TokenTypes.IDENT); + if (ident != null) { + String identText = ident.getText(); + DetailAST lastChild = ast.getLastChild(); + if (isJSpecifyAnnotation(ident) && !annotation.equals(lastChild)) { + log(annotation.getLineNo(), annotation.getColumnNo(), "nullability.annotationLocation", identText); + } + } + } + } + + private boolean isJSpecifyAnnotation(DetailAST ident) { + for (JSpecifyAnnotation annotation: JSpecifyAnnotation.values()) { + if (ident.getText().equals(annotation.simpleName) && !this.unwantedNullabilityImports.contains(ident.getText())) { + return true; + } + } + return false; + } + + private enum JSpecifyAnnotation { + + NULLABLE("Nullable", "Nullable"), + + NON_NULL("NonNull", "NonNull", "Nonnull"); + + private final String simpleName; + + private final String name; + + private Set replaces; + + JSpecifyAnnotation(String simpleName, String... replaces) { + this.simpleName = simpleName; + this.name = "org.jspecify.annotations." + simpleName; + this.replaces = new HashSet<>(Arrays.asList(replaces)); + } + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index 3d402e0b..ed574211 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -32,6 +32,8 @@ lambda.unnecessaryParen=Lambda argument has unnecessary parentheses. methodorder.outOfOrder=Method ''{0}'' is out of order, expected {1}. methodvisibility.publicMethod=Method ''{0}'' in private class should not be public. nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". +nullability.bannedImport=Nullability should be expressed using JSpecify. Replace ''{0}'' with ''{1}''. +nullability.annotationLocation=''{0}'' should only be used immediately before a type. ternary.equalOperator=Ternary operation should use != when testing. ternary.missingParen=Ternary operation missing parentheses. Use the form \"(a != b) ? y : n\". testfilename.wrongName=Test classes should have a name ending with 'Tests.java'. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml index 38071be9..829e6959 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/spring-checkstyle.xml @@ -161,6 +161,7 @@ + diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java index e1e60608..2c81cdd4 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/java/io/spring/javaformat/checkstyle/SpringConfigurationLoaderTests.java @@ -50,7 +50,7 @@ public void loadShouldLoadChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(62); + assertThat(ordinaryChecks).hasSize(63); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(6); } @@ -64,7 +64,7 @@ public void loadWithExcludeShouldExcludeChecks() { assertThat(checks).hasSize(5); TreeWalker treeWalker = (TreeWalker) checks.toArray()[4]; Set ordinaryChecks = (Set) Extractors.byName("ordinaryChecks").extract(treeWalker); - assertThat(ordinaryChecks).hasSize(61); + assertThat(ordinaryChecks).hasSize(62); Set commentChecks = (Set) Extractors.byName("commentChecks").extract(treeWalker); assertThat(commentChecks).hasSize(5); } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt new file mode 100644 index 00000000..2565624c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNonNull.txt @@ -0,0 +1,3 @@ ++NullabilityBannedNonNull.java:17:8: Nullability should be expressed using JSpecify. Replace 'javax.annotation.Nonnull' with 'org.jspecify.annotations.NonNull'. [SpringNullability] ++NullabilityBannedNonNull.java:19:8: Nullability should be expressed using JSpecify. Replace 'org.checkerframework.checker.nullness.qual.NonNull' with 'org.jspecify.annotations.NonNull'. [SpringNullability] ++2 errors \ No newline at end of file diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt new file mode 100644 index 00000000..f3829412 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityBannedNullable.txt @@ -0,0 +1 @@ ++Nullability should be expressed using JSpecify. Replace 'javax.annotation.Nullable' with 'org.jspecify.annotations.Nullable'. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt new file mode 100644 index 00000000..de4383d2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingFieldType.txt @@ -0,0 +1 @@ ++NullabilityNullableNotPrecedingFieldType.java:26:17: 'Nullable' should only be used immediately before a type. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt new file mode 100644 index 00000000..7b47421a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingParameterType.txt @@ -0,0 +1 @@ +NullabilityNullableNotPrecedingParameterType.java:26:30: 'Nullable' should only be used immediately before a type. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt new file mode 100644 index 00000000..fe62aa47 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableNotPrecedingReturnType.txt @@ -0,0 +1 @@ ++NullabilityNullableNotPrecedingReturnType.java:26:9: 'Nullable' should only be used immediately before a type. [SpringNullability] diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableOnSeparateLine.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityNullableOnSeparateLine.txt new file mode 100644 index 00000000..e69de29b diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/NullabilityValid.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java new file mode 100644 index 00000000..870a40e9 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNonNull.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 javax.annotation.Nonnull; + +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * JSpecify's NonNull annotation should be used. + * + * @author Andy Wilkinson + */ +public class NullabilityBannedNonNull { + + public void method(@Nonnull String one, @NonNull String two) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java new file mode 100644 index 00000000..61d918d1 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityBannedNullable.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 javax.annotation.Nullable; + +/** + * JSpecify's Nullable annotation should be used. + * + * @author Andy Wilkinson + */ +public class NullabilityBannedNullable { + + public void method(@Nullable String one) { + + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java new file mode 100644 index 00000000..a54069ef --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingFieldType.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the parameter type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableNotPrecedingFieldType { + + private @Nullable static String field = null; + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java new file mode 100644 index 00000000..bd55d9d2 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingParameterType.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the parameter type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableNotPrecedingParameterType { + + public String method(@Nullable final String arg) { + return "result"; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java new file mode 100644 index 00000000..9b9b8a4e --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableNotPrecedingReturnType.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the return type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableNotPrecedingReturnType { + + @Nullable public String method() { + return "result"; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java new file mode 100644 index 00000000..b18ee10a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityNullableOnSeparateLine.java @@ -0,0 +1,31 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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 org.jspecify.annotations.Nullable; + +/** + * {@code @Nullable} should appear immediately before the return type. + * + * @author Andy Wilkinson + */ +public class NullabilityNullableOnSeparateLine { + + @Nullable + public String method() { + return "result"; + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java new file mode 100644 index 00000000..e0ea5cca --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/NullabilityValid.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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.util.Collections; +import java.util.Map; + +import org.jspecify.annotations.Nullable; + +/** + * Valid use of nullability annotations. + * + * @author Andy Wilkinson + */ +public class NullabilityValid { + + private @Nullable String field; + + public NullabilityValid(@Nullable String arg, final @Nullable String anotherArg) { + + } + + public @Nullable String publicMethod() { + return "result"; + } + + @Nullable String packagePrivateMethod() { + return "result"; + } + + public Map genericReturnType() { + return Collections.emptyMap(); + } + + void genericParameter(Map<@Nullable ? extends String, @Nullable String> arg) { + + } + + void parameter(@Nullable String arg) { + + } + + void finalParameter(final @Nullable String arg) { + + } + +} From 42864387bff197a5f2a4ebc37dfef6dd90393dc1 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 10 Feb 2026 16:20:29 +0000 Subject: [PATCH 135/136] Prohibit protected methods without @Override in final classes Closes gh-466 --- .../check/SpringMethodVisibilityCheck.java | 34 +++++++++++++++++-- .../checkstyle/check/messages.properties | 1 + ...MethodVisibilityFinalClassWithOverride.txt | 1 + ...isibilityFinalClassWithProtectedMethod.txt | 2 ++ ...hodVisibilityProtectedWithPublicMethod.txt | 1 + ...ethodVisibilityFinalClassWithOverride.java | 33 ++++++++++++++++++ ...sibilityFinalClassWithProtectedMethod.java | 30 ++++++++++++++++ ...odVisibilityProtectedWithPublicMethod.java | 33 ++++++++++++++++++ .../source/MethodVisibilityWithOverride.java | 2 +- 9 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java create mode 100644 spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java index 2a32b244..ca5bd3ef 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/java/io/spring/javaformat/checkstyle/check/SpringMethodVisibilityCheck.java @@ -20,10 +20,17 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** - * Checks that protected, package-private and private classes to not have public methods - * unless they are also annotated with {@link Override @Override}. + * Check for compliance with Spring-style method visibility. Checks that: + * + *

* * @author Phillip Webb + * @author Andy Wilkinson */ public class SpringMethodVisibilityCheck extends AbstractSpringCheck { @@ -38,6 +45,9 @@ public void visitToken(DetailAST ast) { if (modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC) != null) { visitPublicMethod(modifiers, ast); } + else if (modifiers.findFirstToken(TokenTypes.LITERAL_PROTECTED) != null) { + visitProtectedMethod(modifiers, ast); + } } private void visitPublicMethod(DetailAST modifiers, DetailAST method) { @@ -56,6 +66,18 @@ private void visitPublicMethod(DetailAST modifiers, DetailAST method) { log(ident.getLineNo(), ident.getColumnNo(), "methodvisibility.publicMethod", ident.getText()); } + private void visitProtectedMethod(DetailAST modifiers, DetailAST method) { + if (hasOverrideAnnotation(modifiers)) { + return; + } + DetailAST classDef = getClassDef(method.getParent()); + if (classDef == null || !isFinal(classDef)) { + return; + } + DetailAST ident = method.findFirstToken(TokenTypes.IDENT); + log(ident.getLineNo(), ident.getColumnNo(), "methodvisibility.protectedMethodInFinalClass", ident.getText()); + } + private boolean hasOverrideAnnotation(DetailAST modifiers) { DetailAST candidate = modifiers.getFirstChild(); while (candidate != null) { @@ -98,4 +120,12 @@ private boolean isPublicOrProtected(DetailAST ast) { || modifiers.findFirstToken(TokenTypes.LITERAL_PROTECTED) != null; } + private boolean isFinal(DetailAST ast) { + DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); + if (modifiers == null) { + return false; + } + return modifiers.findFirstToken(TokenTypes.FINAL) != null; + } + } diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties index ed574211..eaaec1f1 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties +++ b/spring-javaformat/spring-javaformat-checkstyle/src/main/resources/io/spring/javaformat/checkstyle/check/messages.properties @@ -31,6 +31,7 @@ lambda.unnecessaryBlock=Lambda block is unnecessary. lambda.unnecessaryParen=Lambda argument has unnecessary parentheses. methodorder.outOfOrder=Method ''{0}'' is out of order, expected {1}. methodvisibility.publicMethod=Method ''{0}'' in private class should not be public. +methodvisibility.protectedMethodInFinalClass=Method ''{0}'' in final class should be package-private rather than protected. nothis.unexpected=Reference to instance variable ''{0}'' should not use \"this.\". nullability.bannedImport=Nullability should be expressed using JSpecify. Replace ''{0}'' with ''{1}''. nullability.annotationLocation=''{0}'' should only be used immediately before a type. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithOverride.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt new file mode 100644 index 00000000..20293abd --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityFinalClassWithProtectedMethod.txt @@ -0,0 +1,2 @@ ++Method 'bad' in final class should be package-private rather than protected. ++Method 'badStatic' in final class should be package-private rather than protected. diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt new file mode 100644 index 00000000..23435c7a --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/check/MethodVisibilityProtectedWithPublicMethod.txt @@ -0,0 +1 @@ ++0 errors diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java new file mode 100644 index 00000000..6a74b3b7 --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithOverride.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Good visibility because, while class is final, protected methods are + * annotated with {@code @Override}. + * + * @author Andy Wilkinson + */ +public final class MethodVisibilityFinalClassWithOverride { + + @Override + protected void good() { + } + + @Override + protected static void goodStatic() { + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java new file mode 100644 index 00000000..7452e21f --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityFinalClassWithProtectedMethod.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Bad visibility because class is final. + * + * @author Andy Wilkinson + */ +public final class MethodVisibilityFinalClassWithProtectedMethod { + + protected void bad() { + } + + protected static void badStatic() { + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java new file mode 100644 index 00000000..fe36ec8c --- /dev/null +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityProtectedWithPublicMethod.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-present the original author or authors. + * + * 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 + * + * https://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. + */ + +/** + * Good visibility because class is protected. + * + * @author Phillip Webb + */ +protected class MethodVisibilityProtectedWithPublicMethod { + + MethodVisibilityPackagePrivateWithPublicMethod() { + } + + public void bad() { + } + + public static void badStatic() { + } + +} diff --git a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java index f1c9d6f4..c4b8d3b3 100644 --- a/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java +++ b/spring-javaformat/spring-javaformat-checkstyle/src/test/resources/source/MethodVisibilityWithOverride.java @@ -15,7 +15,7 @@ */ /** - * Bad visibility because of public method. + * Good visibility because of {@code @Override} annotation. * * @author Phillip Webb */ From 93837e136cb4cbe3a18e38dbb19765701d5fc9ee Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 30 Mar 2026 11:20:30 +0100 Subject: [PATCH 136/136] Upgrade to Plexus Utils 4.0.3 Closes gh-469 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 57d056c6..c07e765a 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ 5.8.1 3.21.0-GA 1.2 - 3.5.1 + 4.0.3 1.16.0 1.16.0 3.0.3

LJ=2?zE9odZWt9K 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 vDu^)ELEu9M2Hk|w^N;3 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�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 z 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%0D+8wT!8Jy~q=_m&Ay@#lr=UDmO82S>83r=u)(0 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