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 {