You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2013/03/12 14:01:07 UTC

svn commit: r1455518 - /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/

Author: kahatlen
Date: Tue Mar 12 13:01:06 2013
New Revision: 1455518

URL: http://svn.apache.org/r1455518
Log:
DERBY-6075: Use modern collections in impl/sql/compile

Replace remaining Vectors with ArrayLists.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CompilerContextImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromList.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNodeVector.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CompilerContextImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CompilerContextImpl.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CompilerContextImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CompilerContextImpl.java Tue Mar 12 13:01:06 2013
@@ -76,7 +76,6 @@ import org.apache.derby.iapi.services.co
 import org.apache.derby.iapi.util.ReuseFactory;
 
 import java.sql.SQLWarning;
-import java.util.Vector;
 import java.util.Properties;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -332,7 +331,9 @@ public class CompilerContextImpl extends
 	}
 
 	public int addSavedObject(Object obj) {
-		if (savedObjects == null) savedObjects = new Vector();
+        if (savedObjects == null) {
+            savedObjects = new ArrayList();
+        }
 
 		savedObjects.add(obj);
 		return savedObjects.size()-1;
@@ -442,28 +443,19 @@ public class CompilerContextImpl extends
 	public StoreCostController getStoreCostController(long conglomerateNumber)
 			throws StandardException
 	{
-		/*
-		** Try to find the given conglomerate number in the array of
-		** conglom ids.
-		*/
-		for (int i = 0; i < storeCostConglomIds.size(); i++)
-		{
-			Long conglomId = (Long) storeCostConglomIds.get(i);
-			if (conglomId.longValue() == conglomerateNumber)
-				return (StoreCostController) storeCostControllers.get(i);
-		}
-
-		/*
-		** Not found, so get a StoreCostController from the store.
-		*/
-		StoreCostController retval =
-						lcc.getTransactionCompile().openStoreCost(conglomerateNumber);
-
-		/* Put it in the array */
-		storeCostControllers.add(retval);
+        Long conglomNum = ReuseFactory.getLong(conglomerateNumber);
 
-		/* Put the conglomerate number in its array */
-		storeCostConglomIds.add(new Long(conglomerateNumber));
+        // Try to find the given conglomerate number among the already
+        // opened conglomerates.
+        StoreCostController retval = (StoreCostController)
+                storeCostControllers.get(conglomNum);
+
+        if (retval == null) {
+            // Not found, so get a StoreCostController from the store.
+            retval = lcc.getTransactionCompile()
+                        .openStoreCost(conglomerateNumber);
+            storeCostControllers.put(conglomNum, retval);
+        }
 
 		return retval;
 	}
@@ -473,10 +465,10 @@ public class CompilerContextImpl extends
 	 */
 	private void closeStoreCostControllers()
 	{
-		for (int i = 0; i < storeCostControllers.size(); i++)
+        Iterator it = storeCostControllers.values().iterator();
+        while (it.hasNext())
 		{
-			StoreCostController scc =
-				(StoreCostController) storeCostControllers.get(i);
+            StoreCostController scc = (StoreCostController) it.next();
 			try {
 				scc.close();
 			} catch (StandardException se) {
@@ -484,7 +476,6 @@ public class CompilerContextImpl extends
 		}
 
 		storeCostControllers.clear();
-		storeCostConglomIds.clear();
 	}
 
 	/**
@@ -1035,8 +1026,11 @@ public class CompilerContextImpl extends
 	private ProviderList		currentAPL;
 	private boolean returnParameterFlag;
 
-    private final List storeCostControllers = new Vector();
-    private final List storeCostConglomIds = new Vector();
+    /**
+     * Map that contains all store cost controllers opened in this compiler
+     * context. Conglomerate id (long) is the key.
+     */
+    private final HashMap storeCostControllers = new HashMap();
 
 	private SortCostController	sortCostController;
 

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java Tue Mar 12 13:01:06 2013
@@ -57,7 +57,7 @@ import java.lang.reflect.Modifier;
 import org.apache.derby.iapi.services.classfile.VMOpcode;
 import org.apache.derby.iapi.services.io.FormatableProperties;
 
-import java.util.Vector;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -690,7 +690,7 @@ public class DeleteNode extends DMLModSt
 		boolean[]	needsDeferredProcessing = new boolean[1];
 		needsDeferredProcessing[0] = requiresDeferredProcessing();
 
-		Vector		conglomVector = new Vector();
+		ArrayList conglomVector = new ArrayList();
 		relevantTriggers = new GenericDescriptorList();
 
 		FormatableBitSet	columnMap = DeleteNode.getDeleteReadMap(baseTable,conglomVector, relevantTriggers, needsDeferredProcessing);

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromList.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromList.java Tue Mar 12 13:01:06 2013
@@ -23,12 +23,9 @@ package	org.apache.derby.impl.sql.compil
 
 import org.apache.derby.iapi.services.sanity.SanityManager;
 
-import org.apache.derby.iapi.sql.compile.CompilerContext;
 import org.apache.derby.iapi.sql.compile.Optimizable;
 import org.apache.derby.iapi.sql.compile.OptimizableList;
 import org.apache.derby.iapi.sql.compile.Optimizer;
-import org.apache.derby.iapi.sql.compile.Visitable;
-import org.apache.derby.iapi.sql.compile.Visitor;
 import org.apache.derby.iapi.sql.compile.C_NodeTypes;
 
 import org.apache.derby.iapi.sql.dictionary.DataDictionary;
@@ -38,11 +35,13 @@ import org.apache.derby.iapi.error.Stand
 import org.apache.derby.iapi.reference.SQLState;
 
 import org.apache.derby.iapi.util.JBitSet;
+import org.apache.derby.iapi.util.ReuseFactory;
 import org.apache.derby.iapi.util.StringUtil;
 
+import java.util.ArrayList;
 import java.util.Properties;
 import java.util.Enumeration;
-import java.util.Vector;
+
 
 /**
  * A FromList represents the list of tables in a FROM clause in a DML
@@ -725,7 +724,7 @@ public class FromList extends QueryTreeN
 									throws StandardException
 	{
 		boolean			flattened = true;
-		Vector 			flattenedTableNumbers = new Vector();
+		ArrayList		flattenedTableNumbers = new ArrayList();
 
 		if (SanityManager.DEBUG)
 		{
@@ -755,7 +754,8 @@ public class FromList extends QueryTreeN
 					ft.isFlattenableJoinNode())
 				{
 					//save the table number of the node to be flattened
-					flattenedTableNumbers.add(new Integer(ft.getTableNumber()));
+                    flattenedTableNumbers.add(
+                            ReuseFactory.getInteger(ft.getTableNumber()));
 
 					/* Remove the node from the list and insert its
 					 * FromList here.
@@ -799,7 +799,7 @@ public class FromList extends QueryTreeN
 		/* fix up dependency maps for exists base tables since they might have a
 		 * dependency on this join node
 		 */
-		if (flattenedTableNumbers.size() > 0)
+		if (!flattenedTableNumbers.isEmpty())
 		{
 			for (int i = 0; i < size(); i++)
 			{

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java Tue Mar 12 13:01:06 2013
@@ -22,7 +22,6 @@
 package	org.apache.derby.impl.sql.compile;
 
 import java.util.Iterator;
-import java.util.Vector;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Collections;
@@ -218,7 +217,7 @@ public class GroupByNode extends SingleC
 				
 			}
 			if (index == glSize) {
-				isInSortedOrder = childResult.isOrderedOn(crs, true, (Vector)null);
+				isInSortedOrder = childResult.isOrderedOn(crs, true, (List)null);
 			}
 		}
 	}
@@ -1246,10 +1245,14 @@ public class GroupByNode extends SingleC
 						/* See if the underlying ResultSet tree
 						 * is ordered on the ColumnReference.
 						 */
-						ColumnReference[] crs = new ColumnReference[1];
-						crs[0] = (ColumnReference) an.getOperand();
-						
-						Vector tableVector = new Vector();
+                        ColumnReference[] crs = {
+                            (ColumnReference) an.getOperand()
+                        };
+
+                        // Holder list for the FromBaseTable. We expect no more
+                        // than one table, hence initial capacity is 1.
+						ArrayList tableVector = new ArrayList(1);
+
 						boolean minMaxOptimizationPossible = isOrderedOn(crs, false, tableVector);
 						if (SanityManager.DEBUG)
 						{
@@ -1290,7 +1293,9 @@ public class GroupByNode extends SingleC
 									break;
 								}
 							}
