Bugfix for incremental model update: Packages are no longer discarded during model rebuilds if they contain a class file. There is a cache mapping class files to packages; if all packages were erased and rebuilt with a new identity, object shizophrenia had occured (new packages versus old packages still cached as containers of class files).
As a side-effect, there is now a new getKnownClassFiles() method in the
ClassFileRepository.
[*] recoder.io.ClassFileRepository
[*] recoder.io.DefaultClassFileRepository
[*] recoder.service.DefaultNameInfo
--- quite important changes ---
Added a reference-to-element cache to DefaultSourceInfo replacing a variable-to-type cache. This effectively increases memory consumption by about 6.5% (for a typical source code to byte code ratio) and does not improve performance a lot (it compensates the additional memory allocation and gains about 3%), but the cache is vital for the efficient incremental ripple effect change impact analysis to come.
[*] recoder.service.DefaultSourceInfo
Uwe Hoffmann contributed localization methods for the Java extension classes (.../lib/ext/*.jar).
Call ProjectSettings.ensureExtensionClassesAreInPath() to have the extension jars added to the input.path.
[*] recoder.io.ProjectSettings
[*] recoder.util.FileUtils
[*] doc/examples/RecoderProgram
Bugfix for partial member type name resolution following a contribution of UH. The following situation is now handled correctly:
public class A {
static class InnerA {
static class InnerInnerA {}
}
InnerA.InnerInnerA foo = new InnerA.InnerInnerA();
}
class B extends A {
InnerInnerA foo = new InnerA.InnerInnerA();
}
[*] recoder.service.DefaultSourceInfo
Bugfix while resolving references of the form "this.field": the "field" was assigned correctly by pure accident, but made into a VariableReference instead of a FieldReference, because the "this" scope was assigned to an outer type scope, not necessarily the type declaration itself.
[*] recoder.service.DefaultSourceInfo
A cast exception of an uncollated reference to package reference is now caught and passed as a resolution exception to the error handler.
[*] recoder.service.DefaultSourceInfo
--- negligible changes ---
Internal method became public: StatementKit.getCorrespondingLabel locates the target of a labeled break or continue.
[*] recoder.kit.StatementKit
[*] recoder.service.DefaultSourceInfo
SourceInfo.getExceptions(Method) and getSignature(Method) no longer report null lists, nor does Method.getExceptions() or .getSignature() for MethodDeclarations.
[*] recoder.service.DefaultSourceInfo
Format now accepts a single digit that controls indentation of position codes: "%4p" will produce outputs of the form " 43/ 17". This facilitates sorting a lot. Undefined positions will now be depicted by a single '?'.
[*] recoder.convenience.Format
Shifted cache reset call from DefaultCrossReferenceSourceInfo to DefaultSourceInfo, where it belonged to.
[*] recoder.service.DefaultSourceInfo
[*] recoder.service.DefaultCrossReferenceSourceInfo
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I checked in the following changes to the CVS.
More improvements are on the way.
Legend:
[+] added
[-] removed
[*] updated
[>] relocated
=== very important changes ===
Bugfix for incremental model update: Packages are no longer discarded during model rebuilds if they contain a class file. There is a cache mapping class files to packages; if all packages were erased and rebuilt with a new identity, object shizophrenia had occured (new packages versus old packages still cached as containers of class files).
As a side-effect, there is now a new getKnownClassFiles() method in the
ClassFileRepository.
[*] recoder.io.ClassFileRepository
[*] recoder.io.DefaultClassFileRepository
[*] recoder.service.DefaultNameInfo
--- quite important changes ---
Added a reference-to-element cache to DefaultSourceInfo replacing a variable-to-type cache. This effectively increases memory consumption by about 6.5% (for a typical source code to byte code ratio) and does not improve performance a lot (it compensates the additional memory allocation and gains about 3%), but the cache is vital for the efficient incremental ripple effect change impact analysis to come.
[*] recoder.service.DefaultSourceInfo
Uwe Hoffmann contributed localization methods for the Java extension classes (.../lib/ext/*.jar).
Call ProjectSettings.ensureExtensionClassesAreInPath() to have the extension jars added to the input.path.
[*] recoder.io.ProjectSettings
[*] recoder.util.FileUtils
[*] doc/examples/RecoderProgram
Bugfix for partial member type name resolution following a contribution of UH. The following situation is now handled correctly:
public class A {
static class InnerA {
static class InnerInnerA {}
}
InnerA.InnerInnerA foo = new InnerA.InnerInnerA();
}
class B extends A {
InnerInnerA foo = new InnerA.InnerInnerA();
}
[*] recoder.service.DefaultSourceInfo
Bugfix while resolving references of the form "this.field": the "field" was assigned correctly by pure accident, but made into a VariableReference instead of a FieldReference, because the "this" scope was assigned to an outer type scope, not necessarily the type declaration itself.
[*] recoder.service.DefaultSourceInfo
A cast exception of an uncollated reference to package reference is now caught and passed as a resolution exception to the error handler.
[*] recoder.service.DefaultSourceInfo
--- negligible changes ---
Internal method became public: StatementKit.getCorrespondingLabel locates the target of a labeled break or continue.
[*] recoder.kit.StatementKit
[*] recoder.service.DefaultSourceInfo
SourceInfo.getExceptions(Method) and getSignature(Method) no longer report null lists, nor does Method.getExceptions() or .getSignature() for MethodDeclarations.
[*] recoder.service.DefaultSourceInfo
Format now accepts a single digit that controls indentation of position codes: "%4p" will produce outputs of the form " 43/ 17". This facilitates sorting a lot. Undefined positions will now be depicted by a single '?'.
[*] recoder.convenience.Format
Shifted cache reset call from DefaultCrossReferenceSourceInfo to DefaultSourceInfo, where it belonged to.
[*] recoder.service.DefaultSourceInfo
[*] recoder.service.DefaultCrossReferenceSourceInfo