blob: 8268ee58d44abcaf95a82e35fbba0951c92c3917 [file] [log] [blame]
package com.intellij.codeInsight.daemon.impl.quickfix;
import com.intellij.codeInsight.ExpectedTypeInfo;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class CreateStaticMethodQuickFix implements LocalQuickFix {
@NotNull
private final PsiClass targetClass;
@NotNull
private final String methodName;
@NotNull
private final List<String> types;
public CreateStaticMethodQuickFix(@NotNull PsiClass aClass,
@NotNull String name,
@NotNull List<String> types) {
targetClass = aClass;
methodName = name;
this.types = types;
}
@NotNull
@Override
public String getName() {
return QuickFixBundle.message("create.method.from.usage.family");
}
@NotNull
@Override
public String getFamilyName() {
return QuickFixBundle.message("create.method.from.usage.family");
}
@Override
public void applyFix(@NotNull final Project project, @NotNull ProblemDescriptor descriptor) {
boolean java8Interface = false;
if (targetClass.isInterface()) {
if (PsiUtil.isLanguageLevel8OrHigher(targetClass)) {
java8Interface = true;
} else {
return;
}
}
PsiMethod method = CreateMethodFromUsageFix.createMethod(targetClass, null, null, methodName);
if (method == null) {
return;
}
if (!java8Interface) {
PsiUtil.setModifierProperty(method, PsiModifier.PUBLIC, true);
}
PsiUtil.setModifierProperty(method, PsiModifier.STATIC, true);
List<Pair<PsiExpression,PsiType>> args = ContainerUtil.map(types, new Function<String, Pair<PsiExpression, PsiType>>() {
@Override
public Pair<PsiExpression, PsiType> fun(String s) {
return new Pair<PsiExpression, PsiType>(null, PsiType.getTypeByName(s, project, GlobalSearchScope.allScope(project)));
}
});
CreateMethodFromUsageFix.doCreate(targetClass, method, false,
args,
PsiSubstitutor.UNKNOWN,
ExpectedTypeInfo.EMPTY_ARRAY,
null);
}
}