mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WrapLongWithMathToIntExact intention checks availability inside of intention (based on IDEA-CR-6351)
This commit is contained in:
@@ -267,5 +267,5 @@ public abstract class QuickFixFactory {
|
||||
public abstract IntentionAction addMethodQualifierFix(@NotNull PsiMethodCallExpression methodCall);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createWrapLongWithMathToIntExactFix(@NotNull PsiExpression expression);
|
||||
public abstract IntentionAction createWrapLongWithMathToIntExactFix(@Nullable PsiType type, @NotNull PsiExpression expression);
|
||||
}
|
||||
|
||||
+2
-6
@@ -564,9 +564,7 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createAddTypeCastFix(lType, expression));
|
||||
}
|
||||
if (expression != null) {
|
||||
if (PsiType.INT.equals(lType) && rType != null && (PsiType.LONG.equals(rType) || PsiType.LONG.getBoxedTypeName().equals(rType.getCanonicalText(false)))) {
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createWrapLongWithMathToIntExactFix(expression));
|
||||
}
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createWrapLongWithMathToIntExactFix(lType, expression));
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createWrapExpressionFix(lType, expression));
|
||||
AddTypeArgumentsConditionalFix.register(highlightInfo, expression, lType);
|
||||
}
|
||||
@@ -1418,9 +1416,7 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createConvertSwitchToIfIntention(statement));
|
||||
if (PsiType.LONG.equals(type) || PsiType.FLOAT.equals(type) || PsiType.DOUBLE.equals(type)) {
|
||||
QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createAddTypeCastFix(PsiType.INT, expression));
|
||||
if (PsiType.LONG.equals(type)) {
|
||||
QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createWrapLongWithMathToIntExactFix(expression));
|
||||
}
|
||||
QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createWrapLongWithMathToIntExactFix(PsiType.INT, expression));
|
||||
}
|
||||
if (requiredLevel != null) {
|
||||
QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createIncreaseLanguageLevelFix(requiredLevel));
|
||||
|
||||
+21
-4
@@ -16,12 +16,16 @@
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil;
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction;
|
||||
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@@ -36,8 +40,11 @@ public class WrapLongWithMathToIntExactFix extends LocalQuickFixAndIntentionActi
|
||||
|
||||
public final static MyMethodArgumentFixerFactory REGISTAR = new MyMethodArgumentFixerFactory();
|
||||
|
||||
public WrapLongWithMathToIntExactFix(final @NotNull PsiExpression expression) {
|
||||
private final PsiType myType;
|
||||
|
||||
public WrapLongWithMathToIntExactFix(final PsiType type, final @NotNull PsiExpression expression) {
|
||||
super(expression);
|
||||
myType = type;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -60,7 +67,17 @@ public class WrapLongWithMathToIntExactFix extends LocalQuickFixAndIntentionActi
|
||||
@NotNull PsiFile file,
|
||||
@NotNull PsiElement startElement,
|
||||
@NotNull PsiElement endElement) {
|
||||
return startElement.isValid() && startElement.getManager().isInProject(startElement) && PsiUtil.isLanguageLevel8OrHigher(startElement);
|
||||
return startElement.isValid() &&
|
||||
startElement.getManager().isInProject(startElement) &&
|
||||
PsiUtil.isLanguageLevel8OrHigher(startElement) &&
|
||||
areSameTypes(myType, PsiType.INT) &&
|
||||
areSameTypes(((PsiExpression) startElement).getType(), PsiType.LONG);
|
||||
}
|
||||
|
||||
private static boolean areSameTypes(@Nullable PsiType type, @NotNull PsiPrimitiveType expected) {
|
||||
return !(type == null ||
|
||||
!type.isValid() ||
|
||||
(!type.equals(expected) && !expected.getBoxedTypeName().equals(type.getCanonicalText(false))));
|
||||
}
|
||||
|
||||
@Nls
|
||||
@@ -106,8 +123,8 @@ public class WrapLongWithMathToIntExactFix extends LocalQuickFixAndIntentionActi
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areTypesConvertible(final PsiType exprType, final PsiType parameterType, final PsiElement context) {
|
||||
return parameterType.isConvertibleFrom(exprType) || (PsiType.INT.equals(parameterType) && PsiType.LONG.equals(exprType));
|
||||
public boolean areTypesConvertible(final PsiType exprType, final PsiType parameterType, @NotNull final PsiElement context) {
|
||||
return parameterType.isConvertibleFrom(exprType) || (areSameTypes(parameterType, PsiType.INT) && areSameTypes(exprType, PsiType.LONG));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -611,7 +611,7 @@ public class EmptyQuickFixFactory extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createWrapLongWithMathToIntExactFix(@NotNull PsiExpression expression) {
|
||||
public IntentionAction createWrapLongWithMathToIntExactFix(@Nullable PsiType type, @NotNull PsiExpression expression) {
|
||||
return QuickFixes.EMPTY_FIX;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -770,8 +770,8 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createWrapLongWithMathToIntExactFix(@NotNull PsiExpression expression) {
|
||||
return new WrapLongWithMathToIntExactFix(expression);
|
||||
public IntentionAction createWrapLongWithMathToIntExactFix(@Nullable PsiType type, @NotNull PsiExpression expression) {
|
||||
return new WrapLongWithMathToIntExactFix(type, expression);
|
||||
}
|
||||
|
||||
private static boolean timeToOptimizeImports(@NotNull PsiFile file) {
|
||||
|
||||
Reference in New Issue
Block a user