PY-16987 SectionField.getName, getType and getDescription also return null if underly...
authorMikhail Golubev <mikhail.golubev@jetbrains.com>
Tue, 22 Sep 2015 11:58:00 +0000 (14:58 +0300)
committerMikhail Golubev <mikhail.golubev@jetbrains.com>
Tue, 22 Sep 2015 15:44:09 +0000 (18:44 +0300)
python/src/com/jetbrains/numpy/codeInsight/NumpyDocStringTypeProvider.java
python/src/com/jetbrains/python/documentation/docstrings/SectionBasedDocString.java

index 1406bbc3cce94a9886841e8ac8b0770fb11a02b5..dee3836a197bc921980ace7fd42fc2f52058c81a 100644 (file)
@@ -217,7 +217,7 @@ public class NumpyDocStringTypeProvider extends PyTypeProviderBase {
           case 1:
             // Function returns single value
             final String typeName = returns.get(0).getType();
-            if (!typeName.isEmpty()) {
+            if (StringUtil.isNotEmpty(typeName)) {
               final PyType genericType = getPsiFacade(function).parseTypeAnnotation("T", function);
               if (isUfuncType(function, typeName)) return genericType;
               return parseNumpyDocType(function, typeName);
@@ -232,8 +232,8 @@ public class NumpyDocStringTypeProvider extends PyTypeProviderBase {
             for (int i = 0; i < returns.size(); i++) {
               SectionField ret = returns.get(i);
               final String memberTypeName = ret.getType();
-              final PyType returnType = !memberTypeName.isEmpty() ? parseNumpyDocType(function, memberTypeName) : null;
-              final boolean isOptional = !memberTypeName.isEmpty() && memberTypeName.contains("optional");
+              final PyType returnType = StringUtil.isNotEmpty(memberTypeName) ? parseNumpyDocType(function, memberTypeName) : null;
+              final boolean isOptional = StringUtil.isNotEmpty(memberTypeName) && memberTypeName.contains("optional");
 
               if (isOptional) {
                 if (i != 0) {
@@ -389,18 +389,18 @@ public class NumpyDocStringTypeProvider extends PyTypeProviderBase {
   private static PyType getParameterType(@NotNull PyFunction function, @NotNull String parameterName) {
     final NumpyDocString docString = forFunction(function, function);
     if (docString != null) {
-      SectionField parameter = docString.getFirstFieldForParameter(parameterName);
+      String paramType = docString.getParamType(parameterName);
 
       // If parameter name starts with "p_", and we failed to obtain it from the docstring,
       // try to obtain parameter named without such prefix.
-      if (parameter == null && parameterName.startsWith("p_")) {
-        parameter = docString.getFirstFieldForParameter(parameterName.substring(2));
+      if (paramType == null && parameterName.startsWith("p_")) {
+        paramType = docString.getParamType(parameterName.substring(2));
       }
-      if (parameter != null) {
-        if (isUfuncType(function, parameter.getType())) {
+      if (paramType != null) {
+        if (isUfuncType(function, paramType)) {
           return getPsiFacade(function).parseTypeAnnotation("T <= numbers.Number or numpy.core.multiarray.ndarray or collections.Iterable", function);
         }
-        final PyType numpyDocType = parseNumpyDocType(function, parameter.getType());
+        final PyType numpyDocType = parseNumpyDocType(function, paramType);
         if ("size".equals(parameterName)) {
           return getPsiFacade(function).createUnionType(Lists.newArrayList(numpyDocType, PyBuiltinCache.getInstance(function).getIntType()));
         }
index 8b4743313b97a63cf10a737fe4796a2b3124b89c..f022499f163b1b748c5d8a4c4b79b56ce9107301 100644 (file)
@@ -463,7 +463,7 @@ public abstract class SectionBasedDocString extends DocStringLineParser implemen
     return ContainerUtil.mapNotNull(getExceptionFields(), new Function<SectionField, String>() {
       @Override
       public String fun(SectionField field) {
-        return field.getType();
+        return StringUtil.nullize(field.getType());
       }
     });
   }
@@ -604,9 +604,9 @@ public abstract class SectionBasedDocString extends DocStringLineParser implemen
       myDescription = description;
     }
 
-    @NotNull
+    @Nullable
     public String getName() {
-      return myNames.isEmpty() ? "" : myNames.get(0).toString();
+      return myNames.isEmpty() ? null : myNames.get(0).toString();
     }
 
     @Nullable
@@ -629,9 +629,9 @@ public abstract class SectionBasedDocString extends DocStringLineParser implemen
       });
     }
 
-    @NotNull
+    @Nullable
     public String getType() {
-      return myType == null ? "" : myType.toString();
+      return myType == null ? null : myType.toString();
     }
 
     @Nullable
@@ -639,9 +639,9 @@ public abstract class SectionBasedDocString extends DocStringLineParser implemen
       return myType;
     }
 
-    @NotNull 
+    @Nullable 
     public String getDescription() {
-      return myDescription == null ? "" : PyIndentUtil.removeCommonIndent(myDescription.getValue(), true);
+      return myDescription == null ? null : PyIndentUtil.removeCommonIndent(myDescription.getValue(), true);
     }
 
     @Nullable