Expose Hibernate version via non-compile-time constant expression
-----------------------------------------------------------------
Key: HHH-3978
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-3978
Project: Hibernate Core
Issue Type: Improvement
Components: core
Reporter: Steve Ebersole
Assignee: Steve Ebersole
Fix For: 3.2.x, 3.3.x, 3.5
Currently we expose the Hibernate version via a public static final field
(org.hibernate.cfg.Envrionment#VERSION). It is defined using what JLS terms a
compile-time constant expression. The issue with this approach is that compilers are free
to inline the value of this field when it is encountered. For example, say a Hibernate
user is attempting to do something like:
if ( Environment.VERSION.equals( "3.3.0.ga" ) {
// do something 3.3.0-specific...
}
The issue is that the compiler is free to inline the "Environment.VERSION"
reference with its compile-time constant expression value. So if the user compiles this
code against Hibernate 3.3.0.ga initially, it does not matter at all what version is
present at runtime. The compiler will inline (re: replace) Environment.VERSION with
"3.3.0.ga" and that if check will always resolve to true!
http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#13.4.9
The same "feature" is not extended to methods. We should make the version
accessible only from static method (and we should avoid making it final as it appears some
compiler may even inline static final method calls).
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira