You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2015/04/15 16:44:37 UTC

svn commit: r1673794 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: plugins/value/ValueFactoryImpl.java spi/query/PropertyValues.java

Author: angela
Date: Wed Apr 15 14:44:37 2015
New Revision: 1673794

URL: http://svn.apache.org/r1673794
Log:
OAK-2674 : Fix FindBug Issues (pot null deref in ValueFactoryImpl and PropertyValues

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java?rev=1673794&r1=1673793&r2=1673794&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java Wed Apr 15 14:44:37 2015
@@ -73,8 +73,7 @@ public class ValueFactoryImpl implements
      * @param namePathMapper The name/path mapping used for converting JCR names/paths to
      * the internal representation.
      */
-    public ValueFactoryImpl(
-            @Nonnull Root root, @Nonnull NamePathMapper namePathMapper) {
+    public ValueFactoryImpl(@Nonnull Root root, @Nonnull NamePathMapper namePathMapper) {
         this.root = checkNotNull(root);
         this.namePathMapper = checkNotNull(namePathMapper);
     }
@@ -99,8 +98,13 @@ public class ValueFactoryImpl implements
      * @return  New {@code Value} instance
      * @throws IllegalArgumentException if {@code property.isArray()} is {@code true}.
      */
-    public static Value createValue(PropertyValue property, NamePathMapper namePathMapper) {
-        return newValue(PropertyValues.create(property), namePathMapper);
+    @Nonnull
+    public static Value createValue(@Nonnull PropertyValue property, @Nonnull NamePathMapper namePathMapper) {
+        PropertyState ps = PropertyValues.create(property);
+        if (ps == null) {
+            throw new IllegalArgumentException("Failed to convert the specified property value to a property state.");
+        }
+        return newValue(ps, namePathMapper);
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java?rev=1673794&r1=1673793&r2=1673794&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/PropertyValues.java Wed Apr 15 14:44:37 2015
@@ -51,15 +51,20 @@ public final class PropertyValues {
     }
 
     @CheckForNull
-    public static PropertyValue create(PropertyState property) {
+    public static PropertyValue create(@CheckForNull PropertyState property) {
         if (property == null) {
             return null;
         }
+        return newValue(property);
+    }
+
+    @Nonnull
+    private static PropertyValue newValue(@Nonnull PropertyState property) {
         return new PropertyStateValue(property);
     }
 
     @CheckForNull
-    public static PropertyState create(PropertyValue value) {
+    public static PropertyState create(@CheckForNull PropertyValue value) {
         if (value == null) {
             return null;
         }
@@ -70,27 +75,27 @@ public final class PropertyValues {
     }
 
     @Nonnull
-    public static PropertyValue newString(String value) {
+    public static PropertyValue newString(@Nonnull String value) {
         return new PropertyStateValue(StringPropertyState.stringProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newString(Iterable<String> value) {
+    public static PropertyValue newString(@Nonnull Iterable<String> value) {
         return new PropertyStateValue(MultiStringPropertyState.stringProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newLong(Long value) {
+    public static PropertyValue newLong(@Nonnull Long value) {
         return new PropertyStateValue(LongPropertyState.createLongProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newDouble(Double value) {
+    public static PropertyValue newDouble(@Nonnull Double value) {
         return new PropertyStateValue(DoublePropertyState.doubleProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newDecimal(BigDecimal value) {
+    public static PropertyValue newDecimal(@Nonnull BigDecimal value) {
         return new PropertyStateValue(DecimalPropertyState.decimalProperty("", value));
     }
 
@@ -100,61 +105,61 @@ public final class PropertyValues {
     }
 
     @Nonnull
-    public static PropertyValue newDate(String value) {
+    public static PropertyValue newDate(@Nonnull String value) {
         return new PropertyStateValue(GenericPropertyState.dateProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newName(String value) {
+    public static PropertyValue newName(@Nonnull String value) {
         return new PropertyStateValue(GenericPropertyState.nameProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newName(Iterable<String> value) {
+    public static PropertyValue newName(@Nonnull Iterable<String> value) {
         return new PropertyStateValue(MultiGenericPropertyState.nameProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newPath(String value) {
+    public static PropertyValue newPath(@Nonnull String value) {
         return new PropertyStateValue(GenericPropertyState.pathProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newReference(String value) {
+    public static PropertyValue newReference(@Nonnull String value) {
         return new PropertyStateValue(GenericPropertyState.referenceProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newWeakReference(String value) {
+    public static PropertyValue newWeakReference(@Nonnull String value) {
         return new PropertyStateValue(GenericPropertyState.weakreferenceProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newUri(String value) {
+    public static PropertyValue newUri(@Nonnull String value) {
         return new PropertyStateValue(GenericPropertyState.uriProperty("", value));
     }
 
     @Nonnull
-    public static PropertyValue newBinary(byte[] value) {
+    public static PropertyValue newBinary(@Nonnull byte[] value) {
         return new PropertyStateValue(BinaryPropertyState.binaryProperty("", value));
     }
     
     @Nonnull
-    public static PropertyValue newBinary(Blob value) {
+    public static PropertyValue newBinary(@Nonnull Blob value) {
         return new PropertyStateValue(BinaryPropertyState.binaryProperty("", value));
     }
 
     // --
 
-    public static boolean match(PropertyValue p1, PropertyState p2) {
-        return match(p1, create(p2));
+    public static boolean match(@Nonnull PropertyValue p1, @Nonnull PropertyState p2) {
+        return match(p1, newValue(p2));
     }
 
-    public static boolean match(PropertyState p1, PropertyValue p2) {
-        return match(create(p1), p2);
+    public static boolean match(@Nonnull PropertyState p1, @Nonnull PropertyValue p2) {
+        return match(newValue(p1), p2);
     }
 
-    public static boolean match(PropertyValue p1, PropertyValue p2) {
+    public static boolean match(@Nonnull PropertyValue p1, @Nonnull PropertyValue p2) {
         if (p1.getType().tag() != p2.getType().tag()) {
             return false;
         }
@@ -185,7 +190,7 @@ public final class PropertyValues {
 
     }
 
-    public static boolean notMatch(PropertyValue p1, PropertyValue p2) {
+    public static boolean notMatch(@Nonnull PropertyValue p1, @Nonnull PropertyValue p2) {
         if (p1.getType().tag() != p2.getType().tag()) {
             return true;
         }
@@ -245,8 +250,7 @@ public final class PropertyValues {
      * @return the converted value
      * @throws IllegalArgumentException if mapping is illegal
      */
-    public static PropertyValue convert(PropertyValue value, int targetType,
-            NamePathMapper mapper) {
+    public static PropertyValue convert(@Nonnull PropertyValue value, int targetType, @Nonnull NamePathMapper mapper) {
         int sourceType = value.getType().tag();
         if (sourceType == targetType) {
             return value;
@@ -390,7 +394,7 @@ public final class PropertyValues {
         return false;
     }
 
-    public static String getOakPath(String jcrPath, NamePathMapper mapper) {
+    public static String getOakPath(@Nonnull String jcrPath, @CheckForNull NamePathMapper mapper) {
         if (mapper == null) {
             // to simplify testing, a getNamePathMapper isn't required
             return jcrPath;