extract method: don't mark final if used in anonymous but effectively final in java 8 (IDEA-165642)

This commit is contained in:
Anna.Kozlova
2016-12-19 19:17:24 +01:00
parent 7868174c4b
commit 17f92bdc32
4 changed files with 52 additions and 1 deletions
@@ -1169,7 +1169,7 @@ public class ExtractMethodProcessor implements MatchProvider {
}
});
}
else {
else if (!PsiUtil.isLanguageLevel8OrHigher(method)){
method.accept(new JavaRecursiveElementVisitor() {
@Override public void visitReferenceExpression(PsiReferenceExpression expression) {
final PsiElement resolved = expression.resolve();
@@ -0,0 +1,20 @@
class Box {
private void test(String str1, String str2) {
Data data = <selection>new Data() {
@Override
public String getA() {
return str1;
}
@Override
public String getB() {
return str2;
}
}</selection>;
System.out.println(data);
}
static interface Data {
String getA();
String getB();
}
}
@@ -0,0 +1,27 @@
import org.jetbrains.annotations.NotNull;
class Box {
private void test(String str1, String str2) {
Data data = newMethod(str1, str2);
System.out.println(data);
}
@NotNull
private Data newMethod(String str1, String str2) {
return new Data() {
@Override
public String getA() {
return str1;
}
@Override
public String getB() {
return str2;
}
};
}
static interface Data {
String getA();
String getB();
}
}
@@ -904,6 +904,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase {
checkResultByFile(BASE_PATH + getTestName(false) + "_after.java");
}
public void testDontMakeParametersFinalDueToUsagesInsideAnonymous() throws Exception {
doTest();
}
private void doTestDisabledParam() throws PrepareFailedException {
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
settings.ELSE_ON_NEW_LINE = true;