mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
TypeUtils#getMethodReturnType extracted
This commit is contained in:
+2
-15
@@ -25,6 +25,7 @@ import com.intellij.psi.controlFlow.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.siyeh.ig.psiutils.ExpressionUtils;
|
||||
import com.siyeh.ig.psiutils.TypeUtils;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@@ -60,7 +61,7 @@ public class ReturnSeparatedFromComputationInspection extends BaseJavaBatchLocal
|
||||
final PsiCodeBlock returnScope = (PsiCodeBlock)returnParent;
|
||||
final PsiStatement[] statements = returnScope.getStatements();
|
||||
if (statements.length != 0 && statements[statements.length - 1] == returnStatement) {
|
||||
final PsiType returnType = getReturnType(returnScope);
|
||||
final PsiType returnType = TypeUtils.getMethodReturnType(returnStatement);
|
||||
if (returnType != null) {
|
||||
PsiStatement refactoredStatement = getPrevNonEmptyStatement(returnStatement, null);
|
||||
if (refactoredStatement != null) {
|
||||
@@ -82,18 +83,6 @@ public class ReturnSeparatedFromComputationInspection extends BaseJavaBatchLocal
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiType getReturnType(PsiCodeBlock returnScope) {
|
||||
NavigatablePsiElement returnFrom = PsiTreeUtil.getNonStrictParentOfType(returnScope, PsiMethod.class, PsiLambdaExpression.class);
|
||||
if (returnFrom instanceof PsiMethod) {
|
||||
return ((PsiMethod)returnFrom).getReturnType();
|
||||
}
|
||||
if (returnFrom instanceof PsiLambdaExpression) {
|
||||
return LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)returnFrom);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiCodeBlock getVariableScopeBlock(@Nullable PsiVariable variable) {
|
||||
if (variable instanceof PsiLocalVariable) {
|
||||
@@ -249,8 +238,6 @@ public class ReturnSeparatedFromComputationInspection extends BaseJavaBatchLocal
|
||||
returnStatement = (PsiReturnStatement)returnStatement.copy();
|
||||
PsiElement lastReturnChild = returnStatement.getLastChild();
|
||||
Project project = returnStatement.getProject();
|
||||
PsiParserFacade parserFacade = PsiParserFacade.SERVICE.getInstance(project);
|
||||
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
|
||||
for (PsiComment comment : keptComments) {
|
||||
lastReturnChild = returnStatement.addAfter(comment, lastReturnChild);
|
||||
}
|
||||
|
||||
+3
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -41,10 +41,10 @@ import com.intellij.refactoring.util.MoveRenameUsageInfo;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.containers.Queue;
|
||||
import com.siyeh.ig.psiutils.TypeUtils;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -532,9 +532,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
|
||||
|
||||
final PsiElement parent = element.getParent();
|
||||
if (parent instanceof PsiReturnStatement) {
|
||||
final PsiElement el = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, PsiLambdaExpression.class);
|
||||
constrainingType = el instanceof PsiMethod ? ((PsiMethod)el).getReturnType()
|
||||
: el instanceof PsiLambdaExpression ? LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)el) : null;
|
||||
constrainingType = TypeUtils.getMethodReturnType(parent);
|
||||
}
|
||||
else if (parent instanceof PsiAssignmentExpression) {
|
||||
constrainingType = ((PsiAssignmentExpression)parent).getLExpression().getType();
|
||||
|
||||
+3
-11
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -17,12 +17,12 @@ package com.intellij.refactoring.typeMigration.rules.guava;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiTypesUtil;
|
||||
import com.intellij.refactoring.typeMigration.TypeConversionDescriptor;
|
||||
import com.intellij.refactoring.typeMigration.TypeEvaluator;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.siyeh.ig.psiutils.TypeUtils;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -64,15 +64,7 @@ public class GuavaTypeConversionDescriptor extends TypeConversionDescriptor {
|
||||
return isIterable(((PsiLocalVariable)parent).getType());
|
||||
}
|
||||
else if (parent instanceof PsiReturnStatement) {
|
||||
final PsiElement methodOrLambda = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, PsiLambdaExpression.class);
|
||||
PsiType methodReturnType = null;
|
||||
if (methodOrLambda instanceof PsiMethod) {
|
||||
methodReturnType = ((PsiMethod)methodOrLambda).getReturnType();
|
||||
}
|
||||
else if (methodOrLambda instanceof PsiLambdaExpression) {
|
||||
methodReturnType = LambdaUtil.getFunctionalInterfaceReturnType((PsiFunctionalExpression)methodOrLambda);
|
||||
}
|
||||
return isIterable(methodReturnType);
|
||||
return isIterable(TypeUtils.getMethodReturnType(parent));
|
||||
}
|
||||
else if (parent instanceof PsiExpressionList) {
|
||||
final PsiExpressionList expressionList = (PsiExpressionList)parent;
|
||||
|
||||
+3
-13
@@ -15,16 +15,16 @@
|
||||
*/
|
||||
package com.siyeh.ig.maturity;
|
||||
|
||||
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Query;
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.BaseInspection;
|
||||
import com.siyeh.ig.BaseInspectionVisitor;
|
||||
import com.siyeh.ig.psiutils.LibraryUtil;
|
||||
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
|
||||
import com.siyeh.ig.psiutils.TypeUtils;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -176,17 +176,7 @@ public class ObsoleteCollectionInspection extends BaseInspection {
|
||||
}
|
||||
}
|
||||
else if (parent instanceof PsiReturnStatement) {
|
||||
final PsiElement container = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, PsiLambdaExpression.class);
|
||||
final PsiType returnType;
|
||||
if (container instanceof PsiMethod) {
|
||||
returnType = ((PsiMethod)container).getReturnType();
|
||||
}
|
||||
else if (container instanceof PsiLambdaExpression) {
|
||||
returnType = LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)container);
|
||||
}
|
||||
else {
|
||||
returnType = null;
|
||||
}
|
||||
final PsiType returnType = TypeUtils.getMethodReturnType(parent);
|
||||
if (isObsoleteCollectionType(returnType)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
+1
-8
@@ -19,7 +19,6 @@ import com.intellij.codeInsight.ExceptionUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -379,13 +378,7 @@ public class ExpectedTypeUtils {
|
||||
|
||||
@Override
|
||||
public void visitReturnStatement(@NotNull PsiReturnStatement returnStatement) {
|
||||
final PsiElement method = PsiTreeUtil.getParentOfType(returnStatement, PsiMethod.class, PsiLambdaExpression.class);
|
||||
if (method instanceof PsiMethod) {
|
||||
expectedType = ((PsiMethod)method).getReturnType();
|
||||
}
|
||||
else if (method instanceof PsiLambdaExpression) {
|
||||
expectedType = LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)method);
|
||||
}
|
||||
expectedType = TypeUtils.getMethodReturnType(returnStatement);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+15
@@ -19,6 +19,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -257,4 +258,18 @@ public class TypeUtils {
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the return type for enclosing method or lambda
|
||||
*
|
||||
* @param element element inside method or lambda to determine the return type of
|
||||
* @return the return type or null if cannot be determined
|
||||
*/
|
||||
@Nullable
|
||||
public static PsiType getMethodReturnType(PsiElement element) {
|
||||
final PsiElement methodOrLambda = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class);
|
||||
return methodOrLambda instanceof PsiMethod
|
||||
? ((PsiMethod)methodOrLambda).getReturnType()
|
||||
: methodOrLambda instanceof PsiLambdaExpression ? LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)methodOrLambda) : null;
|
||||
}
|
||||
}
|
||||
+3
-13
@@ -24,13 +24,12 @@ import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.search.searches.SuperMethodsSearch;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.Query;
|
||||
import com.siyeh.HardcodedMethodConstants;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -156,17 +155,7 @@ public class WeakestTypeFinder {
|
||||
checkClass(javaLangIterableClass, weakestTypeClasses);
|
||||
}
|
||||
else if (referenceParent instanceof PsiReturnStatement) {
|
||||
final PsiElement owner = PsiTreeUtil.getParentOfType(referenceParent, PsiMethod.class, PsiLambdaExpression.class);
|
||||
final PsiType type;
|
||||
if (owner instanceof PsiMethod) {
|
||||
type = ((PsiMethod)owner).getReturnType();
|
||||
}
|
||||
else if (owner instanceof PsiLambdaExpression) {
|
||||
type = LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)owner);
|
||||
}
|
||||
else {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
final PsiType type = TypeUtils.getMethodReturnType(referenceParent);
|
||||
if (!checkType(type, weakestTypeClasses)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
@@ -536,6 +525,7 @@ public class WeakestTypeFinder {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Contract("null, _ -> false")
|
||||
private static boolean checkType(@Nullable PsiType type, @NotNull Collection<PsiClass> weakestTypeClasses) {
|
||||
if (!(type instanceof PsiClassType)) {
|
||||
return false;
|
||||
|
||||
+3
-11
@@ -22,6 +22,7 @@ import com.siyeh.ig.PsiReplacementUtil;
|
||||
import com.siyeh.ig.psiutils.ControlFlowUtils;
|
||||
import com.siyeh.ig.psiutils.EquivalenceChecker;
|
||||
import com.siyeh.ig.psiutils.ParenthesesUtils;
|
||||
import com.siyeh.ig.psiutils.TypeUtils;
|
||||
import com.siyeh.ipp.base.Intention;
|
||||
import com.siyeh.ipp.base.PsiElementPredicate;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -169,17 +170,8 @@ public class ReplaceIfWithConditionalIntention extends Intention {
|
||||
PsiElement thenBranch,
|
||||
PsiExpression thenReturnValue,
|
||||
PsiExpression elseReturnValue) {
|
||||
final PsiElement method = PsiTreeUtil.getParentOfType(thenBranch, PsiMethod.class, PsiLambdaExpression.class);
|
||||
if (method == null) {
|
||||
return null;
|
||||
}
|
||||
final PsiType methodType = method instanceof PsiMethod ? ((PsiMethod)method).getReturnType()
|
||||
: LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)method);
|
||||
final String conditional = getConditionalText(condition, thenReturnValue, elseReturnValue, methodType);
|
||||
if (conditional == null) {
|
||||
return null;
|
||||
}
|
||||
return conditional;
|
||||
final PsiType methodType = TypeUtils.getMethodReturnType(thenBranch);
|
||||
return methodType == null ? null : getConditionalText(condition, thenReturnValue, elseReturnValue, methodType);
|
||||
}
|
||||
|
||||
private static void replaceIfStatement(PsiIfStatement ifStatement, String text) {
|
||||
|
||||
Reference in New Issue
Block a user