Reuse Java safe delete for type parameters in Kotlin declarations (aside of usages in Kotlin files)
This commit is contained in:
+12
-48
@@ -53,6 +53,7 @@ import org.jetbrains.jet.lexer.JetTokens;
|
|||||||
import org.jetbrains.jet.plugin.JetBundle;
|
import org.jetbrains.jet.plugin.JetBundle;
|
||||||
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
|
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
|
||||||
import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil;
|
import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil;
|
||||||
|
import org.jetbrains.jet.plugin.references.JetPsiReference;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -131,7 +132,14 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor {
|
|||||||
return new NonCodeUsageSearchInfo(insideDeleted, element);
|
return new NonCodeUsageSearchInfo(insideDeleted, element);
|
||||||
}
|
}
|
||||||
if (element instanceof JetTypeParameter) {
|
if (element instanceof JetTypeParameter) {
|
||||||
return findTypeParameterUsages((JetTypeParameter) element, allElementsToDelete, result);
|
Condition<PsiElement> insideDeleted = delegateToJavaProcessorAndCombineConditions(
|
||||||
|
AsJavaPackage.toPsiTypeParameters((JetTypeParameter) element),
|
||||||
|
getCondition(Arrays.asList(allElementsToDelete)),
|
||||||
|
allElementsToDelete,
|
||||||
|
result
|
||||||
|
);
|
||||||
|
findTypeParameterUsages((JetTypeParameter) element, result);
|
||||||
|
return new NonCodeUsageSearchInfo(insideDeleted, element);
|
||||||
}
|
}
|
||||||
if (element instanceof JetParameter) {
|
if (element instanceof JetParameter) {
|
||||||
JetParameter jetParameter = (JetParameter) element;
|
JetParameter jetParameter = (JetParameter) element;
|
||||||
@@ -347,71 +355,27 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
protected static void findTypeParameterUsages(
|
||||||
protected static NonCodeUsageSearchInfo findTypeParameterUsages(
|
|
||||||
@NotNull final JetTypeParameter parameter,
|
@NotNull final JetTypeParameter parameter,
|
||||||
@NotNull final PsiElement[] allElementsToDelete,
|
|
||||||
@NotNull final List<UsageInfo> result
|
@NotNull final List<UsageInfo> result
|
||||||
) {
|
) {
|
||||||
NonCodeUsageSearchInfo searchInfo = getSearchInfo(parameter, allElementsToDelete);
|
|
||||||
|
|
||||||
ReferencesSearch.search(parameter).forEach(new Processor<PsiReference>() {
|
|
||||||
@Override
|
|
||||||
public boolean process(PsiReference reference) {
|
|
||||||
PsiElement element = reference.getElement();
|
|
||||||
|
|
||||||
if (!isInside(element, allElementsToDelete)) {
|
|
||||||
result.add(new SafeDeleteReferenceSimpleDeleteUsageInfo(element, parameter, false));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
JetTypeParameterListOwner owner = PsiTreeUtil.getParentOfType(parameter, JetTypeParameterListOwner.class);
|
JetTypeParameterListOwner owner = PsiTreeUtil.getParentOfType(parameter, JetTypeParameterListOwner.class);
|
||||||
if (owner == null) return searchInfo;
|
if (owner == null) return;
|
||||||
|
|
||||||
List<JetTypeParameter> parameterList = owner.getTypeParameters();
|
List<JetTypeParameter> parameterList = owner.getTypeParameters();
|
||||||
final int parameterCount = parameterList.size();
|
|
||||||
final int parameterIndex = parameterList.indexOf(parameter);
|
final int parameterIndex = parameterList.indexOf(parameter);
|
||||||
|
|
||||||
ReferencesSearch.search(owner).forEach(
|
ReferencesSearch.search(owner).forEach(
|
||||||
new Processor<PsiReference>() {
|
new Processor<PsiReference>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean process(PsiReference reference) {
|
public boolean process(PsiReference reference) {
|
||||||
if (reference instanceof PsiJavaCodeReferenceElement) {
|
if (reference instanceof JetPsiReference) {
|
||||||
processJavaTypeArgumentListCandidate(
|
|
||||||
(PsiJavaCodeReferenceElement) reference, parameterIndex, parameterCount, result, parameter
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
processKotlinTypeArgumentListCandidate(reference, parameterIndex, result, parameter);
|
processKotlinTypeArgumentListCandidate(reference, parameterIndex, result, parameter);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return searchInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void processJavaTypeArgumentListCandidate(
|
|
||||||
@NotNull PsiJavaCodeReferenceElement reference,
|
|
||||||
int parameterIndex,
|
|
||||||
int parameterCount,
|
|
||||||
@NotNull List<UsageInfo> result,
|
|
||||||
@NotNull PsiElement parameter
|
|
||||||
) {
|
|
||||||
PsiReferenceParameterList parameterList = reference.getParameterList();
|
|
||||||
if (parameterList != null) {
|
|
||||||
PsiTypeElement[] typeArgs = parameterList.getTypeParameterElements();
|
|
||||||
if (typeArgs.length > parameterIndex) {
|
|
||||||
if (typeArgs.length == 1 && parameterCount > 1
|
|
||||||
&& typeArgs[0].getType() instanceof PsiDiamondType) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
result.add(new SafeDeleteReferenceJavaDeleteUsageInfo(typeArgs[parameterIndex], parameter, true));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void processKotlinTypeArgumentListCandidate(
|
private static void processKotlinTypeArgumentListCandidate(
|
||||||
|
|||||||
Reference in New Issue
Block a user