+ switch (en.kind()) {
+
+ case Kind.AssignmentNode:
+ analyzeFlowAssignmentNode(md, nametable, (AssignmentNode) en, base);
+ break;
+
+ case Kind.FieldAccessNode:
+ analyzeFieldAccessNode(md, nametable, (FieldAccessNode) en);
+ break;
+
+ case Kind.NameNode:
+ return analyzeFlowNameNode(md, nametable, (NameNode) en, base);
+
+ case Kind.OpNode:
+ // return analyzeOpNode(md, nametable, (OpNode) en, new
+ // HashSet<FlowNode>());
+ break;
+
+ case Kind.CreateObjectNode:
+ analyzeCreateObjectNode(md, nametable, (CreateObjectNode) en);
+ break;
+
+ case Kind.ArrayAccessNode:
+ analyzeArrayAccessNode(md, nametable, (ArrayAccessNode) en);
+ break;
+
+ case Kind.LiteralNode:
+ analyzeLiteralNode(md, nametable, (LiteralNode) en);
+ break;
+
+ case Kind.MethodInvokeNode:
+ analyzeMethodInvokeNode(md, nametable, (MethodInvokeNode) en);
+ break;
+
+ case Kind.TertiaryNode:
+ analyzeTertiaryNode(md, nametable, (TertiaryNode) en);
+ break;
+
+ case Kind.CastNode:
+ analyzeCastNode(md, nametable, (CastNode) en);
+ break;
+
+ // case Kind.InstanceOfNode:
+ // checkInstanceOfNode(md, nametable, (InstanceOfNode) en, td);
+ // return null;
+
+ // case Kind.ArrayInitializerNode:
+ // checkArrayInitializerNode(md, nametable, (ArrayInitializerNode) en,
+ // td);
+ // return null;
+
+ // case Kind.ClassTypeNode:
+ // checkClassTypeNode(md, nametable, (ClassTypeNode) en, td);
+ // return null;
+
+ // case Kind.OffsetNode:
+ // checkOffsetNode(md, nametable, (OffsetNode)en, td);
+ // return null;
+
+ }
+ return null;
+
+ }
+
+ private void analyzeCastNode(MethodDescriptor md, SymbolTable nametable, CastNode en) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private void analyzeTertiaryNode(MethodDescriptor md, SymbolTable nametable, TertiaryNode en) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private void analyzeMethodInvokeNode(MethodDescriptor md, SymbolTable nametable,
+ MethodInvokeNode en) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private void analyzeLiteralNode(MethodDescriptor md, SymbolTable nametable, LiteralNode en) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private void analyzeArrayAccessNode(MethodDescriptor md, SymbolTable nametable, ArrayAccessNode en) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private void analyzeCreateObjectNode(MethodDescriptor md, SymbolTable nametable,
+ CreateObjectNode en) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private Set<FlowNode> analyzeOpNode(MethodDescriptor md, SymbolTable nametable, OpNode on,
+ Set<FlowNode> nodeSet) {
+
+ ClassDescriptor cd = md.getClassDesc();
+
+ // left operand
+ NTuple<Descriptor> leftOpTuple =
+ analyzeFlowExpressionNode(md, nametable, on.getLeft(), new NTuple<Descriptor>());
+
+ if (on.getRight() != null) {
+ // right operand
+ NTuple<Descriptor> rightOpTuple =
+ analyzeFlowExpressionNode(md, nametable, on.getRight(), new NTuple<Descriptor>());