mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
'cast parameter' fix if spread operator used
This commit is contained in:
+2
-3
@@ -21,7 +21,6 @@ import com.intellij.diagnostic.LogMessageEx;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiSubstitutor;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -35,7 +34,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssign
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrSafeCastExpression;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
|
||||
|
||||
/**
|
||||
* @author Maxim.Medvedev
|
||||
@@ -45,7 +44,7 @@ public class GrCastFix extends GroovyFix implements LocalQuickFix {
|
||||
private PsiType myExpectedType;
|
||||
|
||||
public GrCastFix(PsiType expectedType, GrExpression expression) {
|
||||
myExpectedType = TypesUtil.substituteBoxAndNormalizeType(expectedType, PsiSubstitutor.EMPTY, null, expression);
|
||||
myExpectedType = PsiImplUtil.normalizeWildcardTypeByPosition(expectedType, expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+24
-4
@@ -60,6 +60,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariableDeclaration;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrSpreadArgument;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrReturnStatement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrThrowStatement;
|
||||
@@ -85,6 +86,7 @@ import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -838,6 +840,11 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection {
|
||||
|
||||
private static LocalQuickFix[] genCastFixes(GrSignature signature, PsiType[] argumentTypes, @Nullable GrArgumentList argumentList) {
|
||||
if (argumentList == null) return LocalQuickFix.EMPTY_ARRAY;
|
||||
final List<GrExpression> args = getExpressionArgumentsOfCall(argumentList);
|
||||
|
||||
if (args == null) {
|
||||
return LocalQuickFix.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
final List<GrClosureSignature> signatures = GrClosureSignatureUtil.generateSimpleSignature(signature);
|
||||
|
||||
@@ -855,8 +862,6 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection {
|
||||
}
|
||||
}
|
||||
|
||||
final List<GrExpression> args = getExpressionArgumentsOfCall(argumentList);
|
||||
|
||||
final ArrayList<LocalQuickFix> fixes = new ArrayList<LocalQuickFix>();
|
||||
for (Pair<Integer, PsiType> error : allErrors) {
|
||||
fixes.add(new ParameterCastFix(error.first, error.second, args.get(error.first)));
|
||||
@@ -1034,10 +1039,25 @@ public class GroovyAssignabilityCheckInspection extends BaseInspection {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Nullable
|
||||
private static List<GrExpression> getExpressionArgumentsOfCall(@NotNull GrArgumentList argumentList) {
|
||||
final GrExpression[] argArray = argumentList.getExpressionArguments();
|
||||
final ArrayList<GrExpression> args = ContainerUtil.newArrayList(argArray);
|
||||
final ArrayList<GrExpression> args = ContainerUtil.newArrayList();
|
||||
|
||||
for (GrExpression arg : argArray) {
|
||||
if (arg instanceof GrSpreadArgument) {
|
||||
GrExpression spreaded = ((GrSpreadArgument)arg).getArgument();
|
||||
if (spreaded instanceof GrListOrMap && !((GrListOrMap)spreaded).isMap()) {
|
||||
Collections.addAll(args, ((GrListOrMap)spreaded).getInitializers());
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
args.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
final PsiElement parent = argumentList.getParent();
|
||||
if (parent instanceof GrIndexProperty && PsiUtil.isLValue((GroovyPsiElement)parent)) {
|
||||
|
||||
+2
-3
@@ -18,14 +18,13 @@ package org.jetbrains.plugins.groovy.codeInspection.assignment;
|
||||
import com.intellij.codeInspection.ProblemDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiSubstitutor;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.codeInspection.GroovyFix;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
|
||||
/**
|
||||
@@ -38,7 +37,7 @@ public class ParameterCastFix extends GroovyFix {
|
||||
|
||||
public ParameterCastFix(int param, @NotNull PsiType type, @NotNull GrExpression argument) {
|
||||
myArgument = argument;
|
||||
myType = TypesUtil.substituteBoxAndNormalizeType(type, PsiSubstitutor.EMPTY, null, argument);
|
||||
myType = PsiImplUtil.normalizeWildcardTypeByPosition(type, argument);
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Cast ");
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -88,7 +88,7 @@ public class GroovyClassNameCompletionTest extends LightCodeInsightFixtureTestCa
|
||||
addClassToProject("a", "FooBarGooDoo");
|
||||
myFixture.configureByText("a.groovy", "FBGD<caret>a")
|
||||
myFixture.complete(CompletionType.BASIC, 2)
|
||||
myFixture.type '.'.charAt(0)
|
||||
myFixture.type '.'
|
||||
myFixture.checkResult "a.FooBarGooDoo.<caret>a"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user