[
https://issues.apache.org/jira/browse/UIMA-2147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13120477#comment-13120477
]
Richard Eckart de Castilho commented on UIMA-2147:
--------------------------------------------------
Lets see what I can make up and/or pick up from our source codes
1) I imagine to write test cases for components that do internally not use the
JCas API, but that are configurable with respect to the type system. In the
test case, however, I use some types that I commonly use and for these I have
JCas wrappers.
2) I imagine to have the "comfort" of JCas wrappers, but do not want to
actually use JCas (avoiding to initialize the JCas subsystem). For some
UIMA-buildin types, there are constants like these, which would be nice to have
for custom JCas wrappers as well.
{noformat}
annotationType = aJCas.getTypeSystem().getType(CAS.TYPE_NAME_ANNOTATION);
beginFeature = annotationType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_BEGIN);
endFeature = annotationType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_END);
{noformat}
3) We have some cases were we use CAS.createAnnotation to create an annotation
of a particular type (e.g. Verb, Noun, etc.) in a CAS-based component. We know,
that the type will be a sub-type of a certain type (PartOfSpeechTag) and will
have a certain feature (posValue). So we have this code:
{noformat}
AnnotationFS posAnno = aCAS.createAnnotation(posType, offset, offset + len);
posAnno.setStringValue(posType.getFeatureByBaseName("PosValue"), pos);
{noformat}
If somebody changed the type system, we could not get a compiler warning that
"PosValue" is no longer available. If we used a constant from a JCas wrapper
which is generated from the type system, we would notice that however. Ok, we
have test-cases, but I still like static compiler checks more.
4) Consider StatusCallbackListenerImpl:165 - here String literals are used
which do not allow for static compile-time checks.
{noformat}
Type t = aCas.getTypeSystem().getType("uima.cpm.FileLocation");
Feature f = t.getFeatureByBaseName("DocumentSize");
{noformat}
5) The constants could allow to conveniently search for usages of a
feature/type in situations where a the CAS API is used.
So it boils down to compile-time checks and maintainability.
> Generate static fields for type names and feature names in JCas wrappers
> ------------------------------------------------------------------------
>
> Key: UIMA-2147
> URL: https://issues.apache.org/jira/browse/UIMA-2147
> Project: UIMA
> Issue Type: Improvement
> Components: Core Java Framework
> Affects Versions: 2.3.1
> Reporter: Richard Eckart de Castilho
>
> It would be convient if the JCas wrapper generator would create static final
> String fields for feature names and for the type name, e.g.
> public static final String TYPE_NAME = "my.jcastypes.Type";
> public static final String FEAT_BEGIN = "begin";
> This would allow cleaner programming with JCas wrappers in cases where the
> names are required. In particular it would allow to detect certain errors at
> compile-time and facilitate refactoring.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira