update backing field references when renaming Kotlin property
#KT-7905 Fixed
This commit is contained in:
@@ -182,4 +182,9 @@ public abstract class KotlinLightField<T extends JetDeclaration, D extends PsiFi
|
||||
}
|
||||
return super.isEquivalentTo(another);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWritable() {
|
||||
return getOrigin().isWritable();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,6 +174,34 @@ public class LightClassUtil {
|
||||
return extractPropertyAccessors(property, getterWrapper, setterWrapper);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiField getLightClassBackingField(JetDeclaration declaration) {
|
||||
PsiClass psiClass = getWrappingClass(declaration);
|
||||
if (psiClass == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (psiClass instanceof KotlinLightClass) {
|
||||
JetClassOrObject origin = ((KotlinLightClass) psiClass).getOrigin();
|
||||
if (origin instanceof JetObjectDeclaration && ((JetObjectDeclaration) origin).isCompanion()) {
|
||||
JetClass containingClass = PsiTreeUtil.getParentOfType(origin, JetClass.class);
|
||||
if (containingClass != null) {
|
||||
PsiClass containingLightClass = getPsiClass(containingClass);
|
||||
if (containingLightClass != null) {
|
||||
psiClass = containingLightClass;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (PsiField field : psiClass.getFields()) {
|
||||
if (field instanceof KotlinLightField && ((KotlinLightField) field).getOrigin() == declaration) {
|
||||
return field;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static PropertyAccessorsPsiMethods getLightClassPropertyMethods(@NotNull JetParameter parameter) {
|
||||
return extractPropertyAccessors(parameter, null, null);
|
||||
@@ -315,9 +343,11 @@ public class LightClassUtil {
|
||||
getterWrapper = wrapper;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new PropertyAccessorsPsiMethods(getterWrapper, setterWrapper);
|
||||
PsiField backingField = getLightClassBackingField(jetDeclaration);
|
||||
return new PropertyAccessorsPsiMethods(getterWrapper, setterWrapper, backingField);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -341,9 +371,10 @@ public class LightClassUtil {
|
||||
public static class PropertyAccessorsPsiMethods implements Iterable<PsiMethod> {
|
||||
private final PsiMethod getter;
|
||||
private final PsiMethod setter;
|
||||
private final PsiField backingField;
|
||||
private final Collection<PsiMethod> accessors = new ArrayList<PsiMethod>(2);
|
||||
|
||||
PropertyAccessorsPsiMethods(@Nullable PsiMethod getter, @Nullable PsiMethod setter) {
|
||||
PropertyAccessorsPsiMethods(@Nullable PsiMethod getter, @Nullable PsiMethod setter, @Nullable PsiField backingField) {
|
||||
this.getter = getter;
|
||||
if (getter != null) {
|
||||
accessors.add(getter);
|
||||
@@ -353,6 +384,8 @@ public class LightClassUtil {
|
||||
if (setter != null) {
|
||||
accessors.add(setter);
|
||||
}
|
||||
|
||||
this.backingField = backingField;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -365,6 +398,11 @@ public class LightClassUtil {
|
||||
return setter;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiField getBackingField() {
|
||||
return backingField;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Iterator<PsiMethod> iterator() {
|
||||
|
||||
Reference in New Issue
Block a user