-							FromBaseTable fbt = (FromBaseTable)tableVector.firstElement();
+
+                            FromBaseTable fbt =
+                                    (FromBaseTable) tableVector.get(0);
 							MaxMinAggregateDefinition temp = (MaxMinAggregateDefinition)ad;
 
 							/*  MAX   ASC      NULLABLE 

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java Tue Mar 12 13:01:06 2013
@@ -21,6 +21,7 @@
 
 package org.apache.derby.impl.sql.compile;
 
+import java.util.ArrayList;
 import org.apache.derby.iapi.sql.compile.CostEstimate;
 import org.apache.derby.iapi.sql.compile.ExpressionClassBuilderInterface;
 import org.apache.derby.iapi.sql.compile.JoinStrategy;
@@ -49,8 +50,8 @@ import org.apache.derby.iapi.services.io
 import org.apache.derby.iapi.services.io.FormatableIntHolder;
 
 import org.apache.derby.iapi.util.JBitSet;
+import org.apache.derby.iapi.util.ReuseFactory;
 
-import java.util.Vector;
 
 public class HashJoinStrategy extends BaseJoinStrategy {
 	public HashJoinStrategy() {
@@ -639,30 +640,29 @@ public class HashJoinStrategy extends Ba
 			}
 		}
 
-		// Build a Vector of all the hash key columns
-		int colCtr;
-		Vector hashKeyVector = new Vector();
-		for (colCtr = 0; colCtr < columns.length; colCtr++)
+        // Build a list of all the hash key columns
+        ArrayList hashKeys = new ArrayList();
+        for (int colCtr = 0; colCtr < columns.length; colCtr++)
 		{
 			// Is there an equijoin condition on this column?
 			if (predList.hasOptimizableEquijoin(innerTable, columns[colCtr]))
 			{
-				hashKeyVector.add(new Integer(colCtr));
+                hashKeys.add(ReuseFactory.getInteger(colCtr));
 			}
 		}
 
-		// Convert the Vector into an int[], if there are hash key columns
-		if (hashKeyVector.size() > 0)
-		{
-			int[] keyCols = new int[hashKeyVector.size()];
-			for (int index = 0; index < keyCols.length; index++)
-			{
-				keyCols[index] = ((Integer) hashKeyVector.get(index)).intValue();
-			}
-			return keyCols;
-		}
-		else
-			return (int[]) null;
+        // Convert the list into an int[], if there are hash key columns
+        if (hashKeys.isEmpty())
+        {
+            return null;
+        }
+
+        int[] keyCols = new int[hashKeys.size()];
+        for (int index = 0; index < keyCols.length; index++)
+        {
+            keyCols[index] = ((Integer) hashKeys.get(index)).intValue();
+        }
+        return keyCols;
 	}
 
 	public String toString() {

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java Tue Mar 12 13:01:06 2013
@@ -43,10 +43,9 @@ import org.apache.derby.iapi.services.cl
 import org.apache.derby.iapi.types.Like;
 
 import java.sql.Types;
+import java.util.Arrays;
 import java.util.List;
 
-import java.util.Vector;
-
   
 /**
     This node represents a like comparison operator (no escape)
@@ -869,17 +868,10 @@ public final class LikeEscapeOperatorNod
         throws StandardException 
     {
 
-        Vector param;
-
         if (escapeNode != null)
         {
-            param = new Vector(2);
             methodName += "WithEsc";
         }
-        else
-        {
-            param = new Vector(1);
-        }
 
         StaticMethodCallNode methodCall = (StaticMethodCallNode)
             getNodeFactory().getNode(
@@ -891,18 +883,16 @@ public final class LikeEscapeOperatorNod
         // using a method call directly, thus need internal sql capability
         methodCall.internalCall = true;
 
-        param.add(parameterNode);
-        if (escapeNode != null)
-            param.add(escapeNode);
-
         QueryTreeNode maxWidthNode = (QueryTreeNode) getNodeFactory().getNode(
             C_NodeTypes.INT_CONSTANT_NODE,
             new Integer(maxWidth),
             getContextManager());
-        param.add(maxWidthNode);
 
-        methodCall.addParms(param);
+        QueryTreeNode[] param = (escapeNode == null) ?
+            new QueryTreeNode[] { parameterNode, maxWidthNode } :
+            new QueryTreeNode[] { parameterNode, escapeNode, maxWidthNode };
 
+        methodCall.addParms(Arrays.asList(param));
 
         ValueNode java2SQL = 
             (ValueNode) getNodeFactory().getNode(

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/PredicateList.java Tue Mar 12 13:01:06 2013
@@ -60,7 +60,6 @@ import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Vector;
 
 /**
  * A PredicateList represents the list of top level predicates.
@@ -1948,7 +1947,7 @@ public class PredicateList extends Query
 			/* Put all of the join clauses that already have an equivalence 
              * class at the head of the outer list to optimize search.
 			 */
