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 2016/03/18 19:50:12 UTC

svn commit: r1735658 - in /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima: cas/impl/ internal/util/ util/

Author: schor
Date: Fri Mar 18 18:50:12 2016
New Revision: 1735658

URL: http://svn.apache.org/viewvc?rev=1735658&view=rev
Log:
[UIMA-4674] minor refactorings, add missing setter for double value with no feat checking (used by generated JCas setters for double values)

Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasSerializerSupport.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureImpl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/UimaDecompiler.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/Pair.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/FileUtils.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/Misc.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasSerializerSupport.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasSerializerSupport.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasSerializerSupport.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CasSerializerSupport.java Fri Mar 18 18:50:12 2016
@@ -1198,8 +1198,8 @@ public class CasSerializerSupport {
       return r + xe.localName;
     }
     
-    public boolean isStaticMultiRef(int featCode) {
-      return tsi.ll_getFeatureForCode(featCode).isMultipleReferencesAllowed();
+    public boolean isStaticMultiRef(FeatureImpl fi) {
+      return fi.isMultipleReferencesAllowed();
     }
 
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSClassRegistry.java Fri Mar 18 18:50:12 2016
@@ -402,7 +402,7 @@ public class FSClassRegistry {
    */
   private static Class<?> maybeLoadJCas(String typeName) {
     Class<?> clazz = null;
-    String className = typeName2ClassName(typeName);
+    String className = Misc.typeName2ClassName(typeName);
     try {
       clazz = Class.forName(className, true, FSClassRegistry.class.getClassLoader());
     } catch (ClassNotFoundException e) {
@@ -410,27 +410,7 @@ public class FSClassRegistry {
     }
     return clazz;
   }
-  
-  public static String typeName2ClassName(String typeName) {
-    if (typeName.startsWith(CAS.UIMA_CAS_PREFIX)) {
-      return "org.apache.uima.jcas.cas." + typeName.substring(CAS.UIMA_CAS_PREFIX.length());
-    }
-    if (typeName.startsWith(CAS.UIMA_TCAS_PREFIX)) {
-      return "org.apache.uima.jcas.tcas." + typeName.substring(CAS.UIMA_TCAS_PREFIX.length());
-    }
-    return typeName;
-  }
-  
-  public static String javaClassName2UimaTypeName(String className) {
-    if (className.startsWith("org.apache.uima.jcas.cas.")) { 
-      return CAS.UIMA_CAS_PREFIX + className.substring("org.apache.uima.jcas.cas.".length());
-    }
-    if (className.startsWith("org.apache.uima.jcas.tcas.")) { 
-      return CAS.UIMA_TCAS_PREFIX + className.substring("org.apache.uima.jcas.tcas.".length());
-    }
-    return className;
-  }
-      
+        
   /**
    * Return a Functional Interface for a generator for creating instances of a type.
    *   Function takes a casImpl arg, and returning an instance of the JCas type.
@@ -623,7 +603,7 @@ public class FSClassRegistry {
 
     // skip the test if the jcasClassInfo is being inherited
     //   because that has already been checked
-    if (!clazz.getName().equals(typeName2ClassName(ti.getName()))) {
+    if (!clazz.getName().equals(Misc.typeName2ClassName(ti.getName()))) {
       return;
     }
     

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureImpl.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureImpl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureImpl.java Fri Mar 18 18:50:12 2016
@@ -149,12 +149,12 @@ public class FeatureImpl implements Feat
         this.getClass().getSimpleName(), getName(), rangeType, isMultipleRefsAllowed);
   }
 
-  public String getGetterSetterName(boolean isGet) {
-    String shortName1stLetterUpperCase = Character.toUpperCase(this.shortName.charAt(0)) + 
-        ((shortName.length() == 1) ? "" : this.shortName.substring(1));
-
-    return (isGet ? "get" : "set")  + shortName1stLetterUpperCase;
-  }
+//  public String getGetterSetterName(boolean isGet) {
+//    String shortName1stLetterUpperCase = Character.toUpperCase(this.shortName.charAt(0)) + 
+//        ((shortName.length() == 1) ? "" : this.shortName.substring(1));
+//
+//    return (isGet ? "get" : "set")  + shortName1stLetterUpperCase;
+//  }
   
   /**
    * Note: you can only compare features from the same type system. If you compare features from

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeatureStructureImplC.java Fri Mar 18 18:50:12 2016
@@ -387,6 +387,8 @@ public class FeatureStructureImplC imple
   @Override
   public void setDoubleValue(Feature feat, double v) { setLongValue(feat, CASImpl.double2long(v)); }
 
+  protected void _setDoubleValueNfc(FeatureImpl feat, double v) { _setLongValueNfcCJ(feat, CASImpl.double2long(v)); }
+
   public void _setDoubleValueNcNj(FeatureImpl fi, double v) { _setLongValueNcNj(fi, CASImpl.double2long(v)); }
 
   public void _setDoubleValueNcNj(int adjOffset, double v) { _setLongValueNcNj(adjOffset, CASImpl.double2long(v)); }

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/UimaDecompiler.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/UimaDecompiler.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/UimaDecompiler.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/UimaDecompiler.java Fri Mar 18 18:50:12 2016
@@ -26,11 +26,14 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
+import java.nio.file.Path;
 import java.util.Arrays;
 
 import org.apache.uima.util.Misc;
 
+import com.strobel.assembler.InputTypeLoader;
 import com.strobel.assembler.metadata.Buffer;
+import com.strobel.assembler.metadata.CompositeTypeLoader;
 import com.strobel.assembler.metadata.ITypeLoader;
 import com.strobel.decompiler.Decompiler;
 import com.strobel.decompiler.DecompilerSettings;
@@ -70,6 +73,10 @@ public class UimaDecompiler {
 
   
   private final DecompilerSettings decompilerSettings = DecompilerSettings.javaDefaults();
+  { 
+    decompilerSettings.setMergeVariables(true);
+    decompilerSettings.setSimplifyMemberReferences(true);
+  }
 
   private final ClassLoader classLoader;
   
@@ -86,7 +93,7 @@ public class UimaDecompiler {
       setDecompilerSettingsForClassLoader();
     }
   }
-  
+    
   public ByteArrayOutputStream decompile(String className, byte[] byteArray) {
     setDecompilerSettingsForByteArray(className.replace('.', '/'), byteArray);
     return decompileCommon(className);
@@ -116,6 +123,59 @@ public class UimaDecompiler {
     return baos;
   }
   
+  /**
+   * Decompile from the file system, maybe in a Jar.
+   * @param path the Path to the file to decompile
+   * @return the decompiled form as a string
+   */
+  public String decompile(byte[] b) {
+    PlainTextOutput pto = new PlainTextOutput();
+    
+    String classNameSlashes = extractClassNameSlashes(b);
+    setDecompilerSettingsForByteArray(classNameSlashes, b);
+    Decompiler.decompile(classNameSlashes, pto, decompilerSettings);
+    String s = pto.toString();
+    
+    String packageName = "";
+    String className = "";
+    int ip = s.indexOf("package ");
+    if (ip >= 0) {
+      ip = ip + "package ".length();  // start of package name;
+      int ipe = s.indexOf(";", ip);  
+      packageName = s.substring(ip, ipe).replace('.', '/') + "/";
+    }
+    
+    int ic = s.indexOf(" class ");
+    if (ic >= 0) {
+      ic = ic + " class ".length();  // start of class name
+      int ice = s.indexOf(" ", ic);
+      className = s.substring(ic, ice);
+    }
+    
+    String classNameSlashes2 = packageName + className;
+    
+    if (!classNameSlashes2.equals(classNameSlashes)) {
+//      System.out.println("debug trying classname: " + classNameSlashes2);
+      pto = new PlainTextOutput();
+      setDecompilerSettingsForByteArray(classNameSlashes2, b);
+      Decompiler.decompile(classNameSlashes2, pto, decompilerSettings);
+      s = pto.toString(); 
+    }
+    return s;
+  }
+  
+  public String extractClassNameSlashes(byte[] b) {
+    if (b[10] != 7 || b[13] != 1) { 
+      return "";
+    }
+    int length = b[14] * 16 + b[15];
+    try {
+      return new String(b, 16, length, "UTF-8");      
+    } catch (UnsupportedEncodingException e) {
+      throw new RuntimeException(e);
+    }
+  }
+  
   public boolean decompileToOutputDirectory(String className) {
     ByteArrayOutputStream baos = decompile(className);
     return writeIfOk(baos, className);
@@ -140,7 +200,8 @@ public class UimaDecompiler {
           return false;
         }
       }      
-    };    
+    }; 
+    ITypeLoader tc = new CompositeTypeLoader(tl, new InputTypeLoader());
     decompilerSettings.setTypeLoader(tl);
   }
     

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java Fri Mar 18 18:50:12 2016
@@ -912,7 +912,7 @@ public class XmiCasSerializer {
         case LowLevelCAS.TYPE_CLASS_LONGARRAY:
         case LowLevelCAS.TYPE_CLASS_DOUBLEARRAY:
         case LowLevelCAS.TYPE_CLASS_FSARRAY: 
-          if (cds.isStaticMultiRef(fi.getCode())) {
+          if (cds.isStaticMultiRef(fi)) {
             attrValue = cds.getXmiId(fs.getFeatureValue(fi));
           } else {
             attrValue = arrayToString(fs.getFeatureValue(fi), featureValueClass);
@@ -922,7 +922,7 @@ public class XmiCasSerializer {
           // special case for StringArrays, which stored values as child elements rather
           // than attributes.
         case LowLevelCAS.TYPE_CLASS_STRINGARRAY: 
-          if (cds.isStaticMultiRef(fi.getCode())) {
+          if (cds.isStaticMultiRef(fi)) {
             attrValue = cds.getXmiId(fs.getFeatureValue(fi));
           } else {
             stringArrayToElementList(featName, (StringArray) fs.getFeatureValue(fi), childElements);
@@ -935,7 +935,7 @@ public class XmiCasSerializer {
         case CasSerializerSupport.TYPE_CLASS_FLOATLIST:
         case CasSerializerSupport.TYPE_CLASS_FSLIST: 
           TOP startNode = fs.getFeatureValue(fi);
-          if (insideListNode || cds.isStaticMultiRef(fi.getCode())) {
+          if (insideListNode || cds.isStaticMultiRef(fi)) {
             // If the feature has multipleReferencesAllowed = true OR if we're already
             // inside another list node (i.e. this is the "tail" feature), serialize as a normal FS.
             // Otherwise, serialize as a multi-valued property.
@@ -952,7 +952,7 @@ public class XmiCasSerializer {
           // special case for StringLists, which stored values as child elements rather
           // than attributes.
         case CasSerializerSupport.TYPE_CLASS_STRINGLIST: 
-          if (insideListNode || cds.isStaticMultiRef(fi.getCode())) {
+          if (insideListNode || cds.isStaticMultiRef(fi)) {
             attrValue = cds.getXmiId(fs.getFeatureValue(fi));
           } else {
             // it is not safe to use a space-separated attribute, which would

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/Pair.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/Pair.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/Pair.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/internal/util/Pair.java Fri Mar 18 18:50:12 2016
@@ -2,8 +2,8 @@ package org.apache.uima.internal.util;
 
 public class Pair<T, U> {
 
-  final T t;
-  final U u;
+  public final T t;
+  public final U u;
 
   public Pair(T t, U u) {
     this.t = t;

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/FileUtils.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/FileUtils.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/FileUtils.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/FileUtils.java Fri Mar 18 18:50:12 2016
@@ -29,6 +29,9 @@ import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
 import java.util.Random;
 
@@ -194,6 +197,14 @@ public class FileUtils {
     }
   }
 
+  public static void writeToFile(Path path, String data) {   
+    try (BufferedWriter bw = Files.newBufferedWriter(path, StandardOpenOption.CREATE)) {
+      bw.write(data);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+  
   /**
    * Delete all files in a directory (not recursive).
    * 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/Misc.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/Misc.java?rev=1735658&r1=1735657&r2=1735658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/Misc.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/Misc.java Fri Mar 18 18:50:12 2016
@@ -35,6 +35,7 @@ import java.util.WeakHashMap;
 import java.util.function.Consumer;
 
 import org.apache.uima.UIMARuntimeException;
+import org.apache.uima.cas.CAS;
 
 public class Misc {
 
@@ -347,7 +348,39 @@ public class Misc {
     StringBuilder sb = new StringBuilder(items.size() * 5 + 2);
     return addElementsToStringBuilder(sb, items).toString();
   }
-    
+
+  /**
+   * Convert a UIMA type name to a JCas class name (fully qualified)
+   *   Normally this is the same, but for two prefixes, it's slightly different
+   * @param typeName the UIMA type name, fully qualified
+   * @return the fully qualified JCas class name 
+   */
+  public static String typeName2ClassName(String typeName) {
+    if (typeName.startsWith(CAS.UIMA_CAS_PREFIX)) {
+      return "org.apache.uima.jcas.cas." + typeName.substring(CAS.UIMA_CAS_PREFIX.length());
+    }
+    if (typeName.startsWith(CAS.UIMA_TCAS_PREFIX)) {
+      return "org.apache.uima.jcas.tcas." + typeName.substring(CAS.UIMA_TCAS_PREFIX.length());
+    }
+    return typeName;
+  }
+  
+  /**
+   * Convert a JCas class name (fully qualified) to a UIMA type name 
+   *   Normally this is the same, but for two prefixes, it's slightly different
+   * @param typeName the UIMA type name, fully qualified
+   * @return the fully qualified JCas class name 
+   */
+  public static String javaClassName2UimaTypeName(String className) {
+    if (className.startsWith("org.apache.uima.jcas.cas.")) { 
+      return CAS.UIMA_CAS_PREFIX + className.substring("org.apache.uima.jcas.cas.".length());
+    }
+    if (className.startsWith("org.apache.uima.jcas.tcas.")) { 
+      return CAS.UIMA_TCAS_PREFIX + className.substring("org.apache.uima.jcas.tcas.".length());
+    }
+    return className;
+  }
+
 //private static final Function<String, Class> uimaSystemFindLoadedClass;
 //static {
 //  try {