001package daikon.derive.unary; 002 003import daikon.Daikon; 004import daikon.ProglangType; 005import daikon.VarInfo; 006import daikon.inv.OutputFormat; 007import java.util.ArrayList; 008import org.checkerframework.checker.nullness.qual.Nullable; 009 010public final class SequenceMinMaxSumFactory extends UnaryDerivationFactory { 011 012 @Override 013 public UnaryDerivation @Nullable [] instantiate(VarInfo vi) { 014 // System.out.println("SequenceMinMaxSumFactory.instantiate(" + vi.name + ")"); 015 016 if (vi.rep_type != ProglangType.INT_ARRAY) { 017 return null; 018 } 019 if (!vi.type.isArray()) { 020 return null; 021 } 022 if (!vi.type.elementIsIntegral() && !vi.type.elementIsFloat()) { 023 return null; 024 } 025 if (vi.type.base() == "char") { // interned 026 return null; 027 } 028 // Should be reversed at some point; for now, will improve run time. 029 if (Daikon.output_format != OutputFormat.DAIKON) { 030 return null; 031 } 032 033 ArrayList<UnaryDerivation> result = new ArrayList<>(3); 034 if (SequenceMin.dkconfig_enabled) { 035 result.add(new SequenceMin(vi)); 036 } 037 if (SequenceMax.dkconfig_enabled) { 038 result.add(new SequenceMax(vi)); 039 } 040 if (SequenceSum.dkconfig_enabled) { 041 result.add(new SequenceSum(vi)); 042 } 043 044 if (result.size() == 0) { 045 return null; 046 } 047 048 return result.toArray(new UnaryDerivation[0]); 049 } 050}