From 400bd5dcb339d74adab7fd93752eef3147ddcc3f Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Thu, 9 Aug 2012 13:51:24 +0400 Subject: [PATCH 1/3] Fixed false negative in overridden signature inspection for extra parameter with default value (PY-7162) --- .../python/psi/impl/PyParameterListImpl.java | 2 +- .../inspections/PyMethodOverridingInspection/test.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java b/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java index 11f2687145d7..04427ebcb7e7 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java @@ -90,7 +90,7 @@ public class PyParameterListImpl extends PyBaseElementImpl final int otherOptionalCount = optionalParametersCount(otherParams); final int requiredCount = params.length - optionalCount; final int otherRequiredCount = otherParams.length - otherOptionalCount; - return requiredCount <= otherRequiredCount && params.length >= otherRequiredCount && optionalCount >= otherOptionalCount; + return requiredCount <= otherRequiredCount && params.length >= otherParams.length && optionalCount >= otherOptionalCount; } private static int optionalParametersCount(@NotNull PyParameter[] parameters) { diff --git a/python/testData/inspections/PyMethodOverridingInspection/test.py b/python/testData/inspections/PyMethodOverridingInspection/test.py index dac942b2e6e9..30ec5610b4e5 100644 --- a/python/testData/inspections/PyMethodOverridingInspection/test.py +++ b/python/testData/inspections/PyMethodOverridingInspection/test.py @@ -113,3 +113,15 @@ class c24: class c25(c24): def foo(self, arg1, arg2=None): #pass pass + + +# PY-7162 +class c26: + def foo(self, arg1, arg2=None): + pass + +class c27(c26): + def foo(self, arg1=None): #fail + pass + + From 15129787584219229a6ae3a1c402906fd485983a Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Thu, 9 Aug 2012 14:06:28 +0400 Subject: [PATCH 2/3] Fixed false negative in overridden signature inspection for extra required parameter in overriding method with '**kwargs' (PY-7159) --- .../python/psi/impl/PyParameterListImpl.java | 11 +++++------ .../inspections/PyMethodOverridingInspection/test.py | 8 ++++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java b/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java index 04427ebcb7e7..841b7f5344c3 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyParameterListImpl.java @@ -66,9 +66,12 @@ public class PyParameterListImpl extends PyBaseElementImpl public boolean isCompatibleTo(@NotNull PyParameterList other) { PyParameter[] params = getParameters(); final PyParameter[] otherParams = other.getParameters(); + final int optionalCount = optionalParametersCount(params); + final int otherOptionalCount = optionalParametersCount(otherParams); + final int requiredCount = params.length - optionalCount; + final int otherRequiredCount = otherParams.length - otherOptionalCount; if (hasPositionalContainer() || hasKeywordContainer()) { - // TODO: Check required arguments count of the current parameters list - return true; + return requiredCount <= otherRequiredCount; } final PyFunction otherFunction = other.getContainingFunction(); final boolean otherHasArgs = other.hasPositionalContainer(); @@ -86,10 +89,6 @@ public class PyParameterListImpl extends PyBaseElementImpl } return otherParams.length == specialParamsCount; } - final int optionalCount = optionalParametersCount(params); - final int otherOptionalCount = optionalParametersCount(otherParams); - final int requiredCount = params.length - optionalCount; - final int otherRequiredCount = otherParams.length - otherOptionalCount; return requiredCount <= otherRequiredCount && params.length >= otherParams.length && optionalCount >= otherOptionalCount; } diff --git a/python/testData/inspections/PyMethodOverridingInspection/test.py b/python/testData/inspections/PyMethodOverridingInspection/test.py index 30ec5610b4e5..23dfc147cecd 100644 --- a/python/testData/inspections/PyMethodOverridingInspection/test.py +++ b/python/testData/inspections/PyMethodOverridingInspection/test.py @@ -125,3 +125,11 @@ class c27(c26): pass +# PY-7159 +class c28: + def foo(self): + pass + +class c29(c28): + def foo(self, p1, **kwargs): #fail + pass From af0456cd6bd78407d7c0079953040e34d708a947 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 9 Aug 2012 15:55:46 +0400 Subject: [PATCH 3/3] reduced usages of StringUtilRt --- .../introduce/constant/PyIntroduceConstantHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/refactoring/introduce/constant/PyIntroduceConstantHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/constant/PyIntroduceConstantHandler.java index 11fa090ef719..54358b4f87c8 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/constant/PyIntroduceConstantHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/constant/PyIntroduceConstantHandler.java @@ -1,6 +1,6 @@ package com.jetbrains.python.refactoring.introduce.constant; -import com.intellij.openapi.util.text.StringUtilRt; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.HashSet; @@ -45,7 +45,7 @@ public class PyIntroduceConstantHandler extends IntroduceHandler { protected Collection generateSuggestedNames(@NotNull final PyExpression expression) { Collection names = new HashSet(); for (String name : super.generateSuggestedNames(expression)) { - names.add(StringUtilRt.toUpperCase(name)); + names.add(StringUtil.toUpperCase(name)); } return names; }