--- a/corba/src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/UnionGen.java Thu May 02 13:34:46 2013 -0700
+++ b/corba/src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/UnionGen.java Mon May 06 11:41:36 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -258,6 +258,19 @@
{
Vector labels = vectorizeLabels (u.branches (), true);
+ if (Util.javaName(utype).equals ("boolean")) {
+ stream.println( "" ) ;
+ stream.println( " private void verifyDefault (boolean discriminator)" ) ;
+ stream.println( " {" ) ;
+ if (labels.contains ("true"))
+ stream.println (" if ( discriminator )");
+ else
+ stream.println (" if ( !discriminator )");
+ stream.println( " throw new org.omg.CORBA.BAD_OPERATION();" ) ;
+ stream.println( " }" ) ;
+ return;
+ }
+
stream.println( "" ) ;
stream.println( " private void verifyDefault( " + Util.javaName(utype) +
" value )" ) ;
@@ -763,7 +776,7 @@
stream.println (indent + "if (" + disName + ')');
if (firstBranch == null)
- stream.println (indent + " throw new org.omg.CORBA.BAD_OPERATION ();");
+ stream.println (indent + " value._default(" + disName + ");");
else {
stream.println (indent + '{');
index = readBranch (index, indent + " ", firstBranch.typedef.name (),
@@ -774,7 +787,7 @@
stream.println (indent + "else");
if (secondBranch == null)
- stream.println (indent + " throw new org.omg.CORBA.BAD_OPERATION ();");
+ stream.println (indent + " value._default(" + disName + ");");
else {
stream.println (indent + '{');
index = readBranch (index, indent + " ", secondBranch.typedef.name (),
@@ -924,23 +937,25 @@
firstBranch = secondBranch;
secondBranch = tmp;
}
- stream.println (indent + "if (" + disName + ')');
- if (firstBranch == null)
- stream.println (indent + " throw new org.omg.CORBA.BAD_OPERATION ();");
- else
- {
- stream.println (indent + '{');
- index = writeBranch (index, indent + " ", name, firstBranch.typedef, stream);
- stream.println (indent + '}');
- }
- stream.println (indent + "else");
- if (secondBranch == null)
- stream.println (indent + " throw new org.omg.CORBA.BAD_OPERATION ();");
- else
- {
- stream.println (indent + '{');
- index = writeBranch (index, indent + " ", name, secondBranch.typedef, stream);
- stream.println (indent + '}');
+ if (firstBranch != null && secondBranch != null) {
+ stream.println (indent + "if (" + disName + ')');
+ stream.println (indent + '{');
+ index = writeBranch (index, indent + " ", name, firstBranch.typedef, stream);
+ stream.println (indent + '}');
+ stream.println (indent + "else");
+ stream.println (indent + '{');
+ index = writeBranch (index, indent + " ", name, secondBranch.typedef, stream);
+ stream.println (indent + '}');
+ } else if (firstBranch != null) {
+ stream.println (indent + "if (" + disName + ')');
+ stream.println (indent + '{');
+ index = writeBranch (index, indent + " ", name, firstBranch.typedef, stream);
+ stream.println (indent + '}');
+ } else {
+ stream.println (indent + "if (!" + disName + ')');
+ stream.println (indent + '{');
+ index = writeBranch (index, indent + " ", name, secondBranch.typedef, stream);
+ stream.println (indent + '}');
}
}
return index;