use correct safe delete processor for members of local classes and objects

#KT-8894 Fixed
This commit is contained in:
Dmitry Jemerov
2015-08-21 16:29:28 +02:00
parent 522a5ea0f2
commit 24ba5a46f1
5 changed files with 22 additions and 4 deletions
@@ -251,8 +251,7 @@ public class LightClassUtil {
return getPsiClass(((JetConstructor) declaration).getContainingClassOrObject());
}
//noinspection unchecked
if (PsiTreeUtil.getParentOfType(declaration, JetFunction.class, JetProperty.class) != null) {
if (!canGenerateLightClass(declaration)) {
// Can't get wrappers for internal declarations. Their classes are not generated during calcStub
// with ClassBuilderMode.LIGHT_CLASSES mode, and this produces "Class not found exception" in getDelegate()
return null;
@@ -274,6 +273,11 @@ public class LightClassUtil {
return null;
}
public static boolean canGenerateLightClass(JetDeclaration declaration) {
//noinspection unchecked
return PsiTreeUtil.getParentOfType(declaration, JetFunction.class, JetProperty.class) == null;
}
@NotNull
private static PropertyAccessorsPsiMethods extractPropertyAccessors(
@NotNull JetDeclaration jetDeclaration,
@@ -192,7 +192,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
}
is JetNamedFunction -> {
if (element.isLocal()) {
if (!LightClassUtil.canGenerateLightClass(element)) {
findKotlinDeclarationUsages(element)
}
else {
@@ -204,7 +204,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
findUsagesByJavaProcessor(element, false)
is JetProperty -> {
if (element.isLocal()) {
if (!LightClassUtil.canGenerateLightClass(element)) {
findKotlinDeclarationUsages(element)
}
else {
@@ -0,0 +1,7 @@
open class SampleParent { var field = 0 }
fun context() {
var v = object : SampleParent() { var ad<caret>dition = 0 }
println(v.field)
println(v.addition)
}
@@ -0,0 +1 @@
property context.&lt;no name provided&gt;.addition has 1 usage that is not safe to delete.
@@ -534,6 +534,12 @@ public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest {
String fileName = JetTestUtils.navigationMetadata("idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyExt2.kt");
doPropertyTest(fileName);
}
@TestMetadata("propertyInLocalObject.kt")
public void testPropertyInLocalObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt");
doPropertyTest(fileName);
}
}
@TestMetadata("idea/testData/safeDelete/deleteProperty/kotlinPropertyWithJava")