Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lpd 45574 20250301 Switch Expression #3196

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1156,6 +1156,16 @@ else if (detailAST.getType() == TokenTypes.LITERAL_SWITCH) {
parsedJavaClass, caseGroupDetailAST, fileContents,
maxLineLength);
}

List<DetailAST> switchRuleDetailASTList =
DetailASTUtil.getAllChildTokens(
detailAST, false, TokenTypes.SWITCH_RULE);

for (DetailAST switchRuleDetailAST : switchRuleDetailASTList) {
parsedJavaClass = _parseDetailAST(
parsedJavaClass, switchRuleDetailAST, fileContents,
maxLineLength);
}
}
else if (detailAST.getType() == TokenTypes.LITERAL_TRY) {
List<DetailAST> literalCatchDetailASTList =
Expand Down Expand Up @@ -1193,6 +1203,36 @@ else if (detailAST.getType() == TokenTypes.LITERAL_TRY) {
}
}

// if ((detailAST.getType() == TokenTypes.SWITCH_RULE) &&
// (detailAST.findFirstToken(TokenTypes.EXPR) == null)) {
//
// DetailAST firstChildDetailAST = detailAST.findFirstToken(
// TokenTypes.LAMBDA);
//
// parsedJavaClass = _parseDetailAST(
// parsedJavaClass, firstChildDetailAST.getNextSibling(),
// fileContents, maxLineLength);
// }




// if ((detailAST.getType() == TokenTypes.SWITCH_RULE)) {
//
// DetailAST lambdaDetailAST = detailAST.findFirstToken(
// TokenTypes.LAMBDA);
//
// DetailAST nextSiblingDetailAST = lambdaDetailAST.getNextSibling();
//
// if (nextSiblingDetailAST != null && nextSiblingDetailAST.getType() != TokenTypes.SLIST) {
//
// parsedJavaClass = _parseDetailAST(
// parsedJavaClass, nextSiblingDetailAST,
// fileContents, maxLineLength);
// }
//
// }

return parsedJavaClass;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/**
* SPDX-FileCopyrightText: (c) 2025 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.portal.tools.java.parser;

import com.liferay.petra.string.StringBundler;

import java.util.ArrayList;
import java.util.List;

/**
* @author Alan Huang
*/
public class JavaSwitchRuleStatement extends BaseJavaExpression {

public void addSwitchRuleJavaExpression(
JavaExpression switchRuleJavaExpression) {

_switchRuleJavaExpressions.add(switchRuleJavaExpression);
}

public void setDefault(boolean isDefault) {
_isDefault = isDefault;
}

public void setLambdaActionJavaExpression(
JavaExpression lambdaActionJavaExpression) {

_lambdaActionJavaExpression = lambdaActionJavaExpression;
}

@Override
protected String getString(
String indent, String prefix, String suffix, int maxLineLength,
boolean forceLineBreak) {

StringBundler sb = new StringBundler();

if (_isDefault) {
appendNewLine(
sb, _switchRuleJavaExpressions, indent, prefix + "default",
// " -> " + suffix, maxLineLength);
" "+ suffix + " ", maxLineLength);
}
else {
appendNewLine(
sb, _switchRuleJavaExpressions, indent, prefix + "case ",
// " -> " + suffix, maxLineLength);
" " + suffix + " ", maxLineLength);
}

// if (_lambdaActionJavaExpression != null) {
// append(sb, _lambdaActionJavaExpression, indent, maxLineLength);
// }
if (_lambdaActionJavaExpression != null) {
// appendAssignValue(
// sb, _lambdaActionJavaExpression, trimTrailingSpaces(indent),
// suffix, maxLineLength, forceLineBreak);
sb.append(_lambdaActionJavaExpression.toString());
sb.append(";");

}

return sb.toString();
}

private boolean _isDefault;
private JavaExpression _lambdaActionJavaExpression;
private final List<JavaExpression> _switchRuleJavaExpressions =
new ArrayList<>();

}
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ public static DetailAST getClosingDetailAST(DetailAST detailAST) {
return detailAST.findFirstToken(TokenTypes.LCURLY);
}

