You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2018/01/26 03:01:17 UTC

svn commit: r1822248 - /uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java

Author: schor
Date: Fri Jan 26 03:01:16 2018
New Revision: 1822248

URL: http://svn.apache.org/viewvc?rev=1822248&view=rev
Log:
[UIMA-5706] add proper feature range testing for feature get/set apis to match v2

Modified:
    uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java

Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java?rev=1822248&r1=1822247&r2=1822248&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java Fri Jan 26 03:01:16 2018
@@ -36,6 +36,7 @@ import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.SofaFS;
 import org.apache.uima.cas.Type;
+import org.apache.uima.cas.TypeSystem;
 import org.apache.uima.cas.impl.SlotKinds.SlotKind;
 import org.apache.uima.internal.util.Misc;
 import org.apache.uima.jcas.JCas;
@@ -406,8 +407,17 @@ public class FeatureStructureImplC imple
    *          For JCas setters: convert offset to feature
    **************************************/
   
+  private void checkFeatRange(Feature feat, String shortRangeName) {
+    if ( ! (feat.getRange().getShortName().equals(shortRangeName))) {
+      /*Trying to access value of feature "{0}" as "{1}", but range of feature is "{2}".*/
+      throw new CASRuntimeException(CASRuntimeException.INAPPROP_RANGE, feat.getName(), "uima.cas." + shortRangeName, feat.getRange().getName());
+    }
+
+  }
+  
   @Override
   public void setBooleanValue(Feature feat, boolean v) {
+   checkFeatRange(feat, "Boolean");
     _setIntValueCJ((FeatureImpl) feat, v ? 1 : 0);
   }
   
@@ -419,6 +429,7 @@ public class FeatureStructureImplC imple
  
   @Override
   public void setByteValue(Feature feat, byte v) {
+    checkFeatRange(feat, "Byte");
     _setIntValueCJ((FeatureImpl) feat, v);
   }
   
@@ -436,6 +447,7 @@ public class FeatureStructureImplC imple
 
   @Override
   public void setShortValue(Feature feat, short v) {
+    checkFeatRange(feat, "Short");
     _setIntValueCJ((FeatureImpl) feat, v);
   }
   
@@ -453,6 +465,7 @@ public class FeatureStructureImplC imple
 
   @Override
   public void setIntValue(Feature feat, int v) {
+    checkFeatRange(feat, "Integer");
     _setIntValueCJ((FeatureImpl) feat, v);
   }
   
@@ -470,6 +483,7 @@ public class FeatureStructureImplC imple
 
   @Override
   public void setLongValue(Feature feat, long v) {
+    checkFeatRange(feat, "Long");
     _setLongValueCJ((FeatureImpl) feat, v);
   }
 
@@ -490,7 +504,10 @@ public class FeatureStructureImplC imple
   }
 
   @Override
-  public void setFloatValue(Feature feat, float v) { setIntValue(feat, CASImpl.float2int(v)); }
+  public void setFloatValue(Feature feat, float v) {
+    checkFeatRange(feat, "Float");
+    _setIntValueCJ((FeatureImpl) feat, CASImpl.float2int(v));
+  }
   
   protected void _setFloatValueNfc(int adjOffset, float v) { _setIntValueNfc(adjOffset, CASImpl.float2int(v)); }
 
@@ -506,7 +523,8 @@ public class FeatureStructureImplC imple
 
   @Override
   public void setDoubleValue(Feature feat, double v) {
-    setLongValue(feat, CASImpl.double2long(v)); 
+    checkFeatRange(feat, "Double");
+    _setLongValueCJ((FeatureImpl) feat, CASImpl.double2long(v));
   }
 
   protected void _setDoubleValueNfc(int adjOffset, double v) {
@@ -554,8 +572,7 @@ public class FeatureStructureImplC imple
     FeatureImpl fi = (FeatureImpl) feat;
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
     if (IS_ENABLE_RUNTIME_FEATURE_VALUE_VALIDATION) featureValueValidation(feat, v);
-
-    // no need to check for index corruption because fs refs can't be index keys
+     // no need to check for index corruption because fs refs can't be index keys
     _setRefValueCommon(fi, _maybeGetBaseForPearFs((TOP)v));
     _casView.maybeLogUpdate(this, fi);
   }
@@ -725,6 +742,7 @@ public class FeatureStructureImplC imple
   @Override
   public boolean getBooleanValue(Feature feat) {
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
+    checkFeatRange(feat, "Boolean");
     return _getBooleanValueNc((FeatureImpl) feat);
   }
 
@@ -734,14 +752,18 @@ public class FeatureStructureImplC imple
   public boolean _getBooleanValueNc(int adjOffset) { return _getIntValueCommon(adjOffset) == 1; }
 
   @Override
-  public byte getByteValue(Feature feat) { return (byte) getIntValue(feat); }
+  public byte getByteValue(Feature feat) {
+    checkFeatRange(feat, "Byte");
+    return (byte) _getIntValueCommon((FeatureImpl)feat); }
 
   public byte _getByteValueNc(FeatureImpl feat) { return (byte) _getIntValueNc(feat); }
   
   public byte _getByteValueNc(int adjOffset) { return  (byte) _getIntValueNc(adjOffset); }
 
   @Override
-  public short getShortValue(Feature feat) { return (short) getIntValue(feat); }
+  public short getShortValue(Feature feat) {
+    checkFeatRange(feat, "Short");
+    return (short) _getIntValueCommon((FeatureImpl)feat); }
 
   public short _getShortValueNc(FeatureImpl feat) { return (short) _getIntValueNc(feat); }
 
@@ -750,6 +772,7 @@ public class FeatureStructureImplC imple
   @Override
   public int getIntValue(Feature feat) {
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
+    checkFeatRange(feat, "Integer");
     return _getIntValueCommon((FeatureImpl)feat);
   }
     
@@ -761,6 +784,7 @@ public class FeatureStructureImplC imple
   @Override
   public long getLongValue(Feature feat) {
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
+    checkFeatRange(feat, "Long");
     return _getLongValueNc((FeatureImpl) feat);
   }
   
@@ -779,6 +803,7 @@ public class FeatureStructureImplC imple
   @Override
   public float getFloatValue(Feature feat) {
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
+    checkFeatRange(feat, "Float");
     return _getFloatValueNc(((FeatureImpl) feat).getAdjustedOffset());
   }
 
@@ -789,6 +814,7 @@ public class FeatureStructureImplC imple
   @Override
   public double getDoubleValue(Feature feat) {
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
+    checkFeatRange(feat, "Double");
     return _getDoubleValueNc((FeatureImpl) feat); 
   }
   
@@ -799,6 +825,7 @@ public class FeatureStructureImplC imple
   @Override
   public String getStringValue(Feature feat) {
     if (IS_ENABLE_RUNTIME_FEATURE_VALIDATION) featureValidation(feat);
+//    checkFeatRange(feat, "String");
     return _getStringValueNc((FeatureImpl) feat);
   }
 
@@ -1528,7 +1555,11 @@ public class FeatureStructureImplC imple
         return Long.toString(getLongValue(feat));
       case TypeSystemConstants.doubleTypeCode :
         return Double.toString(getDoubleValue(feat));
-      default: // byte, short, int, 
+      case TypeSystemConstants.byteTypeCode:
+        return Byte.toString(getByteValue(feat));
+      case TypeSystemConstants.shortTypeCode:
+        return Short.toString(getShortValue(feat));
+      default: // int, 
         return Integer.toString(getIntValue(feat));
       }
     }