diff options
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java')
-rw-r--r-- | java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java new file mode 100644 index 000000000000..8268ee58d44a --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java @@ -0,0 +1,81 @@ +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); + } +} |