diff --git a/python/psi-api/src/com/jetbrains/python/psi/impl/PyPsiUtils.java b/python/psi-api/src/com/jetbrains/python/psi/impl/PyPsiUtils.java index b723e0ea3618..88d691436fd2 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/impl/PyPsiUtils.java +++ b/python/psi-api/src/com/jetbrains/python/psi/impl/PyPsiUtils.java @@ -368,6 +368,11 @@ public class PyPsiUtils { return expr; } + @Nullable + public static String strValue(@Nullable PyExpression expression) { + return expression instanceof PyStringLiteralExpression ? ((PyStringLiteralExpression)expression).getStringValue() : null; + } + private static abstract class TopLevelVisitor extends PyRecursiveElementVisitor { public void visitPyElement(final PyElement node) { super.visitPyElement(node); diff --git a/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java b/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java index 8b680fbc26e8..e9a23c461829 100644 --- a/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java +++ b/python/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleType.java @@ -112,7 +112,7 @@ public class PyNamedTupleType extends PyClassTypeImpl implements PyCallableType @Nullable public static PyType fromCall(PyCallExpression call) { - final String name = PyUtil.strValue(call.getArgument(0, PyExpression.class)); + final String name = PyPsiUtils.strValue(call.getArgument(0, PyExpression.class)); final PyExpression fieldNamesExpression = PyPsiUtils.flattenParens(call.getArgument(1, PyExpression.class)); if (name == null || fieldNamesExpression == null) { return null; @@ -122,7 +122,7 @@ public class PyNamedTupleType extends PyClassTypeImpl implements PyCallableType fieldNames = PyUtil.strListValue(fieldNamesExpression); } else { - final String fieldNamesString = PyUtil.strValue(fieldNamesExpression); + final String fieldNamesString = PyPsiUtils.strValue(fieldNamesExpression); if (fieldNamesString != null) { fieldNames = parseFieldNamesString(fieldNamesString); } diff --git a/python/src/com/jetbrains/python/documentation/DocumentationBuilder.java b/python/src/com/jetbrains/python/documentation/DocumentationBuilder.java index a0312dcca570..e179184165ea 100644 --- a/python/src/com/jetbrains/python/documentation/DocumentationBuilder.java +++ b/python/src/com/jetbrains/python/documentation/DocumentationBuilder.java @@ -20,6 +20,7 @@ import com.jetbrains.python.console.PyConsoleUtil; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyCallExpressionHelper; +import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.QualifiedResolveResult; import com.jetbrains.python.psi.resolve.RootVisitor; @@ -356,7 +357,7 @@ class DocumentationBuilder { private void addParameterDoc(PyNamedParameter followed) { PyFunction function = PsiTreeUtil.getParentOfType(followed, PyFunction.class); if (function != null) { - final String docString = PyUtil.strValue(function.getDocStringExpression()); + final String docString = PyPsiUtils.strValue(function.getDocStringExpression()); StructuredDocString structuredDocString = StructuredDocString.parse(docString); if (structuredDocString != null) { final String name = followed.getName(); @@ -388,7 +389,7 @@ class DocumentationBuilder { .addItem(" of class ").addWith(PythonDocumentationProvider.LinkMyClass, $().addWith(TagCode, $(cls.getName()))).addItem(BR) ; - final String docString = PyUtil.strValue(PyUtil.getAttributeDocString((PyTargetExpression)myElement)); + final String docString = PyPsiUtils.strValue(PyUtil.getAttributeDocString((PyTargetExpression)myElement)); if (docString != null) { addFormattedDocString(myElement, docString, myBody, myEpilog); } diff --git a/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java b/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java index 7903f86edc47..9a9f0dc4d00f 100644 --- a/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java +++ b/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java @@ -9,7 +9,7 @@ import com.intellij.util.xmlb.annotations.Transient; import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyTargetExpression; -import com.jetbrains.python.psi.PyUtil; +import com.jetbrains.python.psi.impl.PyPsiUtils; import java.util.List; @@ -41,7 +41,7 @@ public class PyDocumentationSettings implements PersistentStateComponent words = StringUtil.split(docformat, " "); return words.size() > 0 && format.equalsIgnoreCase(words.get(0)); diff --git a/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java b/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java index 6b1fc574f899..ffd52de5a3a7 100644 --- a/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java +++ b/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java @@ -24,6 +24,7 @@ import com.jetbrains.python.console.PydevConsoleRunner; import com.jetbrains.python.console.PydevDocumentationProvider; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; +import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.impl.PyQualifiedName; import com.jetbrains.python.psi.resolve.QualifiedNameFinder; import com.jetbrains.python.psi.types.*; @@ -284,7 +285,7 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i } private static boolean specifiesReturnType(PyStringLiteralExpression docStringExpression) { - String value = PyUtil.strValue(docStringExpression); + String value = PyPsiUtils.strValue(docStringExpression); if (value == null) { return false; } diff --git a/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskIntrospector.java b/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskIntrospector.java index c0693efa0bb2..837b44854eb5 100644 --- a/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskIntrospector.java +++ b/python/src/com/jetbrains/python/packaging/setupPy/SetupTaskIntrospector.java @@ -103,7 +103,7 @@ public class SetupTaskIntrospector { if (taskClass != null) { final PyTargetExpression description = taskClass.findClassAttribute("description", true); if (description != null) { - final String descriptionText = PyUtil.strValue(PyPsiUtils.flattenParens(description.findAssignedValue())); + final String descriptionText = PyPsiUtils.strValue(PyPsiUtils.flattenParens(description.findAssignedValue())); if (descriptionText != null) { task.setDescription(descriptionText); } @@ -112,7 +112,7 @@ public class SetupTaskIntrospector { final List booleanOptions = resolveSequenceValue(taskClass, "boolean_options"); final List booleanOptionsList = new ArrayList(); for (PyExpression option : booleanOptions) { - final String s = PyUtil.strValue(option); + final String s = PyPsiUtils.strValue(option); if (s != null) { booleanOptionsList.add(s); } @@ -167,8 +167,8 @@ public class SetupTaskIntrospector { if (dict instanceof PyDictLiteralExpression) { final PyKeyValueExpression[] elements = ((PyDictLiteralExpression)dict).getElements(); for (PyKeyValueExpression element : elements) { - String key = PyUtil.strValue(PyPsiUtils.flattenParens(element.getKey())); - String value = PyUtil.strValue(PyPsiUtils.flattenParens(element.getValue())); + String key = PyPsiUtils.strValue(PyPsiUtils.flattenParens(element.getKey())); + String value = PyPsiUtils.strValue(PyPsiUtils.flattenParens(element.getValue())); if (key != null && value != null) { result.put(key, value); } @@ -183,8 +183,8 @@ public class SetupTaskIntrospector { if (tuple instanceof PyTupleExpression) { final PyExpression[] elements = ((PyTupleExpression)tuple).getElements(); if (elements.length == 3) { - String name = PyUtil.strValue(elements[0]); - final String description = PyUtil.strValue(elements[2]); + String name = PyPsiUtils.strValue(elements[0]); + final String description = PyPsiUtils.strValue(elements[2]); if (name != null && description != null) { if (negativeOptMap.containsKey(name)) { return null; diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index 2ecf8a58bfde..a741eb981fd9 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -39,6 +39,7 @@ import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil; import com.jetbrains.python.codeInsight.stdlib.PyNamedTupleType; import com.jetbrains.python.documentation.EpydocUtil; import com.jetbrains.python.psi.impl.PyBuiltinCache; +import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.QualifiedResolveResult; import com.jetbrains.python.psi.types.*; @@ -832,11 +833,6 @@ public class PyUtil { return null; } - @Nullable - public static String strValue(@Nullable PyExpression expression) { - return expression instanceof PyStringLiteralExpression ? ((PyStringLiteralExpression)expression).getStringValue() : null; - } - @NotNull public static Map dictValue(@NotNull PyDictLiteralExpression dict) { Map result = Maps.newLinkedHashMap(); @@ -881,7 +877,7 @@ public class PyUtil { @Nullable public static String getKeywordArgumentString(PyCallExpression expr, String keyword) { - return strValue(expr.getKeywordArgument(keyword)); + return PyPsiUtils.strValue(expr.getKeywordArgument(keyword)); } public static boolean isExceptionClass(PyClass pyClass) { diff --git a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java index 5f9718771e10..dc69ec51baa3 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyClassImpl.java @@ -1015,7 +1015,7 @@ public class PyClassImpl extends PyPresentableElementImpl implement if (stub != null) { return stub.getDocString(); } - return PyUtil.strValue(getDocStringExpression()); + return PyPsiUtils.strValue(getDocStringExpression()); } public String toString() { diff --git a/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java index 384da7e6f9d3..adb916c446d2 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFunctionImpl.java @@ -344,7 +344,7 @@ public class PyFunctionImpl extends PyPresentableElementImpl imp PyReferenceExpression warningClass = callExpression.getArgument(1, PyReferenceExpression.class); if (warningClass != null && (PyNames.DEPRECATION_WARNING.equals(warningClass.getReferencedName()) || PyNames.PENDING_DEPRECATION_WARNING.equals(warningClass.getReferencedName()))) { - return PyUtil.strValue(callExpression.getArguments()[0]); + return PyPsiUtils.strValue(callExpression.getArguments()[0]); } } } @@ -360,7 +360,7 @@ public class PyFunctionImpl extends PyPresentableElementImpl imp return stub.getDocString(); } final PyStringLiteralExpression docStringExpression = getDocStringExpression(); - return PyUtil.strValue(docStringExpression); + return PyPsiUtils.strValue(docStringExpression); } private boolean isGeneratedStub() { diff --git a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java index 84a1bd255be6..c1f647372133 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java @@ -210,7 +210,7 @@ public class PyTargetExpressionImpl extends PyPresentableElementImpl return new PyClassStubImpl(psi.getName(), parentStub, superClasses.toArray(new PyQualifiedName[superClasses.size()]), ((PyClassImpl) psi).getOwnSlots(), - PyUtil.strValue(docStringExpression), + PyPsiUtils.strValue(docStringExpression), getStubElementType()); } diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java index a128c4415f8c..097e12e82425 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java @@ -8,8 +8,8 @@ import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.PyStringLiteralExpression; import com.jetbrains.python.psi.PyStubElementType; -import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.impl.PyFunctionImpl; +import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.stubs.PyFunctionNameIndex; import com.jetbrains.python.psi.stubs.PyFunctionStub; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class PyFunctionElementType extends PyStubElementType