src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.java
changeset 47359 e1a6c0168741
parent 47216 71c04702a3d5
child 48409 5ab69533994b
equal deleted inserted replaced
47358:d07d5f7cab35 47359:e1a6c0168741
     1 /*
     1 /*
     2  * reserved comment block
     2  * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT REMOVE OR ALTER!
     3  * @LastModified: Oct 2017
     4  */
     4  */
     5 /*
     5 /*
     6  * Licensed to the Apache Software Foundation (ASF) under one or more
     6  * Licensed to the Apache Software Foundation (ASF) under one or more
     7  * contributor license agreements.  See the NOTICE file distributed with
     7  * contributor license agreements.  See the NOTICE file distributed with
     8  * this work for additional information regarding copyright ownership.
     8  * this work for additional information regarding copyright ownership.
    19  * limitations under the License.
    19  * limitations under the License.
    20  */
    20  */
    21 
    21 
    22 package com.sun.org.apache.xalan.internal.xsltc.compiler;
    22 package com.sun.org.apache.xalan.internal.xsltc.compiler;
    23 
    23 
    24 import java.util.Iterator;
       
    25 import java.util.Vector;
       
    26 
       
    27 import com.sun.org.apache.bcel.internal.generic.BranchHandle;
    24 import com.sun.org.apache.bcel.internal.generic.BranchHandle;
    28 import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
    25 import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
    29 import com.sun.org.apache.bcel.internal.generic.InstructionList;
    26 import com.sun.org.apache.bcel.internal.generic.InstructionList;
       
    27 import java.util.ArrayList;
       
    28 import java.util.Iterator;
       
    29 import java.util.List;
    30 
    30 
    31 /**
    31 /**
    32  * @author Jacek Ambroziak
    32  * @author Jacek Ambroziak
    33  * @author Santiago Pericas-Geertsen
    33  * @author Santiago Pericas-Geertsen
    34  */
    34  */
    35 public final class FlowList {
    35 public final class FlowList {
    36     private Vector _elements;
    36     private List<InstructionHandle> _elements;
    37 
    37 
    38     public FlowList() {
    38     public FlowList() {
    39         _elements = null;
    39         _elements = null;
    40     }
    40     }
    41 
    41 
    42     public FlowList(InstructionHandle bh) {
    42     public FlowList(InstructionHandle bh) {
    43         _elements = new Vector();
    43         _elements = new ArrayList<>();
    44         _elements.addElement(bh);
    44         _elements.add(bh);
    45     }
    45     }
    46 
    46 
    47     public FlowList(FlowList list) {
    47     public FlowList(FlowList list) {
    48         _elements = list._elements;
    48         _elements = list._elements;
    49     }
    49     }
    50 
    50 
    51     public FlowList add(InstructionHandle bh) {
    51     public FlowList add(InstructionHandle bh) {
    52         if (_elements == null) {
    52         if (_elements == null) {
    53             _elements = new Vector();
    53             _elements = new ArrayList<>();
    54         }
    54         }
    55         _elements.addElement(bh);
    55         _elements.add(bh);
    56         return this;
    56         return this;
    57     }
    57     }
    58 
    58 
    59     public FlowList append(FlowList right) {
    59     public FlowList append(FlowList right) {
    60         if (_elements == null) {
    60         if (_elements == null) {
    61             _elements = right._elements;
    61             _elements = right._elements;
    62         }
    62         }
    63         else {
    63         else {
    64             final Vector temp = right._elements;
    64             final List<InstructionHandle> temp = right._elements;
    65             if (temp != null) {
    65             if (temp != null) {
    66                 final int n = temp.size();
    66                 final int n = temp.size();
    67                 for (int i = 0; i < n; i++) {
    67                 for (int i = 0; i < n; i++) {
    68                     _elements.addElement(temp.elementAt(i));
    68                     _elements.add(temp.get(i));
    69                 }
    69                 }
    70             }
    70             }
    71         }
    71         }
    72         return this;
    72         return this;
    73     }
    73     }
    77      */
    77      */
    78     public void backPatch(InstructionHandle target) {
    78     public void backPatch(InstructionHandle target) {
    79         if (_elements != null) {
    79         if (_elements != null) {
    80             final int n = _elements.size();
    80             final int n = _elements.size();
    81             for (int i = 0; i < n; i++) {
    81             for (int i = 0; i < n; i++) {
    82                 BranchHandle bh = (BranchHandle)_elements.elementAt(i);
    82                 BranchHandle bh = (BranchHandle)_elements.get(i);
    83                 bh.setTarget(target);
    83                 bh.setTarget(target);
    84             }
    84             }
    85             _elements.clear();          // avoid backpatching more than once
    85             _elements.clear();          // avoid backpatching more than once
    86         }
    86         }
    87     }
    87     }
    97         if (_elements == null) {
    97         if (_elements == null) {
    98             return result;
    98             return result;
    99         }
    99         }
   100 
   100 
   101         final int n = _elements.size();
   101         final int n = _elements.size();
   102         final Iterator oldIter = oldList.iterator();
   102         final Iterator<InstructionHandle> oldIter = oldList.iterator();
   103         final Iterator newIter = newList.iterator();
   103         final Iterator<InstructionHandle> newIter = newList.iterator();
   104 
   104 
   105         while (oldIter.hasNext()) {
   105         while (oldIter.hasNext()) {
   106             final InstructionHandle oldIh = (InstructionHandle) oldIter.next();
   106             final InstructionHandle oldIh = oldIter.next();
   107             final InstructionHandle newIh = (InstructionHandle) newIter.next();
   107             final InstructionHandle newIh = newIter.next();
   108 
   108 
   109             for (int i = 0; i < n; i++) {
   109             for (int i = 0; i < n; i++) {
   110                 if (_elements.elementAt(i) == oldIh) {
   110                 if (_elements.get(i) == oldIh) {
   111                     result.add(newIh);
   111                     result.add(newIh);
   112                 }
   112                 }
   113             }
   113             }
   114         }
   114         }
   115         return result;
   115         return result;