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 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, s -> new Pair<PsiExpression, PsiType>(null, PsiType.getTypeByName(s, project, GlobalSearchScope.allScope(project)))); CreateMethodFromUsageFix.doCreate(targetClass, method, false, args, PsiSubstitutor.UNKNOWN, ExpectedTypeInfo.EMPTY_ARRAY, null); } }