The recent architectural change makes it possible for the static compiler to use dynamic binding when it encounters a missing type. This in turn makes the dynamic binding support more important, so I've been fixing a lot of bugs in this area.
Currently, ikvmc will still emit code that statically throws a NoClassDefFoundError when accessing missing types, but in the future the default will change to generate dynamic binding code in this case.
Changes:
- Fixed a bug with Graphics.setComposite(x). This fixes most paint artefacts of Nimbus L&F.
- Fixed a NPE in constructor of BufferedImage.
- Fixed TexturePaint bugs.
- Enable ldc to work for unloadable types in dynamic mode.
- Changed dynamic bytecode helper methods to be CallerID based instead of trusting the caller to provide the right context type handle.
- Use sun.launcher.LauncherHelper to make the launcher more consistent with Java.
- Implemented package access checks in dynamic mode.
- Fixed reflection handling of unloadable types.
- Added CodeGenOptions.DisableDynamicBinding to disable dynamic binding, instead of conditional compilation.
- Bug fix. Dynamic method invocations should unwrap InvocationTargetException.
- Bug fix. Dynamic instantiation should throw InstantiationError when trying to instantiate an abstract class.
- Bug fix. Dynamic invokespecial (that isn't a new) should fail verification.
- Bug fix. Dynamic method lookup should also look in base classes (for non-constructor methods).
- Bug fix. When dynamically calling a non-constructor instance method, the receiver object should be of the correct type.
- Added support for setPaint with custom Paint implementation.
- Added support for dynamic (non-loadable type) annotations in statically compiled code.
- Have ikvmc record inner classes even if they can't be loaded.
- Have ikvmc record the outer class even if it is not loadable.
- Bug fix. If the runtime tries to load a class from an assembly with a custom assembly class loader, the custom assembly class loader should be called. Previously it would only be called if the Java class loader had been instantiated.
- Bug fix. We should emit miranda methods for non-abstract classes too.
- Bug fix. Mark "missing" interface methods so that subclasses (that are compiled separately) know that the base class is incomplete.
- Allow dynamic assemblies injected into assembly class loaders to be (debug dump) saved.
- Changed the build system to automatically scan all sources files for copyright statements and validate that all GPL licensed files include the Classpath exception.
- Removed resource compiler dependency from JVM.DLL build.
- Bug fix. Custom assembly class loader was made visible to other threads while it was still being constructed.
- Stop considering ACC_SUPER when linking invokespecial (unless compatibility switch is set). This change matches the security change in Java 7u13.
- Improved ldc MethodType: Use nested type with class constructor to create values with statically know signatures (like ldc MethodHandle).
- Improved ldc MethodType: Use caching for dynamicallly constructed MethodType values but retry on failure.
- Fixed dynamic dispatch class loading exception handling to wrap non-java.lang.Error exceptions in NoClassDefFoundError.
- Added support for dynamic ldc MethodHandle.
- Added support for dynamically linking the boostrap method of an invokedynamic.
- IKVM.Reflection: Expose the Name and __ModuleHash for missing external Modules.
- IKVM.Reflection: Regression fix. The AssemblyNames returned by Module.__GetReferencedAssemblies() didn't have the ContentType set for windowruntime assembly references.
- IKVM.Reflection: Added new public API Module.__ResolveTypeSpecCustomModifiers() to resolve the (useless) custom modifiers that can be put on TypeSpecs.
- IKVM.Reflection: Added another overload of the public API Module.__GetSectionInfo() that returns more information about the section.
- IKVM.Reflection: Bug fix. The OriginalFilename in the version info resource should only include the filename, not the path.
Binaries available here: ikvmbin-7.3.4790.zip