mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
surround with array fix: ensure result is free from generics array creation error (IDEA-166489; IDEA-166490)
This commit is contained in:
@@ -623,8 +623,11 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
QuickFixAction.registerQuickFixAction(errorResult, QUICK_FIX_FACTORY.createMethodReturnFix(method, valueType, true));
|
||||
}
|
||||
registerChangeParameterClassFix(returnType, valueType, errorResult);
|
||||
if (returnType instanceof PsiArrayType && TypeConversionUtil.isAssignable(((PsiArrayType)returnType).getComponentType(), valueType)) {
|
||||
QuickFixAction.registerQuickFixAction(errorResult, QUICK_FIX_FACTORY.createSurroundWithArrayFix(null, returnValue));
|
||||
if (returnType instanceof PsiArrayType) {
|
||||
final PsiType erasedValueType = TypeConversionUtil.erasure(valueType);
|
||||
if (erasedValueType != null && TypeConversionUtil.isAssignable(((PsiArrayType)returnType).getComponentType(), erasedValueType)) {
|
||||
QuickFixAction.registerQuickFixAction(errorResult, QUICK_FIX_FACTORY.createSurroundWithArrayFix(null, returnValue));
|
||||
}
|
||||
}
|
||||
registerCollectionToArrayFixAction(errorResult, valueType, returnType, returnValue);
|
||||
}
|
||||
|
||||
@@ -95,10 +95,10 @@ public class SurroundWithArrayFix extends PsiElementBaseIntentionAction {
|
||||
if (psiParameters.length > idx) {
|
||||
final PsiType paramType = psiParameters[idx].getType();
|
||||
if (paramType instanceof PsiArrayType) {
|
||||
final PsiType expressionType = expression.getType();
|
||||
final PsiType expressionType = TypeConversionUtil.erasure(expression.getType());
|
||||
if (expressionType != null) {
|
||||
final PsiType componentType = ((PsiArrayType)paramType).getComponentType();
|
||||
if (expressionType.isAssignableFrom(componentType)) {
|
||||
if (TypeConversionUtil.isAssignable(componentType, expressionType)) {
|
||||
return expression;
|
||||
}
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(componentType);
|
||||
@@ -129,6 +129,7 @@ public class SurroundWithArrayFix extends PsiElementBaseIntentionAction {
|
||||
private static String getArrayCreation(@NotNull PsiExpression expression) {
|
||||
final PsiType expressionType = expression.getType();
|
||||
assert expressionType != null;
|
||||
return "new " + expressionType.getCanonicalText() + "[]{" + expression.getText()+ "}";
|
||||
final PsiType arrayComponentType = TypeConversionUtil.erasure(expressionType);
|
||||
return "new " + arrayComponentType.getCanonicalText() + "[]{" + expression.getText()+ "}";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Surround with array initialization" "true"
|
||||
import java.util.List;
|
||||
|
||||
class A {
|
||||
|
||||
public List<?>[] test(List<Number> list) {
|
||||
return new List[]{list};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// "Surround with array initialization" "true"
|
||||
import java.util.List;
|
||||
|
||||
class A {
|
||||
|
||||
public void test(List<?>[] t){}
|
||||
|
||||
void foo(List<Number> list) {
|
||||
test(new List[]{list});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Surround with array initialization" "true"
|
||||
class A<T> {
|
||||
|
||||
public Object[] test(T t) {
|
||||
return new Object[]{t};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Surround with array initialization" "true"
|
||||
class A<T> {
|
||||
|
||||
public void test(Object[] t) {
|
||||
}
|
||||
|
||||
void foo(T t){
|
||||
test(new Object[]{t});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Surround with array initialization" "true"
|
||||
import java.util.List;
|
||||
|
||||
class A {
|
||||
|
||||
public List<?>[] test(List<Number> list) {
|
||||
return lis<caret>t;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// "Surround with array initialization" "true"
|
||||
import java.util.List;
|
||||
|
||||
class A {
|
||||
|
||||
public void test(List<?>[] t){}
|
||||
|
||||
void foo(List<Number> list) {
|
||||
test(lis<caret>t);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Surround with array initialization" "true"
|
||||
class A<T> {
|
||||
|
||||
public Object[] test(T t) {
|
||||
return <caret>t;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Surround with array initialization" "false"
|
||||
class A<T> {
|
||||
|
||||
public T[] test(T t) {
|
||||
return <caret>t;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Surround with array initialization" "false"
|
||||
class A<T> {
|
||||
|
||||
public void test(T[] t) {
|
||||
}
|
||||
|
||||
void foo(T t){
|
||||
test(<caret>t);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Surround with array initialization" "true"
|
||||
class A<T> {
|
||||
|
||||
public void test(Object[] t) {
|
||||
}
|
||||
|
||||
void foo(T t){
|
||||
test(<caret>t);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user