LAB-31 move CreateClassQuickFix to python-psi-impl
authorSergey Stupin <sergey.stupin@jetbrains.com>
Thu, 13 Aug 2020 14:24:08 +0000 (16:24 +0200)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Thu, 13 Aug 2020 14:26:06 +0000 (14:26 +0000)
GitOrigin-RevId: d78869705bcaf455d2320fb0a15eccd6c95bf1d7

python/pluginResources/messages/PyBundle.properties
python/python-psi-impl/resources/messages/PyPsiBundle.properties
python/python-psi-impl/src/com/jetbrains/python/inspections/quickfix/CreateClassQuickFix.java [moved from python/src/com/jetbrains/python/inspections/quickfix/CreateClassQuickFix.java with 92% similarity]
python/python-psi-impl/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesVisitor.java
python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.java

index e30463871e6e9f82dbd5d3cb0bd8f691570b8091..5fa88502f91158ad5d888e108fdb8917119cede3 100644 (file)
@@ -38,9 +38,6 @@ QFIX.ignore.unresolved.reference.0=Ignore unresolved reference ''{0}''
 QFIX.mark.all.unresolved.attributes.of.0.as.ignored=Mark all unresolved attributes of ''{0}'' as ignored
 QFIX.fill.paragraph=Fill paragraph
 QFIX.add.qualifier=Add qualifier
-QFIX.create.class=Create class
-QFIX.create.class.0=Create class ''{0}''
-QFIX.create.class.in.module=Create class ''{0}'' in module {1}
 QFIX.remove.trailing.blank.lines=Remove trailing blank lines
 QFIX.generating.skeletons.for.binary.module=Generating skeletons for binary module
 QFIX.generate.binary.stubs=Generate binary stubs
index 3da7b8abe0df94a2770b3bc572327afd027be749..c6ac8046fd9f0cbd8132e7c1eda9b0a0ea16edb2 100644 (file)
@@ -333,6 +333,9 @@ QFIX.add.encoding=Add encoding declaration
 QFIX.remove.trailing.suffix=Remove trailing suffix
 QFIX.action.failed=Action failed
 QFIX.create.function.in.module=Create function in module
+QFIX.create.class=Create class
+QFIX.create.class.0=Create class ''{0}''
+QFIX.create.class.in.module=Create class ''{0}'' in module {1}
 
 
 #PyRemoveUnderscoresInNumericLiteralsQuickFix
similarity index 92%
rename from python/src/com/jetbrains/python/inspections/quickfix/CreateClassQuickFix.java
rename to python/python-psi-impl/src/com/jetbrains/python/inspections/quickfix/CreateClassQuickFix.java
index 4020aca13b8bf1b09e607c2a3418fae7504542e1..f9886d68a034c4d8ed300f036b6c3d3bbedd7a05 100644 (file)
@@ -15,8 +15,8 @@ import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiLanguageInjectionHost;
 import com.intellij.psi.SmartPointerManager;
 import com.intellij.psi.SmartPsiElementPointer;
-import com.jetbrains.python.PyBundle;
 import com.jetbrains.python.PyNames;
+import com.jetbrains.python.PyPsiBundle;
 import com.jetbrains.python.psi.LanguageLevel;
 import com.jetbrains.python.psi.PyClass;
 import com.jetbrains.python.psi.PyElementGenerator;
@@ -45,15 +45,15 @@ public class CreateClassQuickFix implements LocalQuickFix {
   @NotNull
   public String getName() {
     if (myAnchor instanceof PyFile) {
-      return PyBundle.message("QFIX.create.class.in.module", myClassName, ((PyFile)myAnchor).getName());
+      return PyPsiBundle.message("QFIX.create.class.in.module", myClassName, ((PyFile)myAnchor).getName());
     }
-    return PyBundle.message("QFIX.create.class.0", myClassName);
+    return PyPsiBundle.message("QFIX.create.class.0", myClassName);
   }
 
   @Override
   @NotNull
   public String getFamilyName() {
-    return PyBundle.message("QFIX.create.class");
+    return PyPsiBundle.message("QFIX.create.class");
   }
 
   @Override
index afd06c8856f18eac65de82d1a8b7bf2369ccaf90..a4a9f2a9edd71f769d5ec7f23f6111bfbbfbfdae 100644 (file)
@@ -17,6 +17,7 @@ import com.intellij.openapi.util.Key;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.*;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.psi.util.QualifiedName;
@@ -42,6 +43,7 @@ import com.jetbrains.python.inspections.PyInspectionsUtil;
 import com.jetbrains.python.inspections.quickfix.AddFieldQuickFix;
 import com.jetbrains.python.inspections.quickfix.AddFunctionQuickFix;
 import com.jetbrains.python.inspections.quickfix.AddMethodQuickFix;
+import com.jetbrains.python.inspections.quickfix.CreateClassQuickFix;
 import com.jetbrains.python.psi.*;
 import com.jetbrains.python.psi.impl.PyBuiltinCache;
 import com.jetbrains.python.psi.impl.PyImportStatementNavigator;
@@ -374,7 +376,7 @@ public abstract class PyUnresolvedReferencesVisitor extends PyInspectionVisitor
         description = PyPsiBundle.message("INSP.unresolved.ref.$0", refText);
 
         ContainerUtil.addAll(fixes, getAutoImportFixes(node, reference, element));
-        ContainerUtil.addIfNotNull(fixes, getCreateClassFix(myTypeEvalContext, refText, element));
+        ContainerUtil.addIfNotNull(fixes, getCreateClassFix(refText, element));
       }
     }
     ProblemHighlightType hl_type;
