From c64a947f4512b66b2961a7df8c81278d101c274e Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Mon, 9 Dec 2024 17:10:21 +0800 Subject: [PATCH 01/11] LPD-43765 Add TransformUtilUtilCheck --- .../check/TransformUtilUtilCheck.java | 115 ++++++++++++++++++ .../src/main/resources/checkstyle.xml | 5 + 2 files changed, 120 insertions(+) create mode 100644 modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java new file mode 100644 index 00000000000000..6190229db7a77b --- /dev/null +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java @@ -0,0 +1,115 @@ +/** + * SPDX-FileCopyrightText: (c) 2024 Liferay, Inc. https://liferay.com + * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06 + */ + +package com.liferay.source.formatter.checkstyle.check; + +import com.liferay.portal.kernel.util.ListUtil; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +import java.util.List; + +/** + * @author Alan Huang + */ +public class TransformUtilUtilCheck extends BaseCheck { + + @Override + public int[] getDefaultTokens() { + return new int[] {TokenTypes.CTOR_DEF, TokenTypes.METHOD_DEF}; + } + + @Override + protected void doVisitToken(DetailAST detailAST) { + List forEachClauseDetailASTList = getAllChildTokens( + detailAST, true, TokenTypes.FOR_EACH_CLAUSE); + + for (DetailAST forEachClauseDetailAST : forEachClauseDetailASTList) { + DetailAST exprDetailAST = forEachClauseDetailAST.findFirstToken( + TokenTypes.EXPR); + + DetailAST firstChildDetailAST = exprDetailAST.getFirstChild(); + + if (firstChildDetailAST.getType() != TokenTypes.IDENT) { + return; + } + + String variableTypeName = getVariableTypeName( + firstChildDetailAST, firstChildDetailAST.getText(), false); + + if ((variableTypeName == null) || + !variableTypeName.equals("List")) { + + return; + } + + DetailAST parentDetailAST = forEachClauseDetailAST.getParent(); + + DetailAST nextSiblingDetailAST = parentDetailAST.getNextSibling(); + + if ((nextSiblingDetailAST == null) || + (nextSiblingDetailAST.getType() != TokenTypes.LITERAL_RETURN)) { + + return; + } + + firstChildDetailAST = nextSiblingDetailAST.getFirstChild(); + + if (firstChildDetailAST.getType() != TokenTypes.EXPR) { + return; + } + + firstChildDetailAST = firstChildDetailAST.getFirstChild(); + + if (firstChildDetailAST.getType() != TokenTypes.IDENT) { + return; + } + + String returnVariableName = firstChildDetailAST.getText(); + + String returnVariableTypeName = getVariableTypeName( + firstChildDetailAST, returnVariableName, false); + + if ((returnVariableTypeName == null) || + !returnVariableTypeName.equals("List")) { + + return; + } + + nextSiblingDetailAST = forEachClauseDetailAST.getNextSibling(); + + if (nextSiblingDetailAST.getType() != TokenTypes.RPAREN) { + return; + } + + nextSiblingDetailAST = nextSiblingDetailAST.getNextSibling(); + + if (nextSiblingDetailAST.getType() != TokenTypes.SLIST) { + return; + } + + List branchingStatementDetailASTList = getAllChildTokens( + nextSiblingDetailAST, true, TokenTypes.LITERAL_RETURN); + + if (ListUtil.isNotEmpty(branchingStatementDetailASTList)) { + return; + } + + List methodCallDetailASTList = getMethodCalls( + nextSiblingDetailAST, returnVariableName, "add"); + + if (ListUtil.isEmpty(methodCallDetailASTList)) { + return; + } + + log(forEachClauseDetailAST, _MSG_USE_TRANSFORM_UTIL_TRANSFORM); + } + } + + private static final String _MSG_USE_TRANSFORM_UTIL_TRANSFORM = + "transform.util.transform.use"; + +} \ No newline at end of file diff --git a/modules/util/source-formatter/src/main/resources/checkstyle.xml b/modules/util/source-formatter/src/main/resources/checkstyle.xml index 29f0943a7684c3..1274faaeb8ca63 100644 --- a/modules/util/source-formatter/src/main/resources/checkstyle.xml +++ b/modules/util/source-formatter/src/main/resources/checkstyle.xml @@ -889,6 +889,11 @@ + + + + + From 88da589e2e9cfc105f1e6eb7a5d3a9821e435f75 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Tue, 10 Dec 2024 02:58:12 +0800 Subject: [PATCH 02/11] LPD-43765 Skip assignment to variable that is not defined in for-each block --- .../check/TransformUtilUtilCheck.java | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java index 6190229db7a77b..5f37a13a1097c8 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java @@ -27,6 +27,7 @@ protected void doVisitToken(DetailAST detailAST) { List forEachClauseDetailASTList = getAllChildTokens( detailAST, true, TokenTypes.FOR_EACH_CLAUSE); + outerLoop: for (DetailAST forEachClauseDetailAST : forEachClauseDetailASTList) { DetailAST exprDetailAST = forEachClauseDetailAST.findFirstToken( TokenTypes.EXPR); @@ -98,11 +99,37 @@ protected void doVisitToken(DetailAST detailAST) { return; } - List methodCallDetailASTList = getMethodCalls( - nextSiblingDetailAST, returnVariableName, "add"); + List assignDetailASTList = getAllChildTokens( + detailAST, true, TokenTypes.ASSIGN); - if (ListUtil.isEmpty(methodCallDetailASTList)) { - return; + for (DetailAST assignDetailAST : assignDetailASTList) { + parentDetailAST = assignDetailAST.getParent(); + + if (parentDetailAST.getType() != TokenTypes.EXPR) { + continue; + } + + String name = getName(assignDetailAST); + + if (name == null) { + continue outerLoop; + } + + DetailAST variableDefinitionDetailAST = + getVariableDefinitionDetailAST( + assignDetailAST, name, false); + + if (variableDefinitionDetailAST == null) { + continue outerLoop; + } + + parentDetailAST = forEachClauseDetailAST.getParent(); + + if (variableDefinitionDetailAST.getLineNo() < + parentDetailAST.getLineNo()) { + + continue outerLoop; + } } log(forEachClauseDetailAST, _MSG_USE_TRANSFORM_UTIL_TRANSFORM); From b57dff1b552427fbfc11447990313f698bea5816 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Wed, 11 Dec 2024 00:46:06 +0800 Subject: [PATCH 03/11] LPD-43765 Fix --- .../check/TransformUtilUtilCheck.java | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java index 5f37a13a1097c8..baaa0dc3e0ebbd 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java @@ -35,7 +35,7 @@ protected void doVisitToken(DetailAST detailAST) { DetailAST firstChildDetailAST = exprDetailAST.getFirstChild(); if (firstChildDetailAST.getType() != TokenTypes.IDENT) { - return; + continue; } String variableTypeName = getVariableTypeName( @@ -44,7 +44,7 @@ protected void doVisitToken(DetailAST detailAST) { if ((variableTypeName == null) || !variableTypeName.equals("List")) { - return; + continue; } DetailAST parentDetailAST = forEachClauseDetailAST.getParent(); @@ -54,19 +54,19 @@ protected void doVisitToken(DetailAST detailAST) { if ((nextSiblingDetailAST == null) || (nextSiblingDetailAST.getType() != TokenTypes.LITERAL_RETURN)) { - return; + continue; } firstChildDetailAST = nextSiblingDetailAST.getFirstChild(); if (firstChildDetailAST.getType() != TokenTypes.EXPR) { - return; + continue; } firstChildDetailAST = firstChildDetailAST.getFirstChild(); if (firstChildDetailAST.getType() != TokenTypes.IDENT) { - return; + continue; } String returnVariableName = firstChildDetailAST.getText(); @@ -77,26 +77,52 @@ protected void doVisitToken(DetailAST detailAST) { if ((returnVariableTypeName == null) || !returnVariableTypeName.equals("List")) { - return; + continue; + } + + DetailAST returnVariableDefinitionDetailAST = + getVariableDefinitionDetailAST( + firstChildDetailAST, returnVariableName, false); + + if ((returnVariableDefinitionDetailAST == null) || + !isAssignNewArrayList(returnVariableDefinitionDetailAST)) { + + continue; + } + + List variableCallerDetailASTList = + getVariableCallerDetailASTList( + returnVariableDefinitionDetailAST, returnVariableName); + + for (DetailAST variableCallerDetailAST : + variableCallerDetailASTList) { + + int lineNumber = variableCallerDetailAST.getLineNo(); + + if (lineNumber < forEachClauseDetailAST.getLineNo()) { + continue outerLoop; + } + + break; } nextSiblingDetailAST = forEachClauseDetailAST.getNextSibling(); if (nextSiblingDetailAST.getType() != TokenTypes.RPAREN) { - return; + continue; } nextSiblingDetailAST = nextSiblingDetailAST.getNextSibling(); if (nextSiblingDetailAST.getType() != TokenTypes.SLIST) { - return; + continue; } List branchingStatementDetailASTList = getAllChildTokens( nextSiblingDetailAST, true, TokenTypes.LITERAL_RETURN); if (ListUtil.isNotEmpty(branchingStatementDetailASTList)) { - return; + continue; } List assignDetailASTList = getAllChildTokens( @@ -119,14 +145,9 @@ protected void doVisitToken(DetailAST detailAST) { getVariableDefinitionDetailAST( assignDetailAST, name, false); - if (variableDefinitionDetailAST == null) { - continue outerLoop; - } - - parentDetailAST = forEachClauseDetailAST.getParent(); - - if (variableDefinitionDetailAST.getLineNo() < - parentDetailAST.getLineNo()) { + if ((variableDefinitionDetailAST == null) || + (variableDefinitionDetailAST.getLineNo() < + forEachClauseDetailAST.getLineNo())) { continue outerLoop; } From 2504999fd0ad3f47949a3f67c8f5e96813776f23 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Wed, 11 Dec 2024 14:36:23 +0800 Subject: [PATCH 04/11] LPD-43765 Make sure we only have add calls --- .../check/TransformUtilUtilCheck.java | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java index baaa0dc3e0ebbd..c4e6764b1f29aa 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java @@ -6,6 +6,7 @@ package com.liferay.source.formatter.checkstyle.check; import com.liferay.portal.kernel.util.ListUtil; +import com.liferay.portal.kernel.util.StringUtil; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; @@ -121,12 +122,15 @@ protected void doVisitToken(DetailAST detailAST) { List branchingStatementDetailASTList = getAllChildTokens( nextSiblingDetailAST, true, TokenTypes.LITERAL_RETURN); - if (ListUtil.isNotEmpty(branchingStatementDetailASTList)) { + if (ListUtil.isNotEmpty(branchingStatementDetailASTList) || + !_containsOnlyAddMethodCalls( + nextSiblingDetailAST, returnVariableName)) { + continue; } List assignDetailASTList = getAllChildTokens( - detailAST, true, TokenTypes.ASSIGN); + nextSiblingDetailAST, true, TokenTypes.ASSIGN); for (DetailAST assignDetailAST : assignDetailASTList) { parentDetailAST = assignDetailAST.getParent(); @@ -157,6 +161,37 @@ protected void doVisitToken(DetailAST detailAST) { } } + private boolean _containsOnlyAddMethodCalls( + DetailAST detailAST, String returnVariableName) { + + List methodCallDetailASTList = getAllChildTokens( + detailAST, true, TokenTypes.METHOD_CALL); + + for (DetailAST methodCallDetailAST : methodCallDetailASTList) { + DetailAST firstChildDetailAST = methodCallDetailAST.getFirstChild(); + + if ((firstChildDetailAST == null) || + (firstChildDetailAST.getType() != TokenTypes.DOT)) { + + continue; + } + + List names = getNames(firstChildDetailAST, false); + + if ((names.size() != 2) || + !StringUtil.equals(returnVariableName, names.get(0))) { + + continue; + } + + if (!StringUtil.equals(names.get(1), "add")) { + return false; + } + } + + return true; + } + private static final String _MSG_USE_TRANSFORM_UTIL_TRANSFORM = "transform.util.transform.use"; From a8b42535b2260df2b1552601d63220807347e0fd Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Sat, 28 Dec 2024 17:51:15 +0800 Subject: [PATCH 05/11] LPD-43765 Rename --- .../{TransformUtilUtilCheck.java => TransformUtilCheck.java} | 2 +- modules/util/source-formatter/src/main/resources/checkstyle.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/{TransformUtilUtilCheck.java => TransformUtilCheck.java} (98%) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java similarity index 98% rename from modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java rename to modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index c4e6764b1f29aa..53ce4c8440f87f 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -16,7 +16,7 @@ /** * @author Alan Huang */ -public class TransformUtilUtilCheck extends BaseCheck { +public class TransformUtilCheck extends BaseCheck { @Override public int[] getDefaultTokens() { diff --git a/modules/util/source-formatter/src/main/resources/checkstyle.xml b/modules/util/source-formatter/src/main/resources/checkstyle.xml index 1274faaeb8ca63..a3029f94c6fd55 100644 --- a/modules/util/source-formatter/src/main/resources/checkstyle.xml +++ b/modules/util/source-formatter/src/main/resources/checkstyle.xml @@ -889,7 +889,7 @@ - + From e49281d82b0af226298f250fbfb1ec884e153cff Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Sat, 28 Dec 2024 18:12:56 +0800 Subject: [PATCH 06/11] LPD-43765 See LPS-167117 --- .../checkstyle/check/TransformUtilCheck.java | 13 ++++++++++++- .../src/main/resources/checkstyle.xml | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index 53ce4c8440f87f..f5fd81dfb990d0 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -157,7 +157,16 @@ protected void doVisitToken(DetailAST detailAST) { } } - log(forEachClauseDetailAST, _MSG_USE_TRANSFORM_UTIL_TRANSFORM); + String absolutePath = getAbsolutePath(); + + if (absolutePath.endsWith("ResourceImpl.java") && + absolutePath.matches(".+/internal/resource/v\\d*(_\\d+)+/.+")) { + + log(forEachClauseDetailAST, _MSG_USE_TRANSFORM); + } + else { + log(forEachClauseDetailAST, _MSG_USE_TRANSFORM_UTIL_TRANSFORM); + } } } @@ -192,6 +201,8 @@ private boolean _containsOnlyAddMethodCalls( return true; } + private static final String _MSG_USE_TRANSFORM = "transform.use"; + private static final String _MSG_USE_TRANSFORM_UTIL_TRANSFORM = "transform.util.transform.use"; diff --git a/modules/util/source-formatter/src/main/resources/checkstyle.xml b/modules/util/source-formatter/src/main/resources/checkstyle.xml index a3029f94c6fd55..2845eb435a2e3e 100644 --- a/modules/util/source-formatter/src/main/resources/checkstyle.xml +++ b/modules/util/source-formatter/src/main/resources/checkstyle.xml @@ -892,6 +892,7 @@ + From ca00ba627a635cdbed1844a01de5ed0d23431e28 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Mon, 30 Dec 2024 01:08:19 +0800 Subject: [PATCH 07/11] LPD-43765 Fix bug to make sure we only have add calls --- .../checkstyle/check/TransformUtilCheck.java | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index f5fd81dfb990d0..bb4888a4d01c46 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -104,7 +104,15 @@ protected void doVisitToken(DetailAST detailAST) { continue outerLoop; } - break; + if (lineNumber >= nextSiblingDetailAST.getLineNo()) { + break; + } + + if (!_isAddMethodCall( + variableCallerDetailAST, returnVariableName)) { + + continue outerLoop; + } } nextSiblingDetailAST = forEachClauseDetailAST.getNextSibling(); @@ -122,10 +130,7 @@ protected void doVisitToken(DetailAST detailAST) { List branchingStatementDetailASTList = getAllChildTokens( nextSiblingDetailAST, true, TokenTypes.LITERAL_RETURN); - if (ListUtil.isNotEmpty(branchingStatementDetailASTList) || - !_containsOnlyAddMethodCalls( - nextSiblingDetailAST, returnVariableName)) { - + if (ListUtil.isNotEmpty(branchingStatementDetailASTList)) { continue; } @@ -170,35 +175,29 @@ protected void doVisitToken(DetailAST detailAST) { } } - private boolean _containsOnlyAddMethodCalls( - DetailAST detailAST, String returnVariableName) { - - List methodCallDetailASTList = getAllChildTokens( - detailAST, true, TokenTypes.METHOD_CALL); - - for (DetailAST methodCallDetailAST : methodCallDetailASTList) { - DetailAST firstChildDetailAST = methodCallDetailAST.getFirstChild(); + private boolean _isAddMethodCall(DetailAST detailAST, String variableName) { + DetailAST parentDetailAST = detailAST.getParent(); - if ((firstChildDetailAST == null) || - (firstChildDetailAST.getType() != TokenTypes.DOT)) { + if (parentDetailAST.getType() != TokenTypes.DOT) { + return false; + } - continue; - } + parentDetailAST = parentDetailAST.getParent(); - List names = getNames(firstChildDetailAST, false); + if (parentDetailAST.getType() != TokenTypes.METHOD_CALL) { + return false; + } - if ((names.size() != 2) || - !StringUtil.equals(returnVariableName, names.get(0))) { + List names = getNames(detailAST.getParent(), false); - continue; - } + if ((names.size() == 2) && + StringUtil.equals(variableName, names.get(0)) && + StringUtil.equals(names.get(1), "add")) { - if (!StringUtil.equals(names.get(1), "add")) { - return false; - } + return true; } - return true; + return false; } private static final String _MSG_USE_TRANSFORM = "transform.use"; From 157bf444d1273940ea6f12da298e80465c0235bf Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Thu, 9 Jan 2025 00:35:41 +0800 Subject: [PATCH 08/11] LPD-43765 Skip unary operators see https://github.com/liferay/liferay-portal/blob/61b58512ab7f586f7ca6824d9a013acf90aafc3f/modules/apps/dynamic-data-mapping/dynamic-data-mapping-form-renderer/src/main/java/com/liferay/dynamic/data/mapping/form/renderer/internal/DDMFormPagesTemplateContextFactory.java#L225 --- .../formatter/checkstyle/check/TransformUtilCheck.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index bb4888a4d01c46..fea22181cc4958 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -127,10 +127,12 @@ protected void doVisitToken(DetailAST detailAST) { continue; } - List branchingStatementDetailASTList = getAllChildTokens( - nextSiblingDetailAST, true, TokenTypes.LITERAL_RETURN); + List childDetailASTList = getAllChildTokens( + nextSiblingDetailAST, true, TokenTypes.DEC, TokenTypes.INC, + TokenTypes.LITERAL_RETURN, TokenTypes.POST_DEC, + TokenTypes.POST_INC); - if (ListUtil.isNotEmpty(branchingStatementDetailASTList)) { + if (ListUtil.isNotEmpty(childDetailASTList)) { continue; } From e6c0856cd435411b5382cf1a8715224b90532fa9 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Mon, 13 Jan 2025 23:17:27 +0800 Subject: [PATCH 09/11] LPD-43765 Skip nested loop see https://github.com/liferay/liferay-portal/blob/b851d80b985bb65db8d131bd7f2c5ed8cbf06231/modules/apps/fragment/fragment-impl/src/main/java/com/liferay/fragment/internal/input/template/parser/FragmentEntryInputTemplateNodeContextHelperImpl.java#L758 --- .../formatter/checkstyle/check/TransformUtilCheck.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index fea22181cc4958..45bbe9345f9e71 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -128,9 +128,10 @@ protected void doVisitToken(DetailAST detailAST) { } List childDetailASTList = getAllChildTokens( - nextSiblingDetailAST, true, TokenTypes.DEC, TokenTypes.INC, + nextSiblingDetailAST, true, TokenTypes.DEC, TokenTypes.DO_WHILE, + TokenTypes.INC, TokenTypes.LITERAL_FOR, TokenTypes.LITERAL_RETURN, TokenTypes.POST_DEC, - TokenTypes.POST_INC); + TokenTypes.LITERAL_WHILE, TokenTypes.POST_INC); if (ListUtil.isNotEmpty(childDetailASTList)) { continue; From e0111b12419adb86011e68fa65e322cb8d6e0943 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Thu, 30 Jan 2025 23:15:22 +0800 Subject: [PATCH 10/11] LPD-43765 Skip some cases see https://github.com/liferay/liferay-portal/blob/c15e61abf4c6ae654f6ebf9161b1d39f0caa1fe8/modules/apps/journal/journal-service/src/main/java/com/liferay/journal/internal/transformer/JournalTransformer.java#L772 --- .../checkstyle/check/TransformUtilCheck.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index 45bbe9345f9e71..15e2b98023f6e5 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -165,6 +165,51 @@ protected void doVisitToken(DetailAST detailAST) { } } + List methodCallDetailASTList = getAllChildTokens( + nextSiblingDetailAST, true, TokenTypes.METHOD_CALL); + + for (DetailAST methodCallDetailAST : methodCallDetailASTList) { + DetailAST dotDetailAST = methodCallDetailAST.findFirstToken( + TokenTypes.DOT); + + if (dotDetailAST == null) { + continue; + } + + List names = getNames(dotDetailAST, false); + + if (names.size() != 2) { + continue; + } + + String methodCallClassName = names.get(0); + + if (methodCallClassName.equals(returnVariableName)) { + continue; + } + + DetailAST variableDefinitionDetailAST = + getVariableDefinitionDetailAST( + dotDetailAST, methodCallClassName, true); + + if (variableDefinitionDetailAST == null) { + continue; + } + + if (variableDefinitionDetailAST.getLineNo() < + forEachClauseDetailAST.getLineNo()) { + + String methodCallMethodName = names.get(1); + + if (methodCallMethodName.startsWith("add") || + methodCallMethodName.startsWith("put") || + methodCallMethodName.startsWith("set")) { + + continue outerLoop; + } + } + } + String absolutePath = getAbsolutePath(); if (absolutePath.endsWith("ResourceImpl.java") && From f01a28d2fe933226988d583d8bb4dbf137dc9355 Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Wed, 12 Feb 2025 01:58:08 +0800 Subject: [PATCH 11/11] LPD-43765 Skip if type contains < [ see https://github.com/liferay/liferay-portal/blob/45a3a56c30f40789ae3b781b002b580efbc0f82c/modules/apps/commerce/commerce-inventory-service/src/main/java/com/liferay/commerce/inventory/service/impl/CommerceInventoryWarehouseItemLocalServiceImpl.java#L670 --- .../checkstyle/check/TransformUtilCheck.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java index 15e2b98023f6e5..2b2b9d716e83b8 100644 --- a/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java +++ b/modules/util/source-formatter/src/main/java/com/liferay/source/formatter/checkstyle/check/TransformUtilCheck.java @@ -40,14 +40,22 @@ protected void doVisitToken(DetailAST detailAST) { } String variableTypeName = getVariableTypeName( - firstChildDetailAST, firstChildDetailAST.getText(), false); + firstChildDetailAST, firstChildDetailAST.getText(), true); if ((variableTypeName == null) || - !variableTypeName.equals("List")) { + (!variableTypeName.startsWith("List<") && + !variableTypeName.endsWith(">"))) { continue; } + String typeArguments = variableTypeName.substring( + 5, variableTypeName.length() - 1); + + if (typeArguments.contains("<") || typeArguments.contains("[")) { + continue; + } + DetailAST parentDetailAST = forEachClauseDetailAST.getParent(); DetailAST nextSiblingDetailAST = parentDetailAST.getNextSibling();