if (dataset == null) { throw new IllegalArgumentException("Null 'dataset' argument."); } Number result = null; // if the dataset implements DomainInfo, life is easy if (dataset instanceof DomainInfo) { DomainInfo info = (DomainInfo) dataset; return new Double(info.getDomainUpperBound(true)); } // hasn't implemented DomainInfo, so iterate... else { double maximum = Double.NEGATIVE_INFINITY; int seriesCount = dataset.getSeriesCount(); for (int series = 0; series < seriesCount; series++) { int itemCount = dataset.getItemCount(series); for (int item = 0; item < itemCount; item++) { double value; if (dataset instanceof IntervalXYDataset) { IntervalXYDataset intervalXYData = (IntervalXYDataset) dataset; value = intervalXYData.getEndXValue(series, item); } else { value = dataset.getXValue(series, item); } if (!Double.isNaN(value)) { maximum = Math.max(maximum, value); } } } if (maximum == Double.NEGATIVE_INFINITY) { result = null; } else { result = new Double(maximum); } } return result;
if (dataset instanceof RangeInfo) { RangeInfo info = (RangeInfo) dataset; return new Double(info.getRangeLowerBound(true)); } // hasn't implemented RangeInfo, so we'll have to iterate... else { double minimum = Double.POSITIVE_INFINITY; int seriesCount = dataset.getSeriesCount(); for (int series = 0; series < seriesCount; series++) { int itemCount = dataset.getItemCount(series); for (int item = 0; item < itemCount; item++) { double value; if (dataset instanceof IntervalXYDataset) { IntervalXYDataset intervalXYData = (IntervalXYDataset) dataset; value = intervalXYData.getStartYValue(series, item); } else if (dataset instanceof OHLCDataset) { OHLCDataset highLowData = (OHLCDataset) dataset; value = highLowData.getLowValue(series, item); } else { value = dataset.getYValue(series, item); } if (!Double.isNaN(value)) { minimum = Math.min(minimum, value); } } } if (minimum == Double.POSITIVE_INFINITY) { return null; } else { return new Double(minimum); } }
Clone fragments detected by clone detection tool
File path: /jfreechart-1.0.10/src/org/jfree/data/general/DatasetUtilities.java File path: /jfreechart-1.0.10/src/org/jfree/data/general/DatasetUtilities.java
Method name: Number findMaximumDomainValue(XYDataset) Method name: Number findMinimumRangeValue(XYDataset)
Number of AST nodes: 22 Number of AST nodes: 21
1
if (dataset == null) {
1
if (dataset 
2
            throw new IllegalArgumentException("Null 'dataset' argument.");
3
        }
4
        Number result = null;
5
        // if the dataset implements DomainInfo, life is easy
6
        if (dataset instanceof DomainInfo) {
2
instanceof RangeInfo) {
7
            DomainInfo info = (DomainInfo) dataset;
3
            RangeInfo info = (RangeInfo) dataset;
8
            return new Double(info.getDomainUpperBound(true));
4
            return new Double(info.getRangeLowerBound(true));
9
        }
5
        }
10
        // hasn't implemented DomainInfo, so iterate...
6
        // hasn't implemented RangeInfo, so we'll have to iterate...
11
        else {
7
        else {
12
            double maximum = Double.NEGATIVE_INFINITY;
8
            double minimum = Double.POSITIVE_INFINITY;
13
            int seriesCount = dataset.getSeriesCount();
9
            int seriesCount = dataset.getSeriesCount();
14
            for (int series = 0; series < seriesCount; series++) {
10
            for (int series = 0; series < seriesCount; series++) {
15
                int itemCount = dataset.getItemCount(series);
11
                int itemCount = dataset.getItemCount(series);
16
                for (int item = 0; item < itemCount; item++) {
12
                for (int item = 0; item < itemCount; item++) {
17
                    double value;
13
                    double value;
18
                    if (dataset instanceof IntervalXYDataset) {
14
                    if (dataset instanceof IntervalXYDataset) {
19
                        IntervalXYDataset intervalXYData
15
                        IntervalXYDataset intervalXYData
20
                            = (IntervalXYDataset) dataset;
16
                            = (IntervalXYDataset) dataset;
21
                        value = intervalXYData.getEndX
17
                        value = intervalXYData.getStartYValue(series, item);
18
                    }
19
                    else if (dataset instanceof OHLCDataset) {
20
                        OHLCDataset highLowData = (OHLCDataset) dataset;
22
Value(series, item);
21
                        value = highLowData.getLowValue(series, item);
23
                    }
22
                    }
24
                    else {
23
                    else {
25
                        value = dataset.getXValue(series, item);
24
                        value = dataset.getYValue(series, item);
26
                    }
25
                    }
27
                    if (!Double.isNaN(value)) {
26
                    if (!Double.isNaN(value)) {
28
                        maximum = Math.max(maximum, value);
27
                        minimum = Math.min(minimum, value);
29
                    }
28
                    }
30
                }
29
                }
31
            }
30
            }
32
            if (maximum == Double.NEGATIVE_INFINITY) {
31
            if (minimum == Double.POSITIVE_INFINITY) {
33
                result = null;
32
                return null;
34
            }
33
            }
35
            else {
34
            else {
36
                result = new Double(maximum);
35
                return new Double(minimum);
37
            }
36
            }
38
        }
37
        }
