# Thursday, 27 May 2004
« Generics Again | Main | Compatibility List »
Painful Changes

I renamed the assemblies and also took the opportunity to change the directory structure and Visual Studio project names accordingly. This is quite a painful process and also loses the cvs history for all the moved files (at least, I couldn't find any way of moving files in cvs, other than add/remove).

Hopefully this will be the only time I have to make these changes. Breaking all build scripts and what have you, isn't fun.

Note: To build this version, you require either Jikes 1.19 or 1.21.

Here's what's new:

  • Changed all assembly versions to 0.7.* (except for the IKVM.GNU.Classpath assembly, that now has version 0.9, to indicate the GNU Classpath version)
  • Removed the StackTraceInfo attribute (wasn't supported by the stack trace code anymore).
  • Made ExceptionHelper (in ExceptionHelper.cs) private.
  • Changed ThrowsAttribute to take a string array instead of a single string (to support reporting the throws clause in declaration order).
  • Changed ImplementsAttribute to take a string array instead of a single Type (to support reporting the implemented interfaces in declaration order).
  • Made handling of InnerClasses attribute more robust (this applies to ikvmc only, the dynamic runtime ignores this attribute).
  • Made the op_Implicit method that is added to classes that implement ghost interfaces hidden from reflection.
  • Added MethodAttributes.CheckAccessOnOverride to virtual method definitions, to prevent package private methods from being overridden in another assembly.
  • Fixed reflection on sealed .NET types to also add public method for private interface implementations.
  • Added a version string to the JavaModuleAttribute, to record the IKVM runtime version that was used to generate the module.
  • Removed unused NativeCode.java.io.File class.
  • Removed unused NativeCode.java.nio.channels.FileChannelImpl class.
  • Fixed a bug in the exception untangling code and cleaned the code up a bit.
  • Fixed FileChannelImpl to catch System.NotSupportedException and rethrow a FileNotFoundException.
  • Added explicit call to Environment.Exit to ikvmc to workaround background threads starting up due to static initializers running (due to .NET Framework reflection bug).
  • Fixed ikvmc regression that caused ArgumentException when compiling a bunch of classes with a wildcard expression.
  • Added dummy ftp protocol handler to work around Classpath bug (when it sees a file: url with a host, it treats it as an ftp url, but since the ftp protocol doesn't exist, the code gets stuck in an infinite loop).

New snapshots: just the binaries and source plus binaries.

Thursday, 27 May 2004 15:27:23 (W. Europe Daylight Time, UTC+02:00)  #    Comments [2] Tracked by:
"dangers of diet pills" (dangers of diet pills) [Trackback]
"Play Poker Online" (Play Poker Online) [Trackback]

Thursday, 27 May 2004 19:14:11 (W. Europe Daylight Time, UTC+02:00)
Ooh, every time I read your blog I learn something new. I'm inferring from your changes to support things in declaration order that the return from GetCustomAttributes() is completely unordered and I can't make any assumptions from it.

In practice I seemed to be able to assume that (at least on Mono) it would be in reverse declaration order, and NRobot currently relies on that assumption. I guess I need to change that API :)

Thanks for the wildcard fix, I'll try it later :) I sympathize on the pain of breaking build scripts, having just gone through a similar thing (although I was lucky and was able to delegate the heavy lifting to someone else, and just pop up every now and then to say 'hey, this corner case has to work too, you know' ;) )

Stuart.
Stuart
Friday, 28 May 2004 08:23:23 (W. Europe Daylight Time, UTC+02:00)
>>Ooh, every time I read your blog I learn something new. I'm inferring from your changes to support things in declaration order that the return from GetCustomAttributes() is completely unordered and I can't make any assumptions from it. <<

I don't know for sure, but since I couldn't find any documentation that claimed that the ordering was defined, I had to assume it wasn't.
Name
E-mail
Home page

I apologize for the lameness of this, but the comment spam was driving me nuts. In order to be able to post a comment, you need to answer a simple question. Hopefully this question is easy enough not to annoy serious commenters, but hard enough to keep the spammers away.

Anti-Spam Question: What method on java.lang.System returns an object's original hashcode (i.e. the one that would be returned by java.lang.Object.hashCode() if it wasn't overridden)? (case is significant)

Answer:  
Comment (HTML not allowed)  

Live Comment Preview