Java9CollectionFactoryInspection: do not check whether copied collection types agree

Fixes IDEA-195560 'List.copyOf' not suggested when Set passed to 'new ArrayList<>()'
This commit is contained in:
Tagir Valeev
2018-07-27 00:40:31 +07:00
parent 5507b49051
commit f1de3f00bb
3 changed files with 11 additions and 6 deletions
@@ -24,6 +24,7 @@ import com.intellij.psi.*;
import com.intellij.psi.controlFlow.DefUseUtil;
import com.intellij.psi.impl.PsiDiamondTypeUtil;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -293,12 +294,8 @@ public class Java9CollectionFactoryInspection extends BaseLocalInspectionTool {
if (ARRAYS_AS_LIST.test(call)) {
return new PrepopulatedCollectionModel(Arrays.asList(call.getArgumentList().getExpressions()), Collections.emptyList(), type);
}
if(arg != null && PsiUtil.isLanguageLevel10OrHigher(arg)) {
PsiType sourceType = arg.getType();
PsiType targetType = newExpression.getType();
if (targetType != null && sourceType != null && sourceType.isAssignableFrom(targetType)) {
return new PrepopulatedCollectionModel(Collections.singletonList(arg), Collections.emptyList(), type, true);
}
if(arg != null && PsiUtil.isLanguageLevel10OrHigher(arg) && InheritanceUtil.isInheritor(arg.getType(), JAVA_UTIL_COLLECTION)) {
return new PrepopulatedCollectionModel(Collections.singletonList(arg), Collections.emptyList(), type, true);
}
}
return null;
@@ -3,13 +3,17 @@ import java.util.*;
class Main {
private final List<String> myList;
private final List<String> myList3;
private final Map<String, String> myMap;
private final Set<String> mySet;
private final Set<String> mySet2;
Main(Collection<String> list, Map<? extends String, ? extends String> map,
Set<String> set) {
myList = List.<String>copyOf(list);
myList2 = List.<String>copyOf(set);
myMap = Map.<String, String>copyOf(map);
mySet = Set.<String>copyOf(set);
mySet2 = Set.<String>copyOf(list);
}
}
@@ -3,13 +3,17 @@ import java.util.*;
class Main {
private final List<String> myList;
private final List<String> myList3;
private final Map<String, String> myMap;
private final Set<String> mySet;
private final Set<String> mySet2;
Main(Collection<String> list, Map<? extends String, ? extends String> map,
Set<String> set) {
myList = Collections.un<caret>modifiableList(new ArrayList<>(list));
myList2 = Collections.unmodifiableList(new ArrayList<>(set));
myMap = Collections.unmodifiableMap(new HashMap<>(map));
mySet = Collections.unmodifiableSet(new HashSet<>(set));
mySet2 = Collections.unmodifiableSet(new HashSet<>(list));
}
}