if (detailAST.getType() == TokenTypes.SWITCH_RULE) {
return detailAST.findFirstToken(TokenTypes.LAMBDA);
}

if (detailAST.getType() == TokenTypes.LABELED_STAT) {
detailAST = detailAST.getFirstChild();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import com.liferay.portal.tools.java.parser.JavaSimpleValue;
import com.liferay.portal.tools.java.parser.JavaStaticInitialization;
import com.liferay.portal.tools.java.parser.JavaSwitchCaseStatement;
import com.liferay.portal.tools.java.parser.JavaSwitchRuleStatement;
import com.liferay.portal.tools.java.parser.JavaSwitchStatement;
import com.liferay.portal.tools.java.parser.JavaSynchronizedStatement;
import com.liferay.portal.tools.java.parser.JavaTerm;
Expand Down Expand Up @@ -105,6 +106,9 @@ public static JavaTerm parseJavaTerm(DetailAST detailAST) {
else if (detailAST.getType() == TokenTypes.CASE_GROUP) {
javaTerm = _parseJavaSwitchCaseStatement(detailAST);
}
else if (detailAST.getType() == TokenTypes.SWITCH_RULE) {
javaTerm = _parseJavaSwitchRuleStatement(detailAST);
}
else if (detailAST.getType() == TokenTypes.ANNOTATION_FIELD_DEF) {
javaTerm = _parseJavaAnnotationFieldDefinition(detailAST);
}
Expand Down Expand Up @@ -1186,6 +1190,9 @@ else if (detailAST.getType() == TokenTypes.LITERAL_NEW) {
}
}
}
else if (detailAST.getType() == TokenTypes.LITERAL_THROW) {
javaExpression = _parseJavaExpression(detailAST.getFirstChild());
}
else if (detailAST.getType() == TokenTypes.METHOD_CALL) {
return _parseJavaMethodCall(detailAST);
}
Expand Down Expand Up @@ -1685,6 +1692,43 @@ private static JavaSwitchCaseStatement _parseJavaSwitchCaseStatement(
return javaSwitchCaseStatement;
}

private static JavaSwitchRuleStatement _parseJavaSwitchRuleStatement(
DetailAST switchRuleDetailAST) {

JavaSwitchRuleStatement javaSwitchRuleStatement =
new JavaSwitchRuleStatement();

DetailAST firstChildDetailAST = switchRuleDetailAST.getFirstChild();

if (firstChildDetailAST.getType() == TokenTypes.LITERAL_DEFAULT) {
javaSwitchRuleStatement.setDefault(true);
}
else {
List<DetailAST> exprCaseDetailASTList =
DetailASTUtil.getAllChildTokens(
firstChildDetailAST, false, TokenTypes.EXPR);

for (DetailAST exprCaseDetailAST : exprCaseDetailASTList) {
javaSwitchRuleStatement.addSwitchRuleJavaExpression(
_parseJavaExpression(exprCaseDetailAST));
}
}

DetailAST lambdaDetailAST = switchRuleDetailAST.findFirstToken(
TokenTypes.LAMBDA);

DetailAST nextSiblingDetailAST = lambdaDetailAST.getNextSibling();

if (nextSiblingDetailAST.getType() != TokenTypes.SLIST) {
// if (nextSiblingDetailAST.getType() == TokenTypes.EXPR) {
javaSwitchRuleStatement.setLambdaActionJavaExpression(
_parseJavaExpression(nextSiblingDetailAST));
// }
}

return javaSwitchRuleStatement;
}

private static JavaSwitchStatement _parseJavaSwitchStatement(
DetailAST literalSwitchDetailAST) {

Expand Down