39
        return result;
Summary
Number of common nesting structure subtrees1
Number of refactorable cases0
Number of non-refactorable cases1
Time elapsed for finding largest common nesting structure subtrees (ms)0.8
Clones locationClones are declared in the same class
Number of node comparisons54
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements11
    Number of unmapped statements in the first code fragment8
    Number of unmapped statements in the second code fragment10
    Time elapsed for statement mapping (ms)164.1
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
    3
    Number result = null;
                                                
    4
    if (dataset instanceof DomainInfo)
    4
    if (dataset instanceof DomainInfo)
    3
    if (dataset instanceof RangeInfo)
    Differences
    Expression1Expression2Difference
    org.jfree.data.DomainInfoorg.jfree.data.RangeInfoVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Type org.jfree.data.DomainInfo does not match with type org.jfree.data.RangeInfo
    • Make classes org.jfree.data.DomainInfo and org.jfree.data.RangeInfo extend a common superclass
    3
    if (dataset instanceof RangeInfo)
                                                                              
    4
    RangeInfo info = (RangeInfo)dataset;
    Preondition Violations
    Unmatched statement RangeInfo info=(RangeInfo)dataset; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    4
    RangeInfo info = (RangeInfo)dataset;
    5
    DomainInfo info = (DomainInfo)dataset;
    5
    DomainInfo info = (DomainInfo)dataset;
    Preondition Violations
    Unmatched statement DomainInfo info=(DomainInfo)dataset; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
                                                                                  
    6
    return new Double(info.getDomainUpperBound(true));
    6
    return new Double(info.getDomainUpperBound(true));
    5
    return new Double(info.getRangeLowerBound(true));
    Differences
    Expression1Expression2Difference
    getDomainUpperBoundgetRangeLowerBoundMETHOD_INVOCATION_NAME_MISMATCH
    org.jfree.data.DomainInfoorg.jfree.data.RangeInfoVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Expression info.getDomainUpperBound(true) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression info.getRangeLowerBound(true) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Type org.jfree.data.DomainInfo of variable info does not match with type org.jfree.data.RangeInfo of variable info
    • Make classes org.jfree.data.DomainInfo and org.jfree.data.RangeInfo extend a common superclass
    5
    return new Double(info.getRangeLowerBound(true));
    else
    else
    7
    double maximum = Double.NEGATIVE_INFINITY;
    7
    double maximum = Double.NEGATIVE_INFINITY;
    6
    double minimum = Double.POSITIVE_INFINITY;
    Differences
    Expression1Expression2Difference
    maximumminimumVARIABLE_NAME_MISMATCH
    NEGATIVE_INFINITYPOSITIVE_INFINITYVARIABLE_NAME_MISMATCH
    6
    double minimum = Double.POSITIVE_INFINITY;
    8
    int seriesCount = dataset.getSeriesCount();
    7
    int seriesCount = dataset.getSeriesCount();
    9
    for (int series = 0; series < seriesCount; series++)
    8
    for (int series = 0; series < seriesCount; series++)
    10
    int itemCount = dataset.getItemCount(series);
    9
    int itemCount = dataset.getItemCount(series);
    11
    for (int item = 0; item < itemCount; item++)
    10
    for (int item = 0; item < itemCount; item++)
    12
    double value;
    11
    double value;
                                                                                            
    12
    if (dataset instanceof IntervalXYDataset)
    Preondition Violations
    Unmatched statement if(dataset instanceof IntervalXYDataset) cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    12
    if (dataset instanceof IntervalXYDataset)
                                                                                                                                    
    13
    IntervalXYDataset intervalXYData = (IntervalXYDataset)dataset;
    Preondition Violations
    Unmatched statement IntervalXYDataset intervalXYData=(IntervalXYDataset)dataset; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    13
    IntervalXYDataset intervalXYData = (IntervalXYDataset)dataset;
                                                                                                              
    14
    value = intervalXYData.getStartYValue(series, item);
    Preondition Violations
    Unmatched statement value=intervalXYData.getStartYValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    14
    value = intervalXYData.getStartYValue(series, item);
                                                                                
    15
    else if (dataset instanceof OHLCDataset)
    Preondition Violations
    Unmatched statement if(dataset instanceof OHLCDataset) cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    15
    else if (dataset instanceof OHLCDataset)
                                                                                                      
    16
    OHLCDataset highLowData = (OHLCDataset)dataset;
    Preondition Violations
    Unmatched statement OHLCDataset highLowData=(OHLCDataset)dataset; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    16
    OHLCDataset highLowData = (OHLCDataset)dataset;
                                                                                                  
    17
    value = highLowData.getLowValue(series, item);
    Preondition Violations
    Unmatched statement value=highLowData.getLowValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    17
    value = highLowData.getLowValue(series, item);
            
    else
                                                                                      
    18
    value = dataset.getYValue(series, item);
    Preondition Violations
    Unmatched statement value=dataset.getYValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    18
    value = dataset.getYValue(series, item);
    13
    if (dataset instanceof IntervalXYDataset)
    13
    if (dataset instanceof IntervalXYDataset)
    Preondition Violations
    Unmatched statement if(dataset instanceof IntervalXYDataset) cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
                                                                                            
    14
    IntervalXYDataset intervalXYData = (IntervalXYDataset)dataset;
    14
    IntervalXYDataset intervalXYData = (IntervalXYDataset)dataset;
    Preondition Violations
    Unmatched statement IntervalXYDataset intervalXYData=(IntervalXYDataset)dataset; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                                                                    
    15
    value = intervalXYData.getEndXValue(series, item);
    15
    value = intervalXYData.getEndXValue(series, item);
    Preondition Violations
    Unmatched statement value=intervalXYData.getEndXValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                                          
    else
            
    16
    value = dataset.getXValue(series, item);
    16
    value = dataset.getXValue(series, item);
    Preondition Violations
    Unmatched statement value=dataset.getXValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                      
    17
    if (!Double.isNaN(value))
    19
    if (!Double.isNaN(value))
    18
    maximum = Math.max(maximum, value);
    18
    maximum = Math.max(maximum, value);
    20
    minimum = Math.min(minimum, value);
    Differences
    Expression1Expression2Difference
    maximumminimumVARIABLE_NAME_MISMATCH
    maximumminimumVARIABLE_NAME_MISMATCH
    maxminMETHOD_INVOCATION_NAME_MISMATCH
    Preondition Violations
    Expression Math.max(maximum,value) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression Math.min(minimum,value) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    20
    minimum = Math.min(minimum, value);
    19
    if (maximum == Double.NEGATIVE_INFINITY)
    19
    if (maximum == Double.NEGATIVE_INFINITY)
    21
    if (minimum == Double.POSITIVE_INFINITY)
    Differences
    Expression1Expression2Difference
    maximumminimumVARIABLE_NAME_MISMATCH
    NEGATIVE_INFINITYPOSITIVE_INFINITYVARIABLE_NAME_MISMATCH
    21
    if (minimum == Double.POSITIVE_INFINITY)
    20
    result = null;
                                    
    else
            
    21
    result = new Double(maximum);
    21
    result = new Double(maximum);
    Preondition Violations
    Unmatched statement result=new Double(maximum); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                  
                                                                  
    23
    return new Double(minimum);
    Preondition Violations
    Unmatched statement return new Double(minimum); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    Unmatched return new Double(minimum);
    23
    return new Double(minimum);
                                    
    22
    return null;
    Preondition Violations
    Unmatched return null;
    22
    return null;
    Precondition Violations (24)
    Row Violation
    1Type org.jfree.data.DomainInfo does not match with type org.jfree.data.RangeInfo
    2Unmatched statement RangeInfo info=(RangeInfo)dataset; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    3Unmatched statement DomainInfo info=(DomainInfo)dataset; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    4Expression info.getDomainUpperBound(true) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    5Expression info.getRangeLowerBound(true) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    6Type org.jfree.data.DomainInfo of variable info does not match with type org.jfree.data.RangeInfo of variable info
    7Unmatched statement if(dataset instanceof IntervalXYDataset) cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    8Unmatched statement IntervalXYDataset intervalXYData=(IntervalXYDataset)dataset; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    9Unmatched statement value=intervalXYData.getStartYValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    10Unmatched statement if(dataset instanceof OHLCDataset) cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    11Unmatched statement OHLCDataset highLowData=(OHLCDataset)dataset; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    12Unmatched statement value=highLowData.getLowValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    13Unmatched statement value=dataset.getYValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    14Unmatched statement if(dataset instanceof IntervalXYDataset) cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    15Unmatched statement IntervalXYDataset intervalXYData=(IntervalXYDataset)dataset; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    16Unmatched statement value=intervalXYData.getEndXValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    17Unmatched statement value=dataset.getXValue(series,item); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    18Expression Math.max(maximum,value) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    19Expression Math.min(minimum,value) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    20Unmatched statement result=new Double(maximum); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    21Unmatched statement return new Double(minimum); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    22Unmatched return new Double(minimum);
    23Unmatched return null;
    24Not all possible execution flows end in a return statement