View | Details | Raw Unified | Return to bug 41536
Collapse All | Expand All

(-)src/org/aspectj/weaver/bcel/LazyMethodGen.java (-11 / +34 lines)
Lines 17-22 Link Here
17
import java.io.PrintStream;
17
import java.io.PrintStream;
18
import java.lang.reflect.Modifier;
18
import java.lang.reflect.Modifier;
19
import java.util.ArrayList;
19
import java.util.ArrayList;
20
import java.util.Collections;
21
import java.util.Comparator;
20
import java.util.HashMap;
22
import java.util.HashMap;
21
import java.util.HashSet;
23
import java.util.HashSet;
22
import java.util.Iterator;
24
import java.util.Iterator;
Lines 254-263 Link Here
254
                        LocalVariableGen lng = (LocalVariableGen) targeter;
256
                        LocalVariableGen lng = (LocalVariableGen) targeter;
255
                        LocalVariableTag lr = new LocalVariableTag(BcelWorld.fromBcel(lng.getType()), lng.getName(), lng.getIndex());
257
                        LocalVariableTag lr = new LocalVariableTag(BcelWorld.fromBcel(lng.getType()), lng.getName(), lng.getIndex());
256
                        if (lng.getStart() == ih) {
258
                        if (lng.getStart() == ih) {
257
                            lng.setStart(null);
258
                            locals.add(lr);
259
                            locals.add(lr);
259
                        } else {
260
                        } else {
260
                            lng.setEnd(null);
261
                            ends.add(lr);
261
                            ends.add(lr);
262
                        }
262
                        }
263
                    }
263
                    }
Lines 833-847 Link Here
833
                            }
833
                            }
834
                        } else if (targeter instanceof LocalVariableTag) {
834
                        } else if (targeter instanceof LocalVariableTag) {
835
                            LocalVariableTag lvt = (LocalVariableTag) targeter;
835
                            LocalVariableTag lvt = (LocalVariableTag) targeter;
836
                            if (i instanceof LocalVariableInstruction) {
836
 	                        if (localVariableStarts.get(lvt) == null) {
837
                                int index = ((LocalVariableInstruction)i).getIndex();
837
                                localVariableStarts.put(lvt, jh);
838
                                if (lvt.getSlot() == index) {
839
                                    if (localVariableStarts.get(lvt) == null) {
840
                                        localVariableStarts.put(lvt, jh);
841
                                    }
842
                                    localVariableEnds.put(lvt, jh);
843
                                }
844
                            }
838
                            }
839
                            localVariableEnds.put(lvt, jh);
845
                        }
840
                        }
846
                    }
841
                    }
847
                }
842
                }
Lines 871-877 Link Here
871
        
866
        
872
        Map duplicatedLocalMap = new HashMap();
867
        Map duplicatedLocalMap = new HashMap();
873
        
868
        
874
        for (Iterator iter = localVariableStarts.keySet().iterator(); iter.hasNext(); ) {
869
        // Reverse sort these keys
870
		List keys = new ArrayList(); 
871
872
		keys.addAll(localVariableStarts.keySet());
873
//		System.err.println("Keys for local variable tags"); 
874
//		for (int i = 0;i <keys.size();i++) {
875
//			System.err.println("Before sort: #"+i+"="+keys.get(i));
876
//		}
877
		Collections.sort(keys,new Comparator() { 
878
		  public int compare(Object a,Object b) { 
879
			 LocalVariableTag taga = (LocalVariableTag)a; 
880
		 	 LocalVariableTag tagb = (LocalVariableTag)b;
881
		 	 if (taga.getName().startsWith("arg")) {
882
		 	 	if (tagb.getName().startsWith("arg")) {
883
				  return -taga.getName().compareTo(tagb.getName());
884
		 	 	} else {
885
		 	 	  return 1; // Whatever tagb is, it must come out before 'arg'
886
		 	 	}
887
		 	 } else if (tagb.getName().startsWith("arg")) {
888
		 	 	return -1; // Whatever taga is, it must come out before 'arg'
889
		 	 } else {
890
			   return -taga.getName().compareTo(tagb.getName());
891
		 	 } 
892
		}}); 
893
//		for (int i = 0;i <keys.size();i++) {
894
//			System.err.println("After  sort: #"+i+"="+keys.get(i));
895
//		}
896
        
897
        for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
875
            LocalVariableTag tag = (LocalVariableTag) iter.next();
898
            LocalVariableTag tag = (LocalVariableTag) iter.next();
876
        	// have we already added one with the same slot number and start location?  
899
        	// have we already added one with the same slot number and start location?  
877
        	// if so, just continue.
900
        	// if so, just continue.

Return to bug 41536