From 67c4dfb48362073864725b371c1c3d3a09085f38 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 11 Nov 2016 10:20:32 +0700 Subject: [PATCH] Moved TypeUtils#getMethodReturnType -> PsiTypesUtil; used in LambdaUtil#getFunctionalInterfaceType amd PsiTypesUtil#getExpectedTypeByParent (IDEA-CR-15590) --- .../impl/quickfix/StaticMembersProcessor.java | 10 ++----- ...urnSeparatedFromComputationInspection.java | 4 +-- .../TurnRefsToSuperProcessorBase.java | 3 +-- .../src/com/intellij/psi/LambdaUtil.java | 7 +---- .../com/intellij/psi/util/PsiTypesUtil.java | 26 ++++++++++++------- .../guava/GuavaTypeConversionDescriptor.java | 3 +-- .../ObsoleteCollectionInspection.java | 4 +-- .../siyeh/ig/psiutils/ExpectedTypeUtils.java | 3 ++- .../src/com/siyeh/ig/psiutils/TypeUtils.java | 15 ----------- .../siyeh/ig/psiutils/WeakestTypeFinder.java | 3 ++- .../ReplaceIfWithConditionalIntention.java | 4 +-- 11 files changed, 32 insertions(+), 50 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticMembersProcessor.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticMembersProcessor.java index bf3df1d7c2ca..d2806b05ba3d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticMembersProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticMembersProcessor.java @@ -19,7 +19,7 @@ import com.intellij.codeInsight.CodeInsightUtil; import com.intellij.codeInsight.ImportFilter; import com.intellij.openapi.progress.ProgressManager; import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtilRt; import com.intellij.util.Processor; @@ -79,13 +79,7 @@ abstract class StaticMembersProcessor } } else if (parent instanceof PsiReturnStatement) { - final PsiElement psiElement = PsiTreeUtil.getParentOfType(parent, PsiLambdaExpression.class, PsiMethod.class); - if (psiElement instanceof PsiLambdaExpression) { - return LambdaUtil.getFunctionalInterfaceReturnType(((PsiLambdaExpression)psiElement).getFunctionalInterfaceType()); - } - else if (psiElement instanceof PsiMethod) { - return ((PsiMethod)psiElement).getReturnType(); - } + return PsiTypesUtil.getMethodReturnType(parent); } else if (parent instanceof PsiExpressionList) { final PsiElement pParent = parent.getParent(); diff --git a/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java b/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java index fa7c7a6952a2..4b22d0ad640e 100644 --- a/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java @@ -23,9 +23,9 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.controlFlow.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; 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; @@ -61,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 = TypeUtils.getMethodReturnType(returnStatement); + final PsiType returnType = PsiTypesUtil.getMethodReturnType(returnStatement); if (returnType != null) { PsiStatement refactoredStatement = getPrevNonEmptyStatement(returnStatement, null); if (refactoredStatement != null) { diff --git a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java index 93e268b5c9b0..b595e89c15e0 100644 --- a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java +++ b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java @@ -44,7 +44,6 @@ import com.intellij.util.IncorrectOperationException; 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,7 +531,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces final PsiElement parent = element.getParent(); if (parent instanceof PsiReturnStatement) { - constrainingType = TypeUtils.getMethodReturnType(parent); + constrainingType = PsiTypesUtil.getMethodReturnType(parent); } else if (parent instanceof PsiAssignmentExpression) { constrainingType = ((PsiAssignmentExpression)parent).getLExpression().getType(); diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index 55c581f13105..4bfc650cf327 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -439,12 +439,7 @@ public class LambdaUtil { } } else if (parent instanceof PsiReturnStatement) { - final PsiElement gParent = PsiTreeUtil.getParentOfType(parent, PsiLambdaExpression.class, PsiMethod.class); - if (gParent instanceof PsiLambdaExpression) { - return getFunctionalInterfaceTypeByContainingLambda((PsiLambdaExpression)gParent); - } else if (gParent instanceof PsiMethod) { - return ((PsiMethod)gParent).getReturnType(); - } + return PsiTypesUtil.getMethodReturnType(parent); } else if (parent instanceof PsiLambdaExpression) { return getFunctionalInterfaceTypeByContainingLambda((PsiLambdaExpression)parent); diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java index 4c81c52b19ac..bec5aaf8d116 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java @@ -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. @@ -211,13 +211,7 @@ public class PsiTypesUtil { } } else if (parent instanceof PsiReturnStatement) { - final PsiElement psiElement = PsiTreeUtil.getParentOfType(parent, PsiLambdaExpression.class, PsiMethod.class); - if (psiElement instanceof PsiLambdaExpression) { - return null; - } - else if (psiElement instanceof PsiMethod){ - return ((PsiMethod)psiElement).getReturnType(); - } + return getMethodReturnType(parent); } else if (PsiUtil.isCondition(element, parent)) { return PsiType.BOOLEAN.getBoxedType(parent); @@ -244,7 +238,21 @@ public class PsiTypesUtil { } return null; } - + + /** + * 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; + } + public static boolean compareTypes(PsiType leftType, PsiType rightType, boolean ignoreEllipsis) { if (ignoreEllipsis) { if (leftType instanceof PsiEllipsisType) { diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaTypeConversionDescriptor.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaTypeConversionDescriptor.java index 9c99cbf25580..7c82412c193c 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaTypeConversionDescriptor.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/guava/GuavaTypeConversionDescriptor.java @@ -22,7 +22,6 @@ 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,7 +63,7 @@ public class GuavaTypeConversionDescriptor extends TypeConversionDescriptor { return isIterable(((PsiLocalVariable)parent).getType()); } else if (parent instanceof PsiReturnStatement) { - return isIterable(TypeUtils.getMethodReturnType(parent)); + return isIterable(PsiTypesUtil.getMethodReturnType(parent)); } else if (parent instanceof PsiExpressionList) { final PsiExpressionList expressionList = (PsiExpressionList)parent; diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java index cbab7d49a0bb..80e87229f293 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/ObsoleteCollectionInspection.java @@ -19,12 +19,12 @@ 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.PsiTypesUtil; 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.siyeh.ig.psiutils.TypeUtils; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -176,7 +176,7 @@ public class ObsoleteCollectionInspection extends BaseInspection { } } else if (parent instanceof PsiReturnStatement) { - final PsiType returnType = TypeUtils.getMethodReturnType(parent); + final PsiType returnType = PsiTypesUtil.getMethodReturnType(parent); if (isObsoleteCollectionType(returnType)) { return true; } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java index fd1dbcc13058..3da07ca67df4 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java @@ -19,6 +19,7 @@ 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.PsiTypesUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; @@ -378,7 +379,7 @@ public class ExpectedTypeUtils { @Override public void visitReturnStatement(@NotNull PsiReturnStatement returnStatement) { - expectedType = TypeUtils.getMethodReturnType(returnStatement); + expectedType = PsiTypesUtil.getMethodReturnType(returnStatement); } @Override diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TypeUtils.java index 35e9af3a8502..7e9dcd7007c1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TypeUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TypeUtils.java @@ -19,7 +19,6 @@ 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; @@ -258,18 +257,4 @@ 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; - } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java index fc06747223a9..28056b11b979 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java @@ -25,6 +25,7 @@ import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Query; @@ -155,7 +156,7 @@ public class WeakestTypeFinder { checkClass(javaLangIterableClass, weakestTypeClasses); } else if (referenceParent instanceof PsiReturnStatement) { - final PsiType type = TypeUtils.getMethodReturnType(referenceParent); + final PsiType type = PsiTypesUtil.getMethodReturnType(referenceParent); if (!checkType(type, weakestTypeClasses)) { return Collections.emptyList(); } diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java index 12522ae7edef..dd2c81ff9031 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java @@ -18,11 +18,11 @@ package com.siyeh.ipp.trivialif; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDiamondTypeUtil; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; 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; @@ -170,7 +170,7 @@ public class ReplaceIfWithConditionalIntention extends Intention { PsiElement thenBranch, PsiExpression thenReturnValue, PsiExpression elseReturnValue) { - final PsiType methodType = TypeUtils.getMethodReturnType(thenBranch); + final PsiType methodType = PsiTypesUtil.getMethodReturnType(thenBranch); return methodType == null ? null : getConditionalText(condition, thenReturnValue, elseReturnValue, methodType); }