@@ -916,7 +918,7 @@ public abstract class PyUnresolvedReferencesVisitor extends PyInspectionVisitor
     else if (type instanceof PyModuleType) {
       PyFile file = ((PyModuleType)type).getModule();
       result.add(new AddFunctionQuickFix(refText, file.getName()));
-      getCreateClassFix(myTypeEvalContext, refText, element);
+      getCreateClassFix(refText, element);
     }
     return result;
   }
@@ -930,7 +932,26 @@ public abstract class PyUnresolvedReferencesVisitor extends PyInspectionVisitor
     return Collections.emptyList();
   }
 
-  LocalQuickFix getCreateClassFix(TypeEvalContext typeEvalContext, @NonNls String refText, PsiElement element) {
+  LocalQuickFix getCreateClassFix(@NonNls String refText, PsiElement element) {
+    if (refText.length() > 2 && Character.isUpperCase(refText.charAt(0)) && !StringUtil.toUpperCase(refText).equals(refText) &&
+        PsiTreeUtil.getParentOfType(element, PyImportStatementBase.class) == null) {
+      PsiElement anchor = element;
+      if (element instanceof PyQualifiedExpression) {
+        final PyExpression expr = ((PyQualifiedExpression)element).getQualifier();
+        if (expr != null) {
+          final PyType type = myTypeEvalContext.getType(expr);
+          if (type instanceof PyModuleType) {
+            anchor = ((PyModuleType)type).getModule();
+          }
+          else {
+            anchor = null;
+          }
+        }
+        if (anchor != null) {
+          return new CreateClassQuickFix(refText, anchor);
+        }
+      }
+    }
     return null;
   }
 
index 7ae97ec95dda6da956b287481abaf870914567cf..d028127b497e6e5bf5053a9c1ab478e0c54c8b0a 100644 (file)
@@ -10,7 +10,6 @@ import com.intellij.openapi.module.ModuleUtilCore;
 import com.intellij.openapi.projectRoots.Sdk;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Key;
-import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiElementVisitor;
@@ -38,13 +37,11 @@ import com.jetbrains.python.packaging.PyRequirementsKt;
 import com.jetbrains.python.psi.*;
 import com.jetbrains.python.psi.impl.references.PyImportReference;
 import com.jetbrains.python.psi.types.PyClassTypeImpl;
-import com.jetbrains.python.psi.types.PyModuleType;
 import com.jetbrains.python.psi.types.PyType;
 import com.jetbrains.python.psi.types.TypeEvalContext;
 import com.jetbrains.python.sdk.PythonSdkUtil;
 import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
 import one.util.streamex.StreamEx;
-import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -366,30 +363,6 @@ public class PyUnresolvedReferencesInspection extends PyInspection {
       return false;
     }
 
-    @Override
-    public LocalQuickFix getCreateClassFix(TypeEvalContext typeEvalContext, @NonNls String refText, PsiElement element) {
-      if (refText.length() > 2 && Character.isUpperCase(refText.charAt(0)) && !StringUtil.toUpperCase(refText).equals(refText) &&
-          PsiTreeUtil.getParentOfType(element, PyImportStatementBase.class) == null) {
-        PsiElement anchor = element;
-        if (element instanceof PyQualifiedExpression) {
-          final PyExpression expr = ((PyQualifiedExpression)element).getQualifier();
-          if (expr != null) {
-            final PyType type = typeEvalContext.getType(expr);
-            if (type instanceof PyModuleType) {
-              anchor = ((PyModuleType)type).getModule();
-            }
-            else {
-              anchor = null;
-            }
-          }
-          if (anchor != null) {
-            return new CreateClassQuickFix(refText, anchor);
-          }
-        }
-      }
-      return null;
-    }
-
     private static boolean isCall(PyElement node) {
       final PyCallExpression callExpression = PsiTreeUtil.getParentOfType(node, PyCallExpression.class);
       return callExpression != null && node == callExpression.getCallee();