ensure reformat on super class inline (IDEA-170534)

This commit is contained in:
Anna Kozlova
2017-05-29 12:45:16 +03:00
parent 180754291c
commit 337a88feae
3 changed files with 23 additions and 23 deletions

View File

@@ -17,9 +17,11 @@ package com.intellij.refactoring.safeDelete.usageInfo;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Nullable;
/**
* @author ven
@@ -46,31 +48,29 @@ public class SafeDeleteExtendsClassUsageInfo extends SafeDeleteReferenceUsageInf
final PsiClass refClass = getReferencedElement();
final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(refClass.getProject()).getElementFactory();
final PsiReferenceList extendsList = refClass.getExtendsList();
final PsiReferenceList extendingImplementsList = myExtendingClass instanceof PsiTypeParameter ? myExtendingClass.getExtendsList() : myExtendingClass.getImplementsList();
if (extendsList != null) {
final PsiClassType[] referenceTypes = extendsList.getReferencedTypes();
final PsiReferenceList listToAddExtends = refClass.isInterface() == myExtendingClass.isInterface() || myExtendingClass instanceof PsiTypeParameter ? myExtendingClass.getExtendsList() : extendingImplementsList;
final PsiClassType[] existingRefTypes = listToAddExtends.getReferencedTypes();
for (PsiClassType referenceType : referenceTypes) {
if (ArrayUtilRt.find(existingRefTypes, referenceType) > -1) continue;
listToAddExtends.add(elementFactory.createReferenceElementByType((PsiClassType)mySubstitutor.substitute(referenceType)));
}
}
final PsiReferenceList implementsList = refClass.getImplementsList();
if (implementsList != null) {
final PsiClassType[] existingRefTypes = extendingImplementsList.getReferencedTypes();
PsiClassType[] referenceTypes = implementsList.getReferencedTypes();
for (PsiClassType referenceType : referenceTypes) {
if (ArrayUtilRt.find(existingRefTypes, referenceType) > -1) continue;
extendingImplementsList.add(elementFactory.createReferenceElementByType((PsiClassType)mySubstitutor.substitute(referenceType)));
}
}
boolean targetTypeParameter = myExtendingClass instanceof PsiTypeParameter;
copyExtendsList(refClass.getExtendsList(), refClass.isInterface() == myExtendingClass.isInterface() || targetTypeParameter, elementFactory);
copyExtendsList(refClass.getImplementsList(), targetTypeParameter, elementFactory);
getElement().delete();
}
private void copyExtendsList(@Nullable PsiReferenceList sourceExtendsList,
boolean targetExtends,
PsiElementFactory elementFactory) {
if (sourceExtendsList != null) {
final PsiClassType[] referenceTypes = sourceExtendsList.getReferencedTypes();
final PsiReferenceList targetExtendsList = targetExtends ? myExtendingClass.getExtendsList() : myExtendingClass.getImplementsList();
final PsiClassType[] existingRefTypes = targetExtendsList.getReferencedTypes();
for (PsiClassType referenceType : referenceTypes) {
if (ArrayUtilRt.find(existingRefTypes, referenceType) > -1) continue;
PsiClassType classType = (PsiClassType)mySubstitutor.substitute(referenceType);
PsiElement extendsRef = targetExtendsList.add(elementFactory.createReferenceElementByType(classType));
CodeStyleManager.getInstance(myExtendingClass.getProject()).reformat(extendsRef);
}
}
}
public boolean isSafeDelete() {
if (getElement() == null) return false;
final PsiClass refClass = getReferencedElement();

View File

@@ -1,6 +1,6 @@
package p;
public class Test<R> {
public class Test<R> extends SSuper<java.util.Map<T, T>> {
public void foo(R t) {
System.out.println("Hello");
}

View File

@@ -1,5 +1,5 @@
package p1;
public class Super<T>{
public class Super<T> extends SSuper<java.util.Map<T, T>> {
public void foo(T t) {
System.out.println("Hello");
}