ensure denotable types
authorAnna Kozlova <anna.kozlova@jetbrains.com>
Wed, 28 Oct 2015 13:53:13 +0000 (14:53 +0100)
committerAnna Kozlova <anna.kozlova@jetbrains.com>
Wed, 28 Oct 2015 15:05:05 +0000 (16:05 +0100)
java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterNonDenotable.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeNonDenotable.java [new file with mode: 0644]

index 60501c409d2076618410bde61855b149a85a7b98..039e9f82f165ceb4fd76f5e4480e1daefc460db7 100644 (file)
@@ -63,6 +63,7 @@ import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.psi.util.PsiTypesUtil;
 import com.intellij.psi.util.PsiUtil;
 import com.intellij.psi.util.proximity.PsiProximityComparator;
+import com.intellij.refactoring.util.RefactoringUtil;
 import com.intellij.util.IncorrectOperationException;
 import com.intellij.util.Processor;
 import com.intellij.util.containers.ContainerUtil;
@@ -251,7 +252,7 @@ public class CreateFromUsageUtils {
       Pair<PsiExpression, PsiType> arg = arguments.get(i);
       PsiExpression exp = arg.first;
 
-      PsiType argType = exp == null ? arg.second : exp.getType();
+      PsiType argType = exp == null ? arg.second : RefactoringUtil.getTypeByExpression(exp);
       SuggestedNameInfo suggestedInfo = JavaCodeStyleManager.getInstance(psiManager.getProject()).suggestVariableName(
         VariableKind.PARAMETER, null, exp, argType);
       @NonNls String[] names = suggestedInfo.names; //TODO: callback about used name
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterNonDenotable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/afterNonDenotable.java
new file mode 100644 (file)
index 0000000..dd9ca21
--- /dev/null
@@ -0,0 +1,16 @@
+// "Create method 'foo'" "true"
+class A {
+  private List<? extends CharSequence> sequences = null;
+
+  {
+    foo(sequences.map());
+  }
+
+    private void foo(List<?> map) {
+        
+    }
+
+    interface List<T>  {
+    List<? super T> map();
+  }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeNonDenotable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createMethodFromUsage/beforeNonDenotable.java
new file mode 100644 (file)
index 0000000..62577fd
--- /dev/null
@@ -0,0 +1,12 @@
+// "Create method 'foo'" "true"
+class A {
+  private List<? extends CharSequence> sequences = null;
+
+  {
+    f<caret>oo(sequences.map());
+  }
+
+  interface List<T>  {
+    List<? super T> map();
+  }
+}