mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-168203 Follow-up: do not suggest if initializer may throw checked exception or accesses non-final variable
This commit is contained in:
+11
-3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.codeInspection.streamMigration;
|
||||
|
||||
import com.intellij.codeInspection.util.LambdaGenerationUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -174,6 +175,13 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
}
|
||||
}
|
||||
|
||||
@Contract("null -> false")
|
||||
static boolean hasLambdaCompatibleEmptyInitializer(@Nullable PsiLocalVariable target) {
|
||||
return target != null &&
|
||||
ConstructionUtils.isEmptyCollectionInitializer(target.getInitializer()) &&
|
||||
LambdaGenerationUtil.canBeUncheckedLambda(target.getInitializer());
|
||||
}
|
||||
|
||||
static boolean isUsedOutsideOf(PsiVariable collectionVariable, Collection<PsiElement> allowedParents) {
|
||||
return !ReferencesSearch.search(collectionVariable)
|
||||
.forEach(ref -> {
|
||||
@@ -240,7 +248,7 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
PsiMethodCallExpression addCall,
|
||||
PsiLoopStatement loop,
|
||||
InitializerUsageStatus status) {
|
||||
super(target, loop, ConstructionUtils.isEmptyCollectionInitializer(target.getInitializer()) ? status : ControlFlowUtils.InitializerUsageStatus.UNKNOWN);
|
||||
super(target, loop, hasLambdaCompatibleEmptyInitializer(target) ? status : ControlFlowUtils.InitializerUsageStatus.UNKNOWN);
|
||||
myTargetType = target.getType();
|
||||
myInitializer = target.getInitializer();
|
||||
myElement = element;
|
||||
@@ -445,7 +453,7 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
PsiExpression body = LambdaUtil.extractSingleExpressionFromBody(lambda.getBody());
|
||||
if (ConstructionUtils.isEmptyCollectionInitializer(body)) {
|
||||
PsiLocalVariable variable = extractQualifierVariable(tb, qualifierCall);
|
||||
if (variable != null && ConstructionUtils.isEmptyCollectionInitializer(variable.getInitializer())) {
|
||||
if (hasLambdaCompatibleEmptyInitializer(variable)) {
|
||||
PsiType mapType = variable.getType();
|
||||
PsiType valueType = PsiUtil.substituteTypeParameter(mapType, CommonClassNames.JAVA_UTIL_MAP, 1, false);
|
||||
if (valueType == null) return null;
|
||||
@@ -519,7 +527,7 @@ class CollectMigration extends BaseStreamApiMigration {
|
||||
return null;
|
||||
}
|
||||
PsiLocalVariable variable = extractQualifierVariable(tb, call);
|
||||
if (variable == null || !ConstructionUtils.isEmptyCollectionInitializer(variable.getInitializer())) return null;
|
||||
if (!hasLambdaCompatibleEmptyInitializer(variable)) return null;
|
||||
InitializerUsageStatus status = getInitializerUsageStatus(variable, tb.getMainLoop());
|
||||
return new ToMapTerminal(call, tb.getVariable(), variable, tb.getMainLoop(), status);
|
||||
}
|
||||
|
||||
+7
@@ -16,6 +16,13 @@ public class Test {
|
||||
ArrayList<String> result3 = new ArrayList<>(input);
|
||||
input.stream().filter(s -> !s.isEmpty()).forEach(result3::add);
|
||||
System.out.println(result3);
|
||||
|
||||
// Non-final var used in initializer
|
||||
int size = 5;
|
||||
if(size < input.size()) size = input.size();
|
||||
List<String> result4 = new ArrayList<>(size);
|
||||
input.stream().filter(s -> !s.isEmpty()).forEach(result4::add);
|
||||
System.out.println(result4);
|
||||
}
|
||||
|
||||
void testSet(List<String> input) {
|
||||
|
||||
+11
@@ -29,6 +29,17 @@ public class Test {
|
||||
}
|
||||
}
|
||||
System.out.println(result3);
|
||||
|
||||
// Non-final var used in initializer
|
||||
int size = 5;
|
||||
if(size < input.size()) size = input.size();
|
||||
List<String> result4 = new ArrayList<>(size);
|
||||
for (String s : input) {
|
||||
if(!s.isEmpty()) {
|
||||
result4.add(s);
|
||||
}
|
||||
}
|
||||
System.out.println(result4);
|
||||
}
|
||||
|
||||
void testSet(List<String> input) {
|
||||
|
||||
Reference in New Issue
Block a user