extract method: adjust params to be final in case of local classes (IDEA-97253)

This commit is contained in:
anna
2012-12-11 17:44:20 +01:00
parent 37b3227800
commit 7a870adca7
7 changed files with 37 additions and 4 deletions
@@ -881,7 +881,7 @@ public class ExtractMethodProcessor implements MatchProvider {
final int index = ArrayUtil.find(parameters, resolved);
if (index >= 0) {
final PsiParameter param = parameters[index];
if (!param.hasModifierProperty(PsiModifier.FINAL) && RefactoringUtil.isInsideAnonymous(expression, method)) {
if (!param.hasModifierProperty(PsiModifier.FINAL) && RefactoringUtil.isInsideAnonymousOrLocal(expression, method)) {
try {
PsiUtil.setModifierProperty(param, PsiModifier.FINAL, true);
}
@@ -48,7 +48,7 @@ class InternalUsageInfo extends UsageInfo{
public boolean isInsideAnonymous() {
if(myIsInsideAnonymous == null) {
myIsInsideAnonymous = Boolean.valueOf(RefactoringUtil.isInsideAnonymous(getElement(), null));
myIsInsideAnonymous = Boolean.valueOf(RefactoringUtil.isInsideAnonymousOrLocal(getElement(), null));
}
return myIsInsideAnonymous.booleanValue();
@@ -828,9 +828,12 @@ public class RefactoringUtil {
removeFinalParameters(method);
}
public static boolean isInsideAnonymous(PsiElement element, PsiElement upTo) {
public static boolean isInsideAnonymousOrLocal(PsiElement element, PsiElement upTo) {
for (PsiElement current = element; current != null && current != upTo; current = current.getParent()) {
if (current instanceof PsiAnonymousClass) return true;
if (current instanceof PsiClass && current.getParent() instanceof PsiDeclarationStatement) {
return true;
}
}
return false;
}
@@ -0,0 +1,11 @@
class Test {
public static void main(String[] args) {
final String s = "text";
<selection>class A {
{
System.out.println(s);
}
}</selection>
}
}
@@ -0,0 +1,15 @@
class Test {
public static void main(String[] args) {
final String s = "text";
newMethod(s);
}
private static void newMethod(final String s) {
class A {
{
System.out.println(s);
}
}
}
}
@@ -7,7 +7,7 @@ class A {
System.out.println("");
}
private boolean newMethod(int abc, boolean b) {
private boolean newMethod(final int abc, boolean b) {
if (b) {
class T {
void bar() {
@@ -558,6 +558,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase {
doTest();
}
public void testFinalParams4LocalClasses() throws Exception {
doTest();
}
private void doTestDisabledParam() throws PrepareFailedException {
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
settings.ELSE_ON_NEW_LINE = true;