mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fixed PY-10976 Method override in nested class generated with incorrect super call
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.jetbrains.python.codeInsight.override;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.codeInsight.CodeInsightUtilCore;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.featureStatistics.ProductivityFeatureNames;
|
||||
@@ -217,7 +218,16 @@ public class PyOverrideImplementUtil {
|
||||
if (!langLevel.isPy3K()) {
|
||||
final String baseFirstName = !baseParams.isEmpty() ? baseParams.get(0).getName() : null;
|
||||
final String firstName = baseFirstName != null ? baseFirstName : PyNames.CANONICAL_SELF;
|
||||
statementBody.append(pyClass.getName()).append(", ").append(firstName);
|
||||
PsiElement outerClass = PsiTreeUtil.getParentOfType(pyClass, PyClass.class, true);
|
||||
String className = pyClass.getName();
|
||||
final List<String> nameResult = Lists.newArrayList(className);
|
||||
while(outerClass instanceof PyClass) {
|
||||
nameResult.add(0, ((PyClass)outerClass).getName());
|
||||
outerClass = PsiTreeUtil.getParentOfType(outerClass, PyClass.class, true);
|
||||
}
|
||||
|
||||
className = StringUtil.join(nameResult, ".");
|
||||
statementBody.append(className).append(", ").append(firstName);
|
||||
}
|
||||
statementBody.append(").").append(baseFunction.getName()).append("(");
|
||||
if (parameters.size() > 0) {
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class X(object):
|
||||
def foo(self): pass
|
||||
|
||||
class Outer(object):
|
||||
class <caret>Inner(X):
|
||||
pass
|
||||
@@ -0,0 +1,9 @@
|
||||
class X(object):
|
||||
def foo(self): pass
|
||||
|
||||
class Outer(object):
|
||||
class Inner(X):
|
||||
def foo(self):
|
||||
super(Outer.Inner, self).foo()
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.jetbrains.python;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.jetbrains.python.codeInsight.override.PyMethodMember;
|
||||
import com.jetbrains.python.codeInsight.override.PyOverrideImplementUtil;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
@@ -63,6 +65,17 @@ public class PyOverrideTest extends PyTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testInnerClass() { // PY-10976
|
||||
myFixture.configureByFile("override/" + getTestName(true) + ".py");
|
||||
PyFunction toOverride = getTopLevelClass(0).getMethods()[0];
|
||||
final PsiElement element = myFixture.getElementAtCaret();
|
||||
PyClass pyClass = PsiTreeUtil.getParentOfType(element, PyClass.class, false);
|
||||
assertNotNull(pyClass);
|
||||
PyOverrideImplementUtil.overrideMethods(myFixture.getEditor(), pyClass,
|
||||
Collections.singletonList(new PyMethodMember(toOverride)));
|
||||
myFixture.checkResultByFile("override/" + getTestName(true) + "_after.py", true);
|
||||
}
|
||||
|
||||
public void testQualified() { // PY-2171
|
||||
myFixture.configureByFile("override/" + getTestName(true) + ".py");
|
||||
PyClass dateClass = PyClassNameIndex.findClass("datetime.date", myFixture.getProject());
|
||||
|
||||
Reference in New Issue
Block a user