diff options
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight/daemon')
4 files changed, 90 insertions, 3 deletions
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java index dbf454207cca..d753875208c3 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java @@ -333,6 +333,9 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig else { PsiType exprType = RefactoringUtil.getTypeByExpression(expression); if (exprType == null) return null; + if (exprType instanceof PsiDisjunctionType) { + exprType = ((PsiDisjunctionType)exprType).getLeastUpperBound(); + } final ParameterInfoImpl changedParameterInfo = new ParameterInfoImpl(i, parameter.getName(), exprType); result.add(changedParameterInfo); changedParams.add(changedParameterInfo); @@ -403,6 +406,9 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig if (varargParam != null && pi >= parameters.length) return false; PsiType exprType = RefactoringUtil.getTypeByExpression(expression); if (exprType == null) return false; + if (exprType instanceof PsiDisjunctionType) { + exprType = ((PsiDisjunctionType)exprType).getLeastUpperBound(); + } JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(expression.getProject()); String name = suggestUniqueParameterName(codeStyleManager, expression, exprType, existingNames); final ParameterInfoImpl newParameterInfo = new ParameterInfoImpl(-1, name, exprType, expression.getText().replace('\n', ' ')); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java index 8e93a6a0c817..ad3d3fc8010a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java @@ -182,7 +182,7 @@ public class CreateMethodFromUsageFix extends CreateFromUsageBaseFix { context); } - protected static PsiMethod createMethod(PsiClass targetClass, + public static PsiMethod createMethod(PsiClass targetClass, PsiClass parentClass, PsiMember enclosingContext, String methodName) { 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); + } +} diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java index d8caac1d59a6..9c1d38853b2c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java @@ -42,12 +42,12 @@ import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.RefactoringActionHandlerFactory; import com.intellij.ui.components.JBList; import com.intellij.util.IncorrectOperationException; -import org.codehaus.groovy.util.ListHashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -55,7 +55,7 @@ import java.util.Map; * @author cdr */ public class MoveClassToModuleFix implements IntentionAction { - private final Map<PsiClass, Module> myModules = new ListHashMap<PsiClass, Module>(); + private final Map<PsiClass, Module> myModules = new LinkedHashMap<PsiClass, Module>(); private final String myReferenceName; private final Module myCurrentModule; private final PsiDirectory mySourceRoot; |