summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/codeInsight/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight/daemon')
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java6
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateMethodFromUsageFix.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateStaticMethodQuickFix.java81
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java4
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;