summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java
diff options
context:
space:
mode:
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.java81
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);
+ }
+}