Author: schor Date: Wed Nov 4 14:37:04 2015 New Revision: 1712554 URL: http://svn.apache.org/viewvc?rev=1712554&view=rev Log: [UIMA-4666] update JCasgen to generate new style of JCas cover classes for v3
Removed: uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCas_Type.javajet Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java?rev=1712554&r1=1712553&r2=1712554&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java Wed Nov 4 14:37:04 2015 @@ -26,66 +26,87 @@ import org.apache.uima.resource.metadata public class JCasTypeTemplate implements Jg.IJCasTypeTemplate { public String generate(Object argument) { - StringBuffer stringBuffer = new StringBuffer(); + StringBuilder stringBuilder = new StringBuilder(); - stringBuffer.append("\n\n"); + stringBuilder.append("\n\n"); Object [] args = (Object [])argument; Jg jg = (Jg)args[0]; TypeDescription td = (TypeDescription)args[1]; jg.packageName = jg.getJavaPkg(td); - stringBuffer.append("/* First created by JCasGen "); - stringBuffer.append(jg.getDate()); - stringBuffer.append(" */\n"); + stringBuilder.append(" \n/* Apache UIMA v3 - First created by JCasGen "); + stringBuilder.append(jg.getDate()); + stringBuilder.append(" */\n\n"); if (0 != jg.packageName.length()) { - stringBuffer.append("package "); - stringBuffer.append(jg.packageName); - stringBuffer.append(";\n"); + stringBuilder.append("package "); + stringBuilder.append(jg.packageName); + stringBuilder.append(";\n"); } else jg.error.newError(IError.WARN, jg.getString("pkgMissing", new Object[] {td.getName()}), null); - stringBuffer.append("\nimport org.apache.uima.jcas.JCas; \nimport org.apache.uima.jcas.JCasRegistry;\nimport org.apache.uima.jcas.cas.TOP_Type;\n\n"); + stringBuilder.append("\nimport org.apache.uima.cas.impl.CASImpl;\nimport org.apache.uima.cas.impl.TypeImpl;\nimport org.apache.uima.jcas.JCas; \nimport org.apache.uima.jcas.JCasRegistry;\n\n"); for(Iterator i=jg.collectImports(td, false).iterator(); i.hasNext();) { - stringBuffer.append("import "); - stringBuffer.append((String)i.next()); - stringBuffer.append(";\n"); + stringBuilder.append("import "); + stringBuilder.append((String)i.next()); + stringBuilder.append(";\n"); } - stringBuffer.append("\n\n"); + stringBuilder.append("\n\n"); String typeName = jg.getJavaName(td); - String typeName_Type = typeName + "_Type"; - String jcasTypeCasted = "((" + typeName_Type + ")jcasType)"; - stringBuffer.append("/** "); - stringBuffer.append(jg.nullBlank(td.getDescription())); - stringBuffer.append("\n * Updated by JCasGen "); - stringBuffer.append(jg.getDate()); - stringBuffer.append("\n * XML source: "); - stringBuffer.append(jg.xmlSourceFileName); - stringBuffer.append("\n * @generated */\npublic class "); - stringBuffer.append(typeName); - stringBuffer.append(" extends "); - stringBuffer.append(jg.getJavaName(td.getSupertypeName())); - stringBuffer.append(" {\n /** @generated\n * @ordered \n */\n @SuppressWarnings (\"hiding\")\n public final static int typeIndexID = JCasRegistry.register("); - stringBuffer.append(typeName); - stringBuffer.append(".class);\n /** @generated\n * @ordered \n */\n @SuppressWarnings (\"hiding\")\n public final static int type = typeIndexID;\n /** @generated\n * @return index of the type \n */\n @Override\n public int getTypeIndexID() {return typeIndexID;}\n \n /** Never called. Disable default constructor\n * @generated */\n protected "); - stringBuffer.append(typeName); - stringBuffer.append("() {/* intentionally empty block */}\n \n /** Internal - constructor used by generator \n * @generated\n * @param addr low level Feature Structure reference\n * @param type the type of this Feature Structure \n */\n public "); - stringBuffer.append(typeName); - stringBuffer.append("(int addr, TOP_Type type) {\n super(addr, type);\n readObject();\n }\n \n /** @generated\n * @param jcas JCas to which this Feature Structure belongs \n */\n public "); - stringBuffer.append(typeName); - stringBuffer.append("(JCas jcas) {\n super(jcas);\n readObject(); \n } \n"); - if (jg.isSubTypeOfAnnotation(td)) { - stringBuffer.append("\n /** @generated\n * @param jcas JCas to which this Feature Structure belongs\n * @param begin offset to the begin spot in the SofA\n * @param end offset to the end spot in the SofA \n */ \n public "); - stringBuffer.append(typeName); - stringBuffer.append("(JCas jcas, int begin, int end) {\n super(jcas);\n setBegin(begin);\n setEnd(end);\n readObject();\n } \n"); - } - stringBuffer.append("\n /** \n * <!-- begin-user-doc -->\n * Write your own initialization here\n * <!-- end-user-doc -->\n *\n * @generated modifiable \n */\n private void readObject() {/*default - does nothing empty block */}\n \n"); - FeatureDescription [] fds = td.getFeatures(); - for (int i = 0; i < fds.length; i++) { - FeatureDescription fd = fds[i]; + stringBuilder.append("/** "); + stringBuilder.append(jg.nullBlank(td.getDescription())); + stringBuilder.append("\n * Updated by JCasGen "); + stringBuilder.append(jg.getDate()); + stringBuilder.append("\n * XML source: "); + stringBuilder.append(jg.xmlSourceFileName); + stringBuilder.append("\n * @generated */\npublic class "); + stringBuilder.append(typeName); + stringBuilder.append(" extends "); + stringBuilder.append(jg.getJavaName(td.getSupertypeName())); + stringBuilder.append(" {\n /** @generated\n * @ordered \n */\n @SuppressWarnings (\"hiding\")\n public final static int typeIndexID = JCasRegistry.register("); + stringBuilder.append(typeName); + stringBuilder.append(".class);\n /** @generated\n * @ordered \n */\n @SuppressWarnings (\"hiding\")\n public final static int type = typeIndexID;\n /** @generated\n * @return index of the type \n */\n @Override\n public int getTypeIndexID() {return typeIndexID;}\n \n "); + + StringBuilder localData = new StringBuilder(); + StringBuilder featRegistry = new StringBuilder(); + + featRegistry.append(" /* Register Features */\n"); + + for (FeatureDescription fd : td.getFeatures()) { String featName = fd.getName(); String featUName = jg.uc1(featName); // upper case first letter + if (Jg.reservedFeatureNames.contains(featUName)) { + jg.error.newError(IError.ERROR, + jg.getString("reservedNameUsed", new Object[] { featName, td.getName() }), + null); + } + + String featDesc = jg.nullBlank(fd.getDescription()); + String featDescCmt = featDesc; + + String rangeType = jg.getJavaRangeType(fd); + String elemType = jg.getJavaRangeArrayElementType(fd); + + localData.append(" private ").append(rangeType).append(" _F_").append(featName).append("; // ").append(featDescCmt).append('\n'); + featRegistry.append(" public final static int _FI_").append(featName).append(" = JCasRegistry.registerFeature(typeIndexID);\n"); + + } /* of Features iteration */ + stringBuilder.append("\n /* *****************\n * Local Data *\n * *****************/ \n \n"); + stringBuilder.append(featRegistry); + stringBuilder.append("\n \n"); + stringBuilder.append(localData); + stringBuilder.append(" \n /** Never called. Disable default constructor\n * @generated */\n protected "); + stringBuilder.append(typeName); + stringBuilder.append("() {/* intentionally empty block */}\n \n /** Internal - constructor used by generator \n * @generated\n * @param casImpl the CAS this Feature Structure belongs to\n * @param type the type of this Feature Structure \n */\n public "); + stringBuilder.append(typeName); + stringBuilder.append("(TypeImpl type, CASImpl casImpl) {\n super(type, casImpl);\n readObject();\n }\n \n /** @generated\n * @param jcas JCas to which this Feature Structure belongs \n */\n public "); + stringBuilder.append(typeName); + stringBuilder.append("(JCas jcas) {\n super(jcas);\n readObject(); \n } \n\n /** \n * <!-- begin-user-doc -->\n * Write your own initialization here\n * <!-- end-user-doc -->\n *\n * @generated modifiable \n */\n private void readObject() {/*default - does nothing empty block */}\n \n"); + for (FeatureDescription fd : td.getFeatures()) { + + String featName = fd.getName(); + String featUName = jg.uc1(featName); // upper case first letter if (Jg.reservedFeatureNames.contains(featUName)) jg.error.newError(IError.ERROR, jg.getString("reservedNameUsed", new Object[] { featName, td.getName() }), @@ -97,121 +118,79 @@ public class JCasTypeTemplate implements String rangeType = jg.getJavaRangeType(fd); String elemType = jg.getJavaRangeArrayElementType(fd); - stringBuffer.append(" \n \n //*--------------*\n //* Feature: "); - stringBuffer.append(featName); - stringBuffer.append("\n\n /** getter for "); - stringBuffer.append(featName); - stringBuffer.append(" - gets "); - stringBuffer.append(featDescCmt); - stringBuffer.append("\n * @generated\n * @return value of the feature \n */\n public "); - stringBuffer.append(rangeType); - stringBuffer.append(" get"); - stringBuffer.append(featUName); - stringBuffer.append("() {\n "); - stringBuffer.append("if ("); - stringBuffer.append(typeName_Type); - stringBuffer.append(".featOkTst && "); - stringBuffer.append(jcasTypeCasted); - stringBuffer.append(".casFeat_"); - stringBuffer.append(featName); - stringBuffer.append(" == null)\n jcasType.jcas.throwFeatMissing(\""); - stringBuffer.append(featName); - stringBuffer.append("\", \""); - stringBuffer.append(td.getName()); - stringBuffer.append("\");\n"); - stringBuffer.append(" return "); - stringBuffer.append(jg.getFeatureValue(fd, td)); - stringBuffer.append(";}\n \n /** setter for "); - stringBuffer.append(featName); - stringBuffer.append(" - sets "); - stringBuffer.append(featDescCmt); - stringBuffer.append(" \n * @generated\n * @param v value to set into the feature \n */\n public void set"); - stringBuffer.append(featUName); - stringBuffer.append("("); - stringBuffer.append(rangeType); - stringBuffer.append(" v) {\n "); - stringBuffer.append("if ("); - stringBuffer.append(typeName_Type); - stringBuffer.append(".featOkTst && "); - stringBuffer.append(jcasTypeCasted); - stringBuffer.append(".casFeat_"); - stringBuffer.append(featName); - stringBuffer.append(" == null)\n jcasType.jcas.throwFeatMissing(\""); - stringBuffer.append(featName); - stringBuffer.append("\", \""); - stringBuffer.append(td.getName()); - stringBuffer.append("\");\n"); - stringBuffer.append(" "); - stringBuffer.append(jg.setFeatureValue(fd, td)); - stringBuffer.append(";} \n "); + stringBuilder.append(" \n \n //*--------------*\n //* Feature: "); + stringBuilder.append(featName); + stringBuilder.append("\n\n /** getter for "); + stringBuilder.append(featName); + stringBuilder.append(" - gets "); + stringBuilder.append(featDescCmt); + stringBuilder.append("\n * @generated\n * @return value of the feature \n */\n public "); + stringBuilder.append(rangeType); + stringBuilder.append(" get"); + stringBuilder.append(featUName); + stringBuilder.append("() { return _F_"); + stringBuilder.append(featName); + stringBuilder.append(";}\n \n /** setter for "); + stringBuilder.append(featName); + stringBuilder.append(" - sets "); + stringBuilder.append(featDescCmt); + stringBuilder.append(" \n * @generated\n * @param v value to set into the feature \n */\n public void set"); + stringBuilder.append(featUName); + stringBuilder.append("("); + stringBuilder.append(rangeType); + stringBuilder.append(" v) {\n "); + if (jg.isStringSubtype(fd)) { + stringBuilder.append(" _typeImpl.getFeatureByBaseName(\""); + stringBuilder.append(featName); + stringBuilder.append("\").validateIsInAllowedValue(v);\n "); + } + stringBuilder.append(" "); + if (jg.isPossibleIndexKey(fd)) { + stringBuilder.append(" _casView.setWithCheckAndJournalJFRI(this, _FI_"); + stringBuilder.append(featName); + stringBuilder.append(", () -> _F_"); + stringBuilder.append(featName); + stringBuilder.append(" = v);\n "); + } else { + stringBuilder.append(" \n _casView.setWithJournalJFRI(this, _FI_"); + stringBuilder.append(featName); + stringBuilder.append(", () -> _F_"); + stringBuilder.append(featName); + stringBuilder.append(" = v);\n "); + } + stringBuilder.append(" } \n "); if (jg.hasArrayRange(fd)) { - stringBuffer.append(" \n /** indexed getter for "); - stringBuffer.append(featName); - stringBuffer.append(" - gets an indexed value - "); - stringBuffer.append(featDescCmt); - stringBuffer.append("\n * @generated\n * @param i index in the array to get\n * @return value of the element at index i \n */\n public "); - stringBuffer.append(elemType); - stringBuffer.append(" get"); - stringBuffer.append(featUName); - stringBuffer.append("(int i) {\n "); - stringBuffer.append("if ("); - stringBuffer.append(typeName_Type); - stringBuffer.append(".featOkTst && "); - stringBuffer.append(jcasTypeCasted); - stringBuffer.append(".casFeat_"); - stringBuffer.append(featName); - stringBuffer.append(" == null)\n jcasType.jcas.throwFeatMissing(\""); - stringBuffer.append(featName); - stringBuffer.append("\", \""); - stringBuffer.append(td.getName()); - stringBuffer.append("\");\n"); - stringBuffer.append(" "); - stringBuffer.append("jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, "); - stringBuffer.append(jcasTypeCasted); - stringBuffer.append(".casFeatCode_"); - stringBuffer.append(featName); - stringBuffer.append("), i);\n"); - stringBuffer.append(" return "); - stringBuffer.append(jg.getArrayFeatureValue(fd, td)); - stringBuffer.append(";}\n\n /** indexed setter for "); - stringBuffer.append(featName); - stringBuffer.append(" - sets an indexed value - "); - stringBuffer.append(featDescCmt); - stringBuffer.append("\n * @generated\n * @param i index in the array to set\n * @param v value to set into the array \n */\n public void set"); - stringBuffer.append(featUName); - stringBuffer.append("(int i, "); - stringBuffer.append(elemType); - stringBuffer.append(" v) { \n "); - stringBuffer.append("if ("); - stringBuffer.append(typeName_Type); - stringBuffer.append(".featOkTst && "); - stringBuffer.append(jcasTypeCasted); - stringBuffer.append(".casFeat_"); - stringBuffer.append(featName); - stringBuffer.append(" == null)\n jcasType.jcas.throwFeatMissing(\""); - stringBuffer.append(featName); - stringBuffer.append("\", \""); - stringBuffer.append(td.getName()); - stringBuffer.append("\");\n"); - stringBuffer.append(" "); - stringBuffer.append("jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr, "); - stringBuffer.append(jcasTypeCasted); - stringBuffer.append(".casFeatCode_"); - stringBuffer.append(featName); - stringBuffer.append("), i);\n"); - stringBuffer.append(" "); - stringBuffer.append(jg.setArrayFeatureValue(fd, td)); - stringBuffer.append(";}\n "); + stringBuilder.append(" \n /** indexed getter for "); + stringBuilder.append(featName); + stringBuilder.append(" - gets an indexed value - "); + stringBuilder.append(featDescCmt); + stringBuilder.append("\n * @generated\n * @param i index in the array to get\n * @return value of the element at index i \n */\n public "); + stringBuilder.append(elemType); + stringBuilder.append(" get"); + stringBuilder.append(featUName); + stringBuilder.append("(int i) {\n return get"); + stringBuilder.append(featUName); + stringBuilder.append("().get(i);} \n\n /** indexed setter for "); + stringBuilder.append(featName); + stringBuilder.append(" - sets an indexed value - "); + stringBuilder.append(featDescCmt); + stringBuilder.append("\n * @generated\n * @param i index in the array to set\n * @param v value to set into the array \n */\n public void set"); + stringBuilder.append(featUName); + stringBuilder.append("(int i, "); + stringBuilder.append(elemType); + stringBuilder.append(" v) {\n get"); + stringBuilder.append(featUName); + stringBuilder.append("().set(i, v);} \n "); } /* of hasArray */ - stringBuffer.append(""); + stringBuilder.append(""); } /* of Features iteration */ - stringBuffer.append(""); + stringBuilder.append(""); if (td.getName().equals("uima.cas.Annotation")) { - stringBuffer.append(" "); - stringBuffer.append(" /** Constructor with begin and end passed as arguments \n * @generated\n * @param jcas JCas this Annotation is in\n * @param begin the begin offset\n * @param end the end offset\n */\n public Annotation(JCas jcas, int begin, int end) { \n this(jcas); // forward to constructor \n this.setBegin(begin); \n this.setEnd(end); \n } \n \n /** @see org.apache.uima.cas.text.AnnotationFS#getCoveredText() \n * @generated\n * @return the covered Text \n */ \n public String getCoveredText() { \n final CAS casView = this.getView();\n final String text = casView.getDocumentText();\n if (text == null) {\n return null;\n }\n return text.substring(getBegin(), getEnd());\n } \n \n /** @deprecated \n * @generated\n * @return the begin offset \n */\n public int getStart() {return getBegin();}\n"); - stringBuffer.append(""); + stringBuilder.append(" "); + stringBuilder.append(" /** Constructor with begin and end passed as arguments \n * @generated\n * @param jcas JCas this Annotation is in\n * @param begin the begin offset\n * @param end the end offset\n */\n public Annotation(JCas jcas, int begin, int end) { \n this(jcas); // forward to constructor \n this.setBegin(begin); \n this.setEnd(end);\n readObject(); \n } \n \n /** @see org.apache.uima.cas.text.AnnotationFS#getCoveredText() \n * @generated\n * @return the covered Text \n */ \n public String getCoveredText() { \n final CAS casView = this.getView();\n final String text = casView.getDocumentText();\n if (text == null) {\n return null;\n }\n return text.substring(getBegin(), getEnd());\n } \n \n /** @deprecated \n * @generated\n * @return the begin offset \n */\n public int getStart() {return getBegin();}\n"); + stringBuilder.append(""); } /* of Annotation if-statement */ - stringBuffer.append("}\n\n "); - return stringBuffer.toString(); + stringBuilder.append("}\n\n "); + return stringBuilder.toString(); } } \ No newline at end of file Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java?rev=1712554&r1=1712553&r2=1712554&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java Wed Nov 4 14:37:04 2015 @@ -52,11 +52,14 @@ import javax.swing.UIManager; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngineDescription; +import org.apache.uima.cas.BuiltinTypeKinds; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.impl.CASImpl; +import org.apache.uima.cas.impl.TypeImpl; +import org.apache.uima.cas.impl.TypeSystemImpl; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceManager; import org.apache.uima.resource.metadata.FeatureDescription; @@ -791,9 +794,9 @@ public class Jg { simpleClassName = removePkg(getJavaName(td)); generateClass(progressMonitor, outputDirectory, td, jcasTypeInstance.generate(new Object[] { this, td }), getJavaName(td), merger); - simpleClassName = removePkg(getJavaName_Type(td)); - generateClass(progressMonitor, outputDirectory, td, jcas_TypeInstance.generate(new Object[] { - this, td }), getJavaName_Type(td), merger); +// simpleClassName = removePkg(getJavaName_Type(td)); +// generateClass(progressMonitor, outputDirectory, td, jcas_TypeInstance.generate(new Object[] { +// this, td }), getJavaName_Type(td), merger); } String getPkg(TypeDescription td) { @@ -1001,6 +1004,24 @@ public class Jg { return false; return bi.isArray; } + + boolean isPossibleIndexKey(FeatureDescription fd) { + String rangeTypeName = fd.getRangeTypeName(); + // keys are primitives + string + string subtypes + TypeImpl rangeType = (null == typeSystem) ? null : (TypeImpl) typeSystem.getType(rangeTypeName); + return (null == typeSystem) || // default is to do checking + rangeType.isStringSubtype() || + BuiltinTypeKinds.primitiveTypeNames_contains(rangeTypeName); // includes String + } + + boolean isStringSubtype(FeatureDescription fd) { + if (null != typeSystem) { + String rangeTypeName = fd.getRangeTypeName(); + TypeImpl rangeType = (TypeImpl) typeSystem.getType(rangeTypeName); + return rangeType.getSuperType() == ((TypeSystemImpl)typeSystem).stringType; + } + return false; + } String getJavaRangeArrayElementType(FeatureDescription fd) { String arrayElementCasNameWithNameSpace = fd.getElementType(); @@ -1050,6 +1071,8 @@ public class Jg { } String simpleCore(String get_set, String range, String fname, String tname_Type) { + + String v = ", v"; if (get_set.equals("set") && range.equals("Ref")) v = ", jcasType.ll_cas.ll_getFSRef(v)"; Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html?rev=1712554&r1=1712553&r2=1712554&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html Wed Nov 4 14:37:04 2015 @@ -21,6 +21,17 @@ <html> <head><title>org.apache.uima.tools.jcasgen</title></head> <body> -Classes for the JCasGen tool +<h1>JCasGen</h1> +<p>This describes the format of the generated JCas cover classes for UIMA v3.</p> +<p>In V3</p> +<ul> +<li>there are no xxx_Type classes</li> +<li>As in v2, multiple type systems may be sequentially loaded into a (reset) CAS, under one class loader</li> +<li>Change: one consistent JCas gen'd set of classes is loaded per class loader +<ul> +<li>PEARs can't switch to alternate JCas gen'd versions; these must be manually (with assistance) merged once and the merged result put in the classpath</li> +</ul> +</li> +</ul> </body> </html> Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet?rev=1712554&r1=1712553&r2=1712554&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet Wed Nov 4 14:37:04 2015 @@ -22,7 +22,9 @@ Jg jg = (Jg)args[0]; TypeDescription td = (TypeDescription)args[1]; jg.packageName = jg.getJavaPkg(td); %> -/* First created by JCasGen <%=jg.getDate()%> */ + +/* Apache UIMA v3 - First created by JCasGen <%=jg.getDate()%> */ + <% if (0 != jg.packageName.length()) {%> package <%=jg.packageName%>; <% } @@ -30,9 +32,10 @@ package <%=jg.packageName%>; jg.error.newError(IError.WARN, jg.getString("pkgMissing", new Object[] {td.getName()}), null); %> +import org.apache.uima.cas.impl.CASImpl; +import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; -import org.apache.uima.jcas.cas.TOP_Type; <% for(Iterator i=jg.collectImports(td, false).iterator(); i.hasNext();) { %> import <%=(String)i.next()%>; @@ -40,8 +43,6 @@ import <%=(String)i.next()%>; <% String typeName = jg.getJavaName(td); - String typeName_Type = typeName + "_Type"; - String jcasTypeCasted = "((" + typeName_Type + ")jcasType)"; %> /** <%=jg.nullBlank(td.getDescription())%> * Updated by JCasGen <%=jg.getDate()%> @@ -64,17 +65,51 @@ public class <%=typeName%> extends <%=jg @Override public int getTypeIndexID() {return typeIndexID;} + <% + StringBuilder localData = new StringBuilder(); + StringBuilder featRegistry = new StringBuilder(); + + featRegistry.append(" /* Register Features */\n"); + + for (FeatureDescription fd : td.getFeatures()) { + + String featName = fd.getName(); + String featUName = jg.uc1(featName); // upper case first letter + if (Jg.reservedFeatureNames.contains(featUName)) { + jg.error.newError(IError.ERROR, + jg.getString("reservedNameUsed", new Object[] { featName, td.getName() }), + null); + } + + String featDesc = jg.nullBlank(fd.getDescription()); + String featDescCmt = featDesc; + + String rangeType = jg.getJavaRangeType(fd); + String elemType = jg.getJavaRangeArrayElementType(fd); + + localData.append(" private ").append(rangeType).append(" _F_").append(featName).append("; // ").append(featDescCmt).append('\n'); + featRegistry.append(" public final static int _FI_").append(featName).append(" = JCasRegistry.registerFeature(typeIndexID);\n"); + + } /* of Features iteration */ %> + + /* ***************** + * Local Data * + * *****************/ + +<%=featRegistry%> + +<%=localData%> /** Never called. Disable default constructor * @generated */ protected <%=typeName%>() {/* intentionally empty block */} /** Internal - constructor used by generator * @generated - * @param addr low level Feature Structure reference + * @param casImpl the CAS this Feature Structure belongs to * @param type the type of this Feature Structure */ - public <%=typeName%>(int addr, TOP_Type type) { - super(addr, type); + public <%=typeName%>(TypeImpl type, CASImpl casImpl) { + super(type, casImpl); readObject(); } @@ -85,20 +120,6 @@ public class <%=typeName%> extends <%=jg super(jcas); readObject(); } -<%if (jg.isSubTypeOfAnnotation(td)) { %> - - /** @generated - * @param jcas JCas to which this Feature Structure belongs - * @param begin offset to the begin spot in the SofA - * @param end offset to the end spot in the SofA - */ - public <%=typeName%>(JCas jcas, int begin, int end) { - super(jcas); - setBegin(begin); - setEnd(end); - readObject(); - } -<%} %> /** * <!-- begin-user-doc --> @@ -109,10 +130,8 @@ public class <%=typeName%> extends <%=jg */ private void readObject() {/*default - does nothing empty block */} -<% FeatureDescription [] fds = td.getFeatures(); - for (int i = 0; i < fds.length; i++) { - FeatureDescription fd = fds[i]; - +<% for (FeatureDescription fd : td.getFeatures()) { + String featName = fd.getName(); String featUName = jg.uc1(featName); // upper case first letter if (Jg.reservedFeatureNames.contains(featUName)) @@ -134,17 +153,22 @@ public class <%=typeName%> extends <%=jg * @generated * @return value of the feature */ - public <%=rangeType%> get<%=featUName%>() { - <%@ include file="../includedTemplates/FeatOkTesting.javajet"%> - return <%=jg.getFeatureValue(fd, td)%>;} + public <%=rangeType%> get<%=featUName%>() { return _F_<%=featName%>;} /** setter for <%=featName%> - sets <%=featDescCmt%> * @generated * @param v value to set into the feature */ public void set<%=featUName%>(<%=rangeType%> v) { - <%@ include file="../includedTemplates/FeatOkTesting.javajet"%> - <%=jg.setFeatureValue(fd, td)%>;} + <%if (jg.isStringSubtype(fd)) {%> + _typeImpl.getFeatureByBaseName("<%=featName%>").validateIsInAllowedValue(v); + <%}%> + <%if (jg.isPossibleIndexKey(fd)) {%> + _casView.setWithCheckAndJournalJFRI(this, _FI_<%=featName%>, () -> _F_<%=featName%> = v); + <%} else {%> + _casView.setWithJournalJFRI(this, _FI_<%=featName%>, () -> _F_<%=featName%> = v); + <%}%> + } <%if (jg.hasArrayRange(fd)) {%> /** indexed getter for <%=featName%> - gets an indexed value - <%=featDescCmt%> @@ -153,19 +177,15 @@ public class <%=typeName%> extends <%=jg * @return value of the element at index i */ public <%=elemType%> get<%=featUName%>(int i) { - <%@ include file="../includedTemplates/FeatOkTesting.javajet"%> - <%@ include file="../includedTemplates/ArrayBoundsChecking.javajet"%> - return <%=jg.getArrayFeatureValue(fd, td)%>;} + return get<%=featUName%>().get(i);} /** indexed setter for <%=featName%> - sets an indexed value - <%=featDescCmt%> * @generated * @param i index in the array to set * @param v value to set into the array */ - public void set<%=featUName%>(int i, <%=elemType%> v) { - <%@ include file="../includedTemplates/FeatOkTesting.javajet"%> - <%@ include file="../includedTemplates/ArrayBoundsChecking.javajet"%> - <%=jg.setArrayFeatureValue(fd, td)%>;} + public void set<%=featUName%>(int i, <%=elemType%> v) { + get<%=featUName%>().set(i, v);} <% } /* of hasArray */ %> <% } /* of Features iteration */ %> <% if (td.getName().equals("uima.cas.Annotation")) { %>