class UnreachableCodeFlowSet extends DavaFlowSet {

    public UnreachableCodeFlowSet clone() {<FILL_FUNCTION_BODY>}

    @Override
    public void intersection(FlowSet otherFlow, FlowSet destFlow) {
      if (DEBUG) {
        System.out.println("In intersection");
      }
      if (!(otherFlow instanceof UnreachableCodeFlowSet) || !(destFlow instanceof UnreachableCodeFlowSet)) {
        super.intersection(otherFlow, destFlow);
        return;
      }

      UnreachableCodeFlowSet other = (UnreachableCodeFlowSet) otherFlow;
      UnreachableCodeFlowSet dest = (UnreachableCodeFlowSet) destFlow;

      UnreachableCodeFlowSet workingSet;

      if (dest == other || dest == this) {
        workingSet = new UnreachableCodeFlowSet();
      } else {
        workingSet = dest;
        workingSet.clear();
      }

      if (other.size() != 1 || this.size() != 1) {
        System.out.println("Other size = " + other.size());
        System.out.println("This size = " + this.size());
        throw new DecompilationException("UnreachableCodeFlowSet size should always be one");
      }

      Boolean thisPath = (Boolean) this.elements[0];
      Boolean otherPath = (Boolean) other.elements[0];
      if (!thisPath.booleanValue() && !otherPath.booleanValue()) {
        // both say there is no path
        workingSet.add((new Boolean(false)));
      } else {
        workingSet.add((new Boolean(true)));
      }
      (workingSet).copyInternalDataFrom(this);
      if (otherFlow instanceof DavaFlowSet) {
        (workingSet).copyInternalDataFrom((DavaFlowSet) otherFlow);
      }

      if (workingSet != dest) {
        workingSet.copy(dest);
      }

      if (DEBUG) {
        System.out.println("destFlow contains size:" + ((UnreachableCodeFlowSet) destFlow).size());
      }
    }

  }

      if (this.size() != 1) {
        throw new DecompilationException("unreachableCodeFlow set size should always be 1");
      }
      Boolean temp = (Boolean) this.elements[0];
      UnreachableCodeFlowSet toReturn = new UnreachableCodeFlowSet();
      toReturn.add(new Boolean(temp.booleanValue()));
      toReturn.copyInternalDataFrom(this);
      return toReturn;
    
<methods>public void <init>() ,public abstract DavaFlowSet#RAW cloneFlowSet(DavaFlowSet#RAW) ,public void debug(java.lang.String, java.lang.String) ,public void debug(java.lang.String) ,public abstract DavaFlowSet#RAW emptyFlowSet() ,public DavaFlowSet#RAW getAfterSet(java.lang.Object) ,public DavaFlowSet#RAW getBeforeSet(java.lang.Object) ,public java.lang.String getLabel(soot.dava.internal.AST.ASTNode) ,public DavaFlowSet#RAW handleBreak(java.lang.String, DavaFlowSet#RAW, soot.dava.internal.AST.ASTNode) ,public DavaFlowSet#RAW handleContinue(java.lang.String, DavaFlowSet#RAW, soot.dava.internal.AST.ASTNode) ,public boolean isDifferent(DavaFlowSet#RAW, DavaFlowSet#RAW) ,public DavaFlowSet#RAW merge(DavaFlowSet#RAW, DavaFlowSet#RAW) ,public DavaFlowSet#RAW mergeExplicitAndImplicit(java.lang.String, DavaFlowSet#RAW, List#RAW, List#RAW) ,public abstract DavaFlowSet#RAW newInitialFlow() ,public void print(java.lang.Object) ,public DavaFlowSet#RAW process(java.lang.Object, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTDoWhileNode(soot.dava.internal.AST.ASTDoWhileNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTForLoopNode(soot.dava.internal.AST.ASTForLoopNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTIfElseNode(soot.dava.internal.AST.ASTIfElseNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTIfNode(soot.dava.internal.AST.ASTIfNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTLabeledBlockNode(soot.dava.internal.AST.ASTLabeledBlockNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTMethodNode(soot.dava.internal.AST.ASTMethodNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTNode(soot.dava.internal.AST.ASTNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTStatementSequenceNode(soot.dava.internal.AST.ASTStatementSequenceNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTSwitchNode(soot.dava.internal.AST.ASTSwitchNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTSynchronizedBlockNode(soot.dava.internal.AST.ASTSynchronizedBlockNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTTryNode(soot.dava.internal.AST.ASTTryNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTUnconditionalLoopNode(soot.dava.internal.AST.ASTUnconditionalLoopNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processASTWhileNode(soot.dava.internal.AST.ASTWhileNode, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processAbruptStatements(soot.jimple.Stmt, DavaFlowSet#RAW) ,public DavaFlowSet#RAW processCondition(soot.dava.internal.AST.ASTCondition, DavaFlowSet#RAW) ,public final DavaFlowSet#RAW processSingleSubBodyNode(soot.dava.internal.AST.ASTNode, DavaFlowSet#RAW) ,public abstract DavaFlowSet#RAW processStatement(soot.jimple.Stmt, DavaFlowSet#RAW) ,public abstract DavaFlowSet#RAW processSwitchKey(soot.Value, DavaFlowSet#RAW) ,public abstract DavaFlowSet#RAW processSynchronizedLocal(soot.Local, DavaFlowSet#RAW) ,public abstract DavaFlowSet#RAW processUnaryBinaryCondition(soot.dava.internal.AST.ASTUnaryBinaryCondition, DavaFlowSet#RAW) ,public abstract void setMergeType() <variables>public static boolean DEBUG,public static boolean DEBUG_IF,public static boolean DEBUG_STATEMENTS,public static boolean DEBUG_TRY,public static boolean DEBUG_WHILE,final int INTERSECTION,public int MERGETYPE,DavaFlowSet#RAW NOPATH,final int UNDEFINED,final int UNION,HashMap#RAW afterSets,HashMap#RAW beforeSets