svn commit: r153687 - jakarta/bcel/trunk/src/java/org/apache/bcel/util/BCELifier.java

[email protected]
Newsgroups gmane.comp.jakarta.bcel.devel
Message-ID <[email protected]>
Author: dbrosius
Date: Sun Feb 13 16:55:57 2005
New Revision: 153687

URL: http://svn.apache.org/viewcvs?view=rev&rev=153687
Log:
Update BCELifier to handle the new method access flags (ACC_BRIDGE, ACC_VARARGS)

Modified:
    jakarta/bcel/trunk/src/java/org/apache/bcel/util/BCELifier.java

Modified: jakarta/bcel/trunk/src/java/org/apache/bcel/util/BCELifier.java
URL: http://svn.apache.org/viewcvs/jakarta/bcel/trunk/src/java/org/apache/bcel/util/BCELifier.java?view=diff&r1=153686&r2=153687
==============================================================================
--- jakarta/bcel/trunk/src/java/org/apache/bcel/util/BCELifier.java (original)
+++ jakarta/bcel/trunk/src/java/org/apache/bcel/util/BCELifier.java Sun Feb 13 16:55:57 2005
@@ -33,6 +33,10 @@
  * @author <A HREF="mailto:[email protected]">M. Dahm</A> 
  */
 public class BCELifier extends org.apache.bcel.classfile.EmptyVisitor {
+  private static final int FLAG_FOR_UNKNOWN = -1;
+  private static final int FLAG_FOR_CLASS = 0;
+  private static final int FLAG_FOR_METHOD = 1;
+  
   private JavaClass         _clazz;
   private PrintWriter       _out;
   private ConstantPoolGen   _cp;
@@ -83,7 +87,7 @@
 		  package_name + "." + class_name) +
 		 "\", \"" + super_name + "\", " +
 		 "\"" + clazz.getSourceFileName() + "\", " +
-		 printFlags(clazz.getAccessFlags(), true) + ", " +
+		 printFlags(clazz.getAccessFlags(), FLAG_FOR_CLASS) + ", " +
 		 "new String[] { " + inter + " });");
     _out.println();
     
@@ -177,7 +181,7 @@
 
     _out.println("    InstructionList il = new InstructionList();");
     _out.println("    MethodGen method = new MethodGen(" +
-		 printFlags(method.getAccessFlags()) +
+		 printFlags(method.getAccessFlags(), FLAG_FOR_METHOD) +
 		 ", " + printType(result_type) +
 		 ", " + printArgumentTypes(arg_types) + ", " +
 		 "new String[] { " +
@@ -196,20 +200,24 @@
   }
 
   static String printFlags(int flags) {
-    return printFlags(flags, false);
+    return printFlags(flags, FLAG_FOR_UNKNOWN);
   }
 
-  static String printFlags(int flags, boolean for_class) {
+  static String printFlags(int flags, int reason) {
     if(flags == 0)
       return "0";
 
     StringBuffer buf = new StringBuffer();
     for(int i=0, pow=1; i <= Constants.MAX_ACC_FLAG; i++) {
       if((flags & pow) != 0) {
-	if((pow == Constants.ACC_SYNCHRONIZED) && for_class)
-	  buf.append("ACC_SUPER | ");
-	else
-	  buf.append("ACC_" + Constants.ACCESS_NAMES[i].toUpperCase() + " | ");
+	    if((pow == Constants.ACC_SYNCHRONIZED) && (reason == FLAG_FOR_CLASS))
+	      buf.append("ACC_SUPER | ");
+	    else if ((pow == Constants.ACC_VOLATILE) && (reason == FLAG_FOR_METHOD))
+		  buf.append("ACC_BRIDGE | ");
+	    else if ((pow == Constants.ACC_TRANSIENT) && (reason == FLAG_FOR_METHOD))
+	      buf.append("ACC_VARARGS | ");
+	    else
+	      buf.append("ACC_" + Constants.ACCESS_NAMES[i].toUpperCase() + " | ");
       }
 
       pow <<= 1;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.