mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
fixed PY-12545 Override method: generated incorrect super call for local classes
This commit is contained in:
@@ -235,12 +235,12 @@ 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;
|
||||
PsiElement outerClass = PsiTreeUtil.getParentOfType(pyClass, PyClass.class, true);
|
||||
PsiElement outerClass = PsiTreeUtil.getParentOfType(pyClass, PyClass.class, true, PyFunction.class);
|
||||
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);
|
||||
outerClass = PsiTreeUtil.getParentOfType(outerClass, PyClass.class, true, PyFunction.class);
|
||||
}
|
||||
|
||||
className = StringUtil.join(nameResult, ".");
|
||||
|
||||
8
python/testData/override/innerFunctionClass.py
Normal file
8
python/testData/override/innerFunctionClass.py
Normal file
@@ -0,0 +1,8 @@
|
||||
class X(object):
|
||||
def foo(self):
|
||||
pass
|
||||
|
||||
class A():
|
||||
def service(self):
|
||||
class B<caret>(X):
|
||||
pass
|
||||
10
python/testData/override/innerFunctionClass_after.py
Normal file
10
python/testData/override/innerFunctionClass_after.py
Normal file
@@ -0,0 +1,10 @@
|
||||
class X(object):
|
||||
def foo(self):
|
||||
pass
|
||||
|
||||
class A():
|
||||
def service(self):
|
||||
class B(X):
|
||||
def foo(self):
|
||||
super(B, self).foo()
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
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;
|
||||
@@ -87,6 +89,15 @@ public class PyOverrideTest extends PyTestCase {
|
||||
myFixture.checkResultByFile("override/" + getTestName(true) + "_after.py", true);
|
||||
}
|
||||
|
||||
public void testInnerFunctionClass() {
|
||||
myFixture.configureByFile("override/" + getTestName(true) + ".py");
|
||||
PyFunction toOverride = getTopLevelClass(0).getMethods()[0];
|
||||
final PsiElement element = myFixture.getElementAtCaret();
|
||||
PyOverrideImplementUtil.overrideMethods(myFixture.getEditor(), PsiTreeUtil.getParentOfType(element, PyClass.class, false),
|
||||
Collections.singletonList(new PyMethodMember(toOverride)), false);
|
||||
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