mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
introduce parameter: ensure type is substituted in overriders (IDEA-155609)
This commit is contained in:
+6
-1
@@ -31,6 +31,7 @@ import com.intellij.psi.impl.source.resolve.DefaultParameterTypeInferencePolicy;
|
||||
import com.intellij.psi.javadoc.PsiDocTag;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.util.FieldConflictsResolver;
|
||||
import com.intellij.refactoring.util.LambdaRefactoringUtil;
|
||||
@@ -216,7 +217,11 @@ public class JavaIntroduceParameterMethodUsagesProcessor implements IntroducePar
|
||||
final MethodJavaDocHelper javaDocHelper = new MethodJavaDocHelper(method);
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(data.getProject()).getElementFactory();
|
||||
|
||||
PsiParameter parameter = factory.createParameter(data.getParameterName(), data.getForcedType());
|
||||
final PsiClass superClass = data.getMethodToSearchFor().getContainingClass();
|
||||
final PsiClass containingClass = method.getContainingClass();
|
||||
final PsiSubstitutor substitutor = superClass != null && containingClass != null ? TypeConversionUtil.getSuperClassSubstitutor(superClass, containingClass, PsiSubstitutor.EMPTY)
|
||||
: PsiSubstitutor.EMPTY;
|
||||
PsiParameter parameter = factory.createParameter(data.getParameterName(), substitutor.substitute(data.getForcedType()));
|
||||
PsiUtil.setModifierProperty(parameter, PsiModifier.FINAL, data.isDeclareFinal());
|
||||
|
||||
final PsiParameterList parameterList = method.getParameterList();
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class A<T> {
|
||||
void foo(final T anObject) {
|
||||
}
|
||||
}
|
||||
class B extends A<String> {
|
||||
void foo(final String anObject) {}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
class A<T> {
|
||||
void foo() {
|
||||
T <selection>t</selection> = null;
|
||||
}
|
||||
}
|
||||
class B extends A<String> {
|
||||
void foo() {}
|
||||
}
|
||||
@@ -302,6 +302,10 @@ public class IntroduceParameterTest extends LightRefactoringTestCase {
|
||||
doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_ALL, true, false, true, false);
|
||||
}
|
||||
|
||||
public void testSubstituteTypeParamsInInheritor() {
|
||||
doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_ALL, true, false, true, false);
|
||||
}
|
||||
|
||||
public void testDelegateWithVarargs() {
|
||||
doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_ALL, true, false, true, true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user