A fork of the com.sun.codemodel 2.7-SNAPSHOT.
The classes in this project use a different package name com.helger.jcodemodel
to avoid conflicts
with other com.sun.codemodel
instances that might be floating around in the classpath.
That of course implies, that this artefact cannot directly be used with JAXB, since the configuration of
this would be very tricky.
A site with the links to the API docs etc. is available.
Add the following to your pom.xml to use this artifact:
<dependency>
<groupId>com.helger</groupId>
<artifactId>jcodemodel</artifactId>
<version>3.4.0</version>
</dependency>
v4.0.0 - work in progress
- Requires Java 17 as the minimum version
- Using
ph-commons
as a compile dependency for common stuff - Moved all exceptions to
exceptions
package - Included [PR #96]](#96) from @glelouet on copying the whole JCodeModel
v3.4.1 - 2022-01-20
- Extended
JDefinedClass
to make enum constants accessible
v3.4.0 - 2020-05-25
- Added special top-level construct
JResourceDir
to represent pure resource directories (issue #74 from @guiguilechat) - Added new class
JCodeModelException
as the base class forJClassAlreadyExistsException
and the new classJResourceAlreadyExistsException
- Existing APIs were changed to throw
JCodeModelException
instead ofJClassAlreadyExistsException
JCNameUtilities.getFullName
works with classes in the default package- Extended
JCodeModel
with(get|set)FileSystemConvention
to make the creation more flexible (also issue #74 from @guiguilechat) - Added mutable overloads to methods that only return an unmodifiable collection (issue #86)
- Fixed an issue with generating generics from anonymous classes (issue #84)
v3.3.0 - 2019-11-24
- Added check for package names so that no invalid package names can be created (issue #70 from @guiguilechat)
- Added check to avoid creating classes existing in the "java.lang" package (issue #71 from @guiguilechat)
JLambdaMethodRef
now works with arbitrary expressions as the left hand side
v3.2.4 - 2019-07-15
- Made class
JavaUnicodeEscapeWriter
publicly accessible - Extended enum constant ref API (issue #68 from @guiguilechat)
v3.2.3 - 2019-03-31
- Extended
JTryBlock
API to have more control. - Added support for
try-with-resources
support (issue #67 from @gmcfall)
v3.2.2 - 2019-02-25
- Using
jsr305
instead ofannotations
in POM (issue #66 from @jjYBdx4IL)
v3.2.1 - 2019-01-23
- Added
var
as reserved word - Made
JReturn
constructor public - Added
JInvocation._this
static method - Added
IJExpression.castTo
method - Added support to create
final
variables infor each
loops JExpr.dotClass
now takesAbstractJType
and not justAbstractJClass
- Made constructors of subclasses of
IJStatement
public - No line breaks for annotations to parameters
- Put each method parameter on a separate line if more than 3 parameters are present
v3.2.0 - 2018-10-20
- Introduced class
JCMWriter
that should be used to emit the outgoing Java files. This replacescodemodel.build
and offers a more consistent API. Most existing method remain existing and deprecated and just forward toJCMWriter
.- Instead of
cm.build (...)
usenew JCMWriter (cm).build (...)
- Instead of
- Extracted
IJFormatter
interface for better separation of concerns.JFormatter
was moved to a sub-package ProgressCodeWriter
no longer needs an explicitPrintStream
but aProgressCodeWriter.IProgressTracker
instead.- Default charset for Java classes is now
UTF-8
. - Added new
JAnnotationUse
method overloads that automatically passvalue
as the annotation parameter name (issue #64)
v3.1.0 - 2018-08-22
- Added
AbstractJType._new()
- Change return types of special
JBlock
methods tovoid
to avoid chaining (issue #62) - incompatible change! - Added new
JExpr.invokeThis
andJExpr.invokeSuper
static methods
v3.0.3 - 2018-06-12
- Improved API access to inner classes (issue #60)
- Changed order of emitted modifiers (
final static
->static final
) - Flush needed when writing resources fixed (issue #61 from @fbaro)
v3.0.2 - 2018-04-11
- Fixed method resolution using direct class references (issue #58)
- Added some additional
JInvocation.arg...
sanity methods - Enum constant argument list is now accessible
v3.0.1 - 2017-10-25
- Added explicit support for invoking
super
- thx to @heruan for pointing this out - Added possibility to create a lambda reference from an invocation (issue #56 and PR #57 from @heruan)
v3.0.0 - 2017-08-06
- Requires Java 8
- Reworked #41 so that it is finally working in all cases
- Add option for classes to not be imported (issue #51)
- Fixed extra semicolon on Lambdas (issue #53)
v2.8.6 2016-07-19
- added PR (issue #49)
v2.8.5 - 2016-05-13
- improved comment handling (issue #47)
- improved API checks (issue #45)
- extended API (issue #46)
v2.8.4 - 2016-04-25
- Enum values in switch statements are no longer fully qualified (issue #41)
- fixed generation of narrowed classes without parameters (as in
HashMap<>
) - added support for
strictfp
keyword.
v2.8.3 - 2016-02-26
- Added support for single line comments in blocks
- improved generation of Lambdas
v2.8.2 - 2016-01-19
- Customizable new line string and character set
- extensions by @sviperll
v2.8.1 - 2015-12-03
- Extensions by @sviperll
v2.8.0 - 2015-10-12
- Requires Java 1.6
- fixed potential double imports
- added virtual blocks
- integrated sviperll's metachicory
v2.7.11 - 2015-09-24
- Bugfix release
- removed half done CSE implementation (issue #18)
- improved handling of directClasses
- added enumConstantReference
v2.7.10 - 2015-06-30
- Synchronized block added
- initial support for lambda expressions
v2.7.9 - 2015-03-19
- Minor extensions for error types
v2.7.8 - 2015-02-05
- Enum constants for annotation parameters
v2.7.7 - 2014-09-17
- mainly API extensions
v2.7.6 - 2014-09-02
- Extended annotation parameter handling API
v2.7.5 - 2014-08-14
- Support for multiple boundaries added (like
T extends AnyClass & Serializable
)
v2.7.4 - 2014-06-12
- Bugfix release
v2.7.3 - 2014-05-23
- Bugfix release
v2.7.2 - 2014-05-21
- now on Maven Central
v2.7.1 - 2014-05-19
- now as OSGi bundle
v2.7.0 - 2014-05-16
- API extensions
v2.6.4 - 2014-04-10
2013-09-23
- Changes from https://github.com/UnquietCode/JCodeModel have been incorporated.
Pull requests must follow my personal Coding Styleguide
This project uses double-space for indentation. If you want to use tabs, you can ask git to modify the files when commiting them and when pulling them. A specific script makes that chnage, run it from the root project.
What this script does :
- create the file .git/info/attributes with
*.java filter=tabspace
. This will tell git to apply the script tabspace on the *.java files - run
git config filter.tabspace.clean 'expand --tabs=2 --initial'
to ask git to replace tabs with two spaces on commit of *.java files. - run
git config filter.tabspace.smudge 'unexpand --tabs=2 --first-only'
to request git to replace double spaces with two tabs on checking a *.java file out.
For eclipse, a formatter xml and a cleanup xml are present in the meta/formatter/eclipse/ directory. You can load them from the "project properties > java code style" settings. Check "Enable project specific settings", then load them.
NOTE : you also need to change the save actions to make them meet the clean up actions. Save actions are done even when they are not present in the clean up.
On Twitter: @philiphelger | Kindly supported by YourKit Java Profiler