001package daikon.inv.filter; 002 003import daikon.PrintInvariants; 004import daikon.VarInfo; 005import daikon.inv.EqualityComparison; 006import daikon.inv.Invariant; 007import java.util.logging.Level; 008 009/** 010 * Suppress invariants that merely indicate that a variable was unmodified. Used only for ESC 011 * output. 012 */ 013public class UnmodifiedVariableEqualityFilter extends InvariantFilter { 014 @Override 015 public String getDescription() { 016 return "Suppress invariants that merely indicate that a variable was unmodified"; 017 } 018 019 /** Boolean. If true, UnmodifiedVariableEqualityFilter is initially turned on. */ 020 public static boolean dkconfig_enabled = true; 021 022 public UnmodifiedVariableEqualityFilter() { 023 isOn = dkconfig_enabled; 024 } 025 026 @Override 027 boolean shouldDiscardInvariant(Invariant invariant) { 028 if (PrintInvariants.debugFiltering.isLoggable(Level.FINE)) { 029 PrintInvariants.debugFiltering.fine("\tEntering UmVEF.shouldDiscard"); 030 } 031 032 if (!invariant.isEqualityComparison()) { 033 if (PrintInvariants.debugFiltering.isLoggable(Level.FINE)) { 034 PrintInvariants.debugFiltering.fine( 035 "\tUnmodVarEqF thinks this isn't an equality comparison"); 036 } 037 return false; 038 } 039 040 EqualityComparison comp = (EqualityComparison) invariant; 041 VarInfo var1 = comp.var1(); 042 VarInfo var2 = comp.var2(); 043 044 if (PrintInvariants.debugFiltering.isLoggable(Level.FINE)) { 045 PrintInvariants.debugFiltering.fine( 046 "compared " + var1.prestate_name() + " to " + var2.name()); 047 } 048 049 if (var1.is_prestate_version(var2) || var2.is_prestate_version(var1)) { 050 // System.err.printf("prestate: var1 (%s) = var2 (%s)%n", var1, var2); 051 return true; 052 } 053 054 return false; 055 } 056}