mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
IDEA-359853 introduce JavaBinaryOperations
GitOrigin-RevId: 8c4cd1a8fb76a7c79bce882a669af0a057045ab0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
33f7af38d9
commit
c4d2a83d30
+2
-2
@@ -21,7 +21,7 @@ import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.java.codeserver.highlighting.JavaErrorCollector;
|
||||
import com.intellij.java.codeserver.highlighting.errors.JavaCompilationError;
|
||||
import com.intellij.java.codeserver.highlighting.errors.JavaErrorKinds;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.lang.jvm.JvmModifier;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -626,7 +626,7 @@ public final class EvaluatorBuilderImpl implements EvaluatorBuilder {
|
||||
}
|
||||
}
|
||||
// unary numeric promotion if applicable
|
||||
else if (BasicExpressionParser.SHIFT_OPS.contains(operation)) {
|
||||
else if (JavaBinaryOperations.SHIFT_OPS.contains(operation)) {
|
||||
lResult = handleUnaryNumericPromotion(lType, lResult);
|
||||
rResult = handleUnaryNumericPromotion(rType, rResult);
|
||||
}
|
||||
|
||||
+4
-4
@@ -17,7 +17,7 @@ package com.siyeh.ig.bitwise;
|
||||
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.codeInspection.options.OptPane;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -93,11 +93,11 @@ public final class PointlessBitwiseExpressionInspection extends BaseInspection {
|
||||
for (int i = 0, length = operands.length; i < length; i++) {
|
||||
final PsiExpression operand = operands[i];
|
||||
if (isZero(operand)) {
|
||||
if (tokenType.equals(AND) || BasicExpressionParser.SHIFT_OPS.contains(tokenType) && previousOperand == null) {
|
||||
if (tokenType.equals(AND) || JavaBinaryOperations.SHIFT_OPS.contains(tokenType) && previousOperand == null) {
|
||||
return getText(expression, operands[0], operands[length - 1], PsiTypes.longType().equals(expression.getType()) ? "0L" : "0", ct);
|
||||
}
|
||||
else if (tokenType.equals(OR) || tokenType.equals(XOR) ||
|
||||
BasicExpressionParser.SHIFT_OPS.contains(tokenType) && previousOperand != null) {
|
||||
JavaBinaryOperations.SHIFT_OPS.contains(tokenType) && previousOperand != null) {
|
||||
return getText(expression, i == length - 1 ? expression.getTokenBeforeOperand(operand) : operand, ct);
|
||||
}
|
||||
}
|
||||
@@ -261,7 +261,7 @@ public final class PointlessBitwiseExpressionInspection extends BaseInspection {
|
||||
if (sign.equals(AND) || sign.equals(OR) || sign.equals(XOR)) {
|
||||
isPointless = booleanExpressionIsPointless(operands);
|
||||
}
|
||||
else if (BasicExpressionParser.SHIFT_OPS.contains(sign)) {
|
||||
else if (JavaBinaryOperations.SHIFT_OPS.contains(sign)) {
|
||||
isPointless = shiftExpressionIsPointless(operands);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -19,7 +19,7 @@ import com.intellij.codeInspection.CommonQuickFixBundle;
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.codeInspection.dataFlow.CommonDataflow;
|
||||
import com.intellij.codeInspection.dataFlow.rangeSet.LongRangeSet;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -108,7 +108,7 @@ public final class ShiftOutOfRangeInspection extends BaseInspection {
|
||||
super.visitBinaryExpression(expression);
|
||||
final PsiJavaToken sign = expression.getOperationSign();
|
||||
final IElementType tokenType = sign.getTokenType();
|
||||
if (!BasicExpressionParser.SHIFT_OPS.contains(tokenType)) return;
|
||||
if (!JavaBinaryOperations.SHIFT_OPS.contains(tokenType)) return;
|
||||
final PsiExpression rhs = expression.getROperand();
|
||||
if (rhs == null) return;
|
||||
final PsiType expressionType = expression.getType();
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ import com.intellij.codeInspection.dataFlow.CommonDataflow;
|
||||
import com.intellij.codeInspection.dataFlow.rangeSet.LongRangeSet;
|
||||
import com.intellij.codeInspection.dataFlow.types.DfLongType;
|
||||
import com.intellij.codeInspection.options.OptPane;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -144,7 +144,7 @@ public final class IntegerMultiplicationImplicitCastToLongInspection extends Bas
|
||||
}
|
||||
|
||||
private static boolean isShiftToken(IElementType tokenType) {
|
||||
return BasicExpressionParser.SHIFT_OPS.contains(tokenType);
|
||||
return JavaBinaryOperations.SHIFT_OPS.contains(tokenType);
|
||||
}
|
||||
|
||||
private static boolean isShiftEqToken(@NotNull IElementType tokenType) {
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ package com.siyeh.ig.numeric;
|
||||
|
||||
import com.intellij.codeInspection.CleanupLocalInspectionTool;
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -171,7 +171,7 @@ public final class UnnecessaryExplicitNumericCastInspection extends BaseInspecti
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (BasicExpressionParser.SHIFT_OPS.contains(tokenType)) {
|
||||
else if (JavaBinaryOperations.SHIFT_OPS.contains(tokenType)) {
|
||||
final PsiExpression firstOperand = polyadicExpression.getOperands()[0];
|
||||
if (!PsiTreeUtil.isAncestor(firstOperand, expression, false)) {
|
||||
return true;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package com.siyeh.ig.psiutils;
|
||||
|
||||
import com.intellij.codeInsight.ExceptionUtil;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
@@ -605,7 +605,7 @@ public final class ExpectedTypeUtils {
|
||||
}
|
||||
|
||||
private static boolean isShiftOperation(@NotNull IElementType sign) {
|
||||
return BasicExpressionParser.SHIFT_OPS.contains(sign);
|
||||
return JavaBinaryOperations.SHIFT_OPS.contains(sign);
|
||||
}
|
||||
|
||||
private static boolean isOperatorAssignmentOperation(@NotNull IElementType sign) {
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.editorActions;
|
||||
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
|
||||
@@ -16,11 +16,11 @@ public final class JavaTypingTokenSets {
|
||||
JavaTokenType.STRING_LITERAL, JavaTokenType.TEXT_BLOCK_LITERAL);
|
||||
|
||||
public static final TokenSet UNWANTED_TOKEN_BEFORE_QUESTION =
|
||||
TokenSet.orSet(BasicExpressionParser.ASSIGNMENT_OPS, TokenSet.create(JavaTokenType.QUEST, JavaTokenType.COLON));
|
||||
TokenSet.orSet(JavaBinaryOperations.ASSIGNMENT_OPS, TokenSet.create(JavaTokenType.QUEST, JavaTokenType.COLON));
|
||||
|
||||
public static final TokenSet WANTED_TOKEN_BEFORE_QUESTION =
|
||||
// Tokens that may appear before ?: in polyadic expression that may have non-boolean result
|
||||
TokenSet.orSet(
|
||||
TokenSet.create(JavaTokenType.OR, JavaTokenType.XOR, JavaTokenType.AND),
|
||||
BasicExpressionParser.SHIFT_OPS, BasicExpressionParser.ADDITIVE_OPS, BasicExpressionParser.MULTIPLICATIVE_OPS);
|
||||
JavaBinaryOperations.SHIFT_OPS, JavaBinaryOperations.ADDITIVE_OPS, JavaBinaryOperations.MULTIPLICATIVE_OPS);
|
||||
}
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.lang.java.parser
|
||||
|
||||
import com.intellij.java.frontback.psi.impl.syntax.BasicJavaElementTypeConverter
|
||||
import com.intellij.java.syntax.parser.ExpressionParser
|
||||
import com.intellij.platform.syntax.psi.asTokenSet
|
||||
import com.intellij.psi.tree.TokenSet
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@ApiStatus.Internal
|
||||
object JavaBinaryOperations {
|
||||
// todo replace BasicJavaElementTypeConverter with another Converter when parsers are merged
|
||||
@JvmField val ASSIGNMENT_OPS: TokenSet = ExpressionParser.ASSIGNMENT_OPS.asTokenSet(BasicJavaElementTypeConverter)
|
||||
@JvmField val SHIFT_OPS: TokenSet = ExpressionParser.SHIFT_OPS.asTokenSet(BasicJavaElementTypeConverter)
|
||||
@JvmField val ADDITIVE_OPS: TokenSet = ExpressionParser.ADDITIVE_OPS.asTokenSet(BasicJavaElementTypeConverter)
|
||||
@JvmField val MULTIPLICATIVE_OPS: TokenSet = ExpressionParser.MULTIPLICATIVE_OPS.asTokenSet(BasicJavaElementTypeConverter)
|
||||
}
|
||||
+7
-2
@@ -3,7 +3,7 @@ package com.intellij.psi.impl.source;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.tree.TreeUtil;
|
||||
@@ -19,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -143,6 +144,10 @@ public final class BasicJavaAstTreeUtil {
|
||||
return findChildByType(astNode, ParentAwareTokenSet.create(targets));
|
||||
}
|
||||
|
||||
public static @Nullable ASTNode findChildByType(@Nullable ASTNode astNode, Collection<IElementType> targets) {
|
||||
return findChildByType(astNode, ParentAwareTokenSet.create(targets));
|
||||
}
|
||||
|
||||
public static @Nullable ASTNode findChildByType(@Nullable ASTNode astNode, ParentAwareTokenSet targets) {
|
||||
if (astNode == null) {
|
||||
return null;
|
||||
@@ -668,7 +673,7 @@ public final class BasicJavaAstTreeUtil {
|
||||
if (expr == null) {
|
||||
return null;
|
||||
}
|
||||
ASTNode ASTNode = findChildByType(expr, BasicExpressionParser.ASSIGNMENT_OPS.getTypes());
|
||||
ASTNode ASTNode = findChildByType(expr, JavaBinaryOperations.ASSIGNMENT_OPS.getTypes());
|
||||
if (ASTNode == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import com.intellij.formatting.Spacing;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.lang.java.JavaParserDefinition;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.lexer.Lexer;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -1110,13 +1110,13 @@ public final class JavaSpacePropertyProcessor extends JavaElementVisitor {
|
||||
else if (i == JavaTokenType.GT || i == JavaTokenType.LT || i == JavaTokenType.GE || i == JavaTokenType.LE) {
|
||||
createSpaceInCode(mySettings.SPACE_AROUND_RELATIONAL_OPERATORS);
|
||||
}
|
||||
else if (BasicExpressionParser.ADDITIVE_OPS.contains(i)) {
|
||||
else if (JavaBinaryOperations.ADDITIVE_OPS.contains(i)) {
|
||||
createSpaceInCode(mySettings.SPACE_AROUND_ADDITIVE_OPERATORS);
|
||||
}
|
||||
else if (BasicExpressionParser.MULTIPLICATIVE_OPS.contains(i)) {
|
||||
else if (JavaBinaryOperations.MULTIPLICATIVE_OPS.contains(i)) {
|
||||
createSpaceInCode(mySettings.SPACE_AROUND_MULTIPLICATIVE_OPERATORS);
|
||||
}
|
||||
else if (BasicExpressionParser.SHIFT_OPS.contains(i)) {
|
||||
else if (JavaBinaryOperations.SHIFT_OPS.contains(i)) {
|
||||
createSpaceInCode(mySettings.SPACE_AROUND_SHIFT_OPERATORS);
|
||||
}
|
||||
else {
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
package com.intellij.psi.impl.source.tree.java;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
|
||||
@@ -95,7 +95,7 @@ public class PsiAssignmentExpressionImpl extends ExpressionPsiElement implements
|
||||
}
|
||||
}
|
||||
|
||||
private static final TokenSet OUR_OPERATIONS_BIT_SET = BasicExpressionParser.ASSIGNMENT_OPS;
|
||||
private static final TokenSet OUR_OPERATIONS_BIT_SET = JavaBinaryOperations.ASSIGNMENT_OPS;
|
||||
|
||||
@Override
|
||||
public void accept(@NotNull PsiElementVisitor visitor) {
|
||||
|
||||
+4
-4
@@ -2,7 +2,7 @@
|
||||
package com.intellij.psi.impl.source.tree.java;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.java.parser.BasicExpressionParser;
|
||||
import com.intellij.lang.java.parser.JavaBinaryOperations;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -117,13 +117,13 @@ public final class ReplaceExpressionUtil {
|
||||
else if (opType == JavaTokenType.LT || opType == JavaTokenType.GT || opType == JavaTokenType.LE || opType == JavaTokenType.GE) {
|
||||
return 8;
|
||||
}
|
||||
else if (BasicExpressionParser.SHIFT_OPS.contains(opType)) {
|
||||
else if (JavaBinaryOperations.SHIFT_OPS.contains(opType)) {
|
||||
return 9;
|
||||
}
|
||||
else if (BasicExpressionParser.ADDITIVE_OPS.contains(opType)) {
|
||||
else if (JavaBinaryOperations.ADDITIVE_OPS.contains(opType)) {
|
||||
return 10;
|
||||
}
|
||||
else if (BasicExpressionParser.MULTIPLICATIVE_OPS.contains(opType)) {
|
||||
else if (JavaBinaryOperations.MULTIPLICATIVE_OPS.contains(opType)) {
|
||||
return 11;
|
||||
}
|
||||
return 8;
|
||||
|
||||
@@ -229,6 +229,11 @@ public class FrontBackElementTypeTest extends AbstractBasicJavaParsingTestCase {
|
||||
if (path.toString().endsWith("BasicJavaParserUtil.java")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// exclude, contains refs to `BasicJavaElementTypeConverter` which is mixed up with `BasicJavaElementType`
|
||||
if (path.toString().endsWith("JavaBinaryOperations.kt")) {
|
||||
continue;
|
||||
}
|
||||
String content = FileUtil.loadFile(path.toFile());
|
||||
int start = 0;
|
||||
int find = content.indexOf(target, start);
|
||||
|
||||
Reference in New Issue
Block a user