-			Vector movePreds = new Vector();
+			ArrayList movePreds = new ArrayList();
 			for (int jcIndex = outerJCL.size() - 1; jcIndex >= 0; jcIndex--)
 			{
 				Predicate predicate = (Predicate) outerJCL.elementAt(jcIndex);
@@ -3873,7 +3872,7 @@ public class PredicateList extends Query
 		 *--------------------------------------------------------------------*/
 		double selectivity = 1.0;
 
-		Vector maxPreds = new Vector();
+		ArrayList maxPreds = new ArrayList();
 
 		while (true)
 		{
@@ -4099,23 +4098,16 @@ public class PredicateList extends Query
 	 */
 	private class PredicateWrapperList
 	{
-		Vector pwList;
+		private final ArrayList pwList;
 		int numPreds;
 		int numDuplicates;
 		int weight;
 
 		PredicateWrapperList(int maxValue)
 		{
-			pwList = new Vector(maxValue);
+			pwList = new ArrayList(maxValue);
 		}
 		
-		void removeElement(PredicateWrapper pw)
-		{
-			int index = pwList.indexOf(pw);
-			if (index >= 0)
-				removeElementAt(index);
-		}
-
 		void removeElement(Predicate p)
 		{
 			for (int i = numPreds - 1; i >= 0; i--)
@@ -4178,11 +4170,9 @@ public class PredicateList extends Query
 		 */
 		void retainLeadingContiguous()
 		{
-			if (pwList == null)
-				return;
-
-			if (pwList.size() == 0)
+            if (pwList.isEmpty()) {
 				return;
+            }
 
 			if (elementAt(0).getIndexPosition() != 0)
 			{
@@ -4224,8 +4214,6 @@ public class PredicateList extends Query
 		 */
 		private List createLeadingUnique()
 		{
-			Vector scratch = new Vector();
-
 			if (numPreds == 0)
 				return null;
 
@@ -4234,6 +4222,7 @@ public class PredicateList extends Query
 			if (lastIndexPosition != 0)
 				return null;
 
+            ArrayList scratch = new ArrayList();
 			scratch.add(elementAt(0));	// always add 0.
 
 			for (int i = 1; i < numPreds; i++)

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNodeVector.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNodeVector.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNodeVector.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNodeVector.java Tue Mar 12 13:01:06 2013
@@ -21,24 +21,21 @@
 
 package	org.apache.derby.impl.sql.compile;
 
+import java.util.ArrayList;
 import org.apache.derby.iapi.services.sanity.SanityManager;
-
 import org.apache.derby.iapi.sql.compile.Visitor;
 import org.apache.derby.iapi.error.StandardException;
 
-import java.util.List;
-import java.util.Vector;
-
 /**
  * QueryTreeNodeVector is the root class for all lists of query tree nodes.
- * It provides a wrapper for java.util.Vector. All
+ * It provides a wrapper for java.util.ArrayList. All
  * lists of query tree nodes inherit from QueryTreeNodeVector.
  *
  */
 
 abstract class QueryTreeNodeVector extends QueryTreeNode
 {
-	private final List v = new Vector();
+	private final ArrayList v = new ArrayList();
 
 	public final int size()
 	{

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java?rev=1455518&r1=1455517&r2=1455518&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java Tue Mar 12 13:01:06 2013
@@ -25,7 +25,6 @@ import org.apache.derby.catalog.DefaultI
 import org.apache.derby.catalog.UUID;
 
 import org.apache.derby.iapi.services.compiler.MethodBuilder;
-import org.apache.derby.impl.sql.compile.ActivationClassBuilder;
 import org.apache.derby.iapi.sql.conn.Authorizer;
 import org.apache.derby.iapi.sql.compile.C_NodeTypes;
 import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
@@ -47,11 +46,7 @@ import org.apache.derby.iapi.sql.diction
 
 import org.apache.derby.iapi.reference.SQLState;
 import org.apache.derby.iapi.sql.execute.ConstantAction;
-import org.apache.derby.iapi.sql.execute.CursorResultSet;
 import org.apache.derby.iapi.sql.execute.ExecPreparedStatement;
-import org.apache.derby.iapi.sql.execute.ExecRow;
-
-import org.apache.derby.iapi.sql.ResultSet;
 import org.apache.derby.iapi.sql.StatementType;
 
 import org.apache.derby.iapi.store.access.StaticCompiledOpenConglomInfo;
@@ -66,9 +61,10 @@ import org.apache.derby.iapi.util.ReuseF
 import org.apache.derby.iapi.services.classfile.VMOpcode;
 
 import java.lang.reflect.Modifier;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.Vector;
+import java.util.List;
 
 /**
  * An UpdateNode represents an UPDATE statement.  It is the top node of the
@@ -892,7 +888,7 @@ public final class UpdateNode extends DM
 		boolean[]	needsDeferredProcessing = new boolean[1];
 		needsDeferredProcessing[0] = requiresDeferredProcessing();
 
-		Vector		conglomVector = new Vector();
+		ArrayList conglomVector = new ArrayList();
 		relevantCdl = new ConstraintDescriptorList();
 		relevantTriggers =  new GenericDescriptorList();
 
@@ -993,7 +989,7 @@ public final class UpdateNode extends DM
 		DataDictionary		dd,
 		TableDescriptor				baseTable,
 		ResultColumnList			updateColumnList,
-		Vector						conglomVector,
+		List						conglomVector,
 		ConstraintDescriptorList	relevantConstraints,
 		GenericDescriptorList		relevantTriggers,
 		boolean[]					needsDeferredProcessing,