Number dataValue = dataset.getValue(row, column); if (dataValue == null) { return; } double value = dataValue.doubleValue(); Comparable group = this.seriesToGroupMap.getGroup( dataset.getRowKey(row)); PlotOrientation orientation = plot.getOrientation(); double barW0 = calculateBarW0(plot, orientation, dataArea, domainAxis, state, row, column); double positiveBase = 0.0; double negativeBase = 0.0; for (int i = 0; i < row; i++) { if (group.equals(this.seriesToGroupMap.getGroup( dataset.getRowKey(i)))) { Number v = dataset.getValue(i, column); if (v != null) { double d = v.doubleValue(); if (d > 0) { positiveBase = positiveBase + d; } else { negativeBase = negativeBase + d; } } } } double translatedBase; double translatedValue; RectangleEdge location = plot.getRangeAxisEdge(); if (value > 0.0) { translatedBase = rangeAxis.valueToJava2D(positiveBase, dataArea, location); translatedValue = rangeAxis.valueToJava2D(positiveBase + value, dataArea, location); } else { translatedBase = rangeAxis.valueToJava2D(negativeBase, dataArea, location); translatedValue = rangeAxis.valueToJava2D(negativeBase + value, dataArea, location); } double barL0 = Math.min(translatedBase, translatedValue); double barLength = Math.max(Math.abs(translatedValue - translatedBase), getMinimumBarLength()); Rectangle2D bar = null; if (orientation == PlotOrientation.HORIZONTAL) { bar = new Rectangle2D.Double(barL0, barW0, barLength, state.getBarWidth()); } else { bar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(), barLength); } Paint itemPaint = getItemPaint(row, column); if (getGradientPaintTransformer() != null && itemPaint instanceof GradientPaint) { GradientPaint gp = (GradientPaint) itemPaint; itemPaint = getGradientPaintTransformer().transform(gp, bar); } g2.setPaint(itemPaint); g2.fill(bar); if (isDrawBarOutline() && state.getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) { g2.setStroke(getItemStroke(row, column)); g2.setPaint(getItemOutlinePaint(row, column)); g2.draw(bar); } CategoryItemLabelGenerator generator = getItemLabelGenerator(row, column); if (generator != null && isItemLabelVisible(row, column)) { drawItemLabel(g2, dataset, row, column, plot, generator, bar, (value < 0.0)); } // collect entity and tool tip information... if (state.getInfo() != null) { EntityCollection entities = state.getEntityCollection(); if (entities != null) { addItemEntity(entities, dataset, row, column, bar); } }
Number dataValue = dataset.getValue(row, column); if (dataValue == null) { return; } double value = dataValue.doubleValue(); double total = 0.0; // only needed if calculating percentages if (this.renderAsPercentages) { total = DataUtilities.calculateColumnTotal(dataset, column); value = value / total; } PlotOrientation orientation = plot.getOrientation(); double barW0 = domainAxis.getCategoryMiddle(column, getColumnCount(), dataArea, plot.getDomainAxisEdge()) - state.getBarWidth() / 2.0; double positiveBase = getBase(); double negativeBase = positiveBase; for (int i = 0; i < row; i++) { Number v = dataset.getValue(i, column); if (v != null) { double d = v.doubleValue(); if (this.renderAsPercentages) { d = d / total; } if (d > 0) { positiveBase = positiveBase + d; } else { negativeBase = negativeBase + d; } } } double translatedBase; double translatedValue; RectangleEdge location = plot.getRangeAxisEdge(); if (value >= 0.0) { translatedBase = rangeAxis.valueToJava2D(positiveBase, dataArea, location); translatedValue = rangeAxis.valueToJava2D(positiveBase + value, dataArea, location); } else { translatedBase = rangeAxis.valueToJava2D(negativeBase, dataArea, location); translatedValue = rangeAxis.valueToJava2D(negativeBase + value, dataArea, location); } double barL0 = Math.min(translatedBase, translatedValue); double barLength = Math.max(Math.abs(translatedValue - translatedBase), getMinimumBarLength()); Rectangle2D bar = null; if (orientation == PlotOrientation.HORIZONTAL) { bar = new Rectangle2D.Double(barL0, barW0, barLength, state.getBarWidth()); } else { bar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(), barLength); } if (pass == 0) { Paint itemPaint = getItemPaint(row, column); GradientPaintTransformer t = getGradientPaintTransformer(); if (t != null && itemPaint instanceof GradientPaint) { itemPaint = t.transform((GradientPaint) itemPaint, bar); } g2.setPaint(itemPaint); g2.fill(bar); if (isDrawBarOutline() && state.getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) { g2.setStroke(getItemOutlineStroke(row, column)); g2.setPaint(getItemOutlinePaint(row, column)); g2.draw(bar); } // add an item entity, if this information is being collected EntityCollection entities = state.getEntityCollection(); if (entities != null) { addItemEntity(entities, dataset, row, column, bar); } } else if (pass == 1) { CategoryItemLabelGenerator generator = getItemLabelGenerator(row, column); if (generator != null && isItemLabelVisible(row, column)) { drawItemLabel(g2, dataset, row, column, plot, generator, bar, (value < 0.0)); } }
Clone fragments detected by clone detection tool
File path: /jfreechart-1.0.10/src/org/jfree/chart/renderer/category/GroupedStackedBarRenderer.java File path: /jfreechart-1.0.10/src/org/jfree/chart/renderer/category/StackedBarRenderer.java
Method name: void drawItem(Graphics2D, CategoryItemRendererState, Rectangle2D, CategoryPlot, CategoryAxis, ValueAxis, CategoryDataset, int, int, int) Method name: void drawItem(Graphics2D, CategoryItemRendererState, Rectangle2D, CategoryPlot, CategoryAxis, ValueAxis, CategoryDataset, int, int, int)
Number of AST nodes: 48 Number of AST nodes: 53
1
Number dataValue = dataset.getValue(row, column);
1
Number dataValue = dataset.getValue(row, column);
2
        if (dataValue == null) {
2
        if (dataValue == null) {
3
            return;
3
            return;
4
        }
4
        }
5
        double value = dataValue.doubleValue();
5
        double value = dataValue.doubleValue();
6
        Comparable group = this.seriesToGroupMap.getGroup(
6
        
7
                dataset.getRowKey(row));
7
double total = 0.0;  // only needed if calculating percentages
8
        if (this.renderAsPercentages) {
9
            total = DataUtilities.calculateColumnTotal(dataset, column);
10
            value = value / total;
11
        }
8
        PlotOrientation orientation = plot.getOrientation();
12
        PlotOrientation orientation = plot.getOrientation();
9
        double barW0 = calculateBarW0(plot, orientation,
13
        double barW0 = domainAxis.getCategoryMiddle(column, getColumnCount(),
10
 dataArea, domainAxis,
14
                dataArea, plot.getDomainAxisEdge())
11
                state, row, column);
15
                - state.getBarWidth() / 2.0;
12
        double positiveBase = 0.0;
16
        double positiveBase = getBase();
13
        double negativeBase = 0.0;
17
        double negativeBase = positiveBase;
14
        for (int i = 0; i < row; i++) {
18
        for (int i = 0; i < row; i++) {
15
            if (group.equals(this.seriesToGroupMap.getGroup(
19
            
16
                    dataset.getRowKey(i)))
20
Number v = dataset.getValue(i, column);
17
) {
21
            if (v != null) {
18
                Number v = dataset.getValue(i, column);
22
                
19
                if (v != null
23
double d = v.doubleValue();
20
) {
24
                if (this.renderAsPercentages) {
21
                    double d = v.doubleValue();
25
                    d
22
    
26
 = d / total;
27
                }
23
                if (d > 0) {
28
                if (d > 0) {
24
                        positiveBase = positiveBase + d;
29
                    positiveBase = positiveBase + d;
25
                    }
30
                }
26
                    else {
31
                else {
27
                        negativeBase = negativeBase + d;
32
                    negativeBase = negativeBase + d;
28
                    }
29
                }
33
                }
30
            }
34
            }
31
        }
35
        }
32
        double translatedBase;
36
        double translatedBase;
33
        double translatedValue;
37
        double translatedValue;
34
        RectangleEdge location = plot.getRangeAxisEdge();
38
        RectangleEdge location = plot.getRangeAxisEdge();
35
        if (value > 0.0) {
39
        if (value >= 0.0) {
36
            translatedBase = rangeAxis.valueToJava2D(positiveBase, dataArea,
40
            translatedBase = rangeAxis.valueToJava2D(positiveBase, dataArea,
37
                    location);
41
                    location);
38
            translatedValue = rangeAxis.valueToJava2D(positiveBase + value,
42
            translatedValue = rangeAxis.valueToJava2D(positiveBase + value,
39
                    dataArea, location);
43
                    dataArea, location);
40
        }
44
        }
41
        else {
45
        else {
42
            translatedBase = rangeAxis.valueToJava2D(negativeBase, dataArea,
46
            translatedBase = rangeAxis.valueToJava2D(negativeBase, dataArea,
43
                    location);
47
                    location);
44
            translatedValue = rangeAxis.valueToJava2D(negativeBase + value,
48
            translatedValue = rangeAxis.valueToJava2D(negativeBase + value,
45
                    dataArea, location);
49
                    dataArea, location);
46
        }
50
        }
47
        double barL0 = Math.min(translatedBase, translatedValue);
51
        double barL0 = Math.min(translatedBase, translatedValue);
48
        double barLength = Math.max(Math.abs(translatedValue - translatedBase),
52
        double barLength = Math.max(Math.abs(translatedValue - translatedBase),
49
                getMinimumBarLength());
53
                getMinimumBarLength());
50
        Rectangle2D bar = null;
54
        Rectangle2D bar = null;
51
        if (orientation == PlotOrientation.HORIZONTAL) {
55
        if (orientation == PlotOrientation.HORIZONTAL) {
52
            bar = new Rectangle2D.Double(barL0, barW0, barLength,
56
            bar = new Rectangle2D.Double(barL0, barW0, barLength,
53
                    state.getBarWidth());
57
                    state.getBarWidth());
54
        }
58
        }
55
        else {
59
        else {
56
            bar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(),
60
            bar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(),
57
                    barLength);
61
                    barLength);
58
        }
62
        }
63
        if (pass == 0) {
59
        Paint itemPaint = getItemPaint(row, column);
64
            Paint itemPaint = getItemPaint(row, column);
60
        if (getGradientPaintTransformer() != null
65
            GradientPaintTransformer t = getGradientPaintTransformer();
61
                && itemPaint instanceof GradientPaint) {
66
            if (t != null && itemPaint instanceof GradientPaint) {
62
            GradientPaint gp = (GradientPaint) itemPaint;
67
                itemPaint = t.transform((GradientPaint) itemPaint, bar);
63
            itemPaint = getGradientPaintTransformer().transform(gp, bar);
68
            }
64
        }
69
     
65
        g2.setPaint(itemPaint);
70
       g2.setPaint(itemPaint);
66
        g2.fill(bar);
71
            g2.fill(bar);
67
        if (isDrawBarOutline()
72
            if (isDrawBarOutline()
68
                && state.getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) {
73
                    && state.getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) {
69
            g2.setStroke(getItemStroke(row, column));
74
                g2.setStroke(getItemOutlineStroke(row, column));
70
            g2.setPaint(getItemOutlinePaint(row, column));
75
                g2.setPaint(getItemOutlinePaint(row, column));
71
            g2.draw(bar);
76
                g2.draw(bar);
72
        }
77
            }
73
        CategoryItemLabelGenerator generator = getItemLabelGenerator(row,
78
        
74
                column);
79
    // add an item entity, if this information is being collected
80
            EntityCollection entities = state.getEntityCollection();
75
        if (generator != null && isItemLabelVisible(row, column)) {
81
            if (entities != null
76
            drawItemLabel(g2
82
) {
77
, dataset, row, column, plot, generator, bar,
83
                addItemEntity(entities, dataset, row, column, 
78
                    (value < 0.0));
84
bar);
85
            }
79
        }
86
        }
80
        // collect entity and tool tip information...
87
        else if (pass == 1) {
81
        if (state.getInfo() != null) {
88
        
82
            EntityCollection entities = state.getEntityCollection(
89
    CategoryItemLabelGenerator generator = getItemLabelGenerator(row,
83
);
90
                    column);
84
            if (entities != null) {
91
            if (generator != null
85
                addItemEntity(entities, dataset, row, column, bar
92
 && isItemLabelVisible(row, column)) {
93
                drawItemLabel(g2, dataset, row, column, plot, generator, bar,
86
);
94
                        (value < 0.0));
87
            }
95
            }
88
        }
96
        }
Summary
Number of common nesting structure subtrees2
Number of refactorable cases0
Number of non-refactorable cases2
Time elapsed for finding largest common nesting structure subtrees (ms)1.7
Clones locationClones are in different classes having the same super class
Number of node comparisons36
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements6
    Number of unmapped statements in the first code fragment0
    Number of unmapped statements in the second code fragment2
    Time elapsed for statement mapping (ms)35.5
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
    12
    Number v = dataset.getValue(i, column);
    14
    Number v = dataset.getValue(i, column);
    13
    if (v != null)
    15
    if (v != null)
    14
    double d = v.doubleValue();
    16
    double d = v.doubleValue();
                                                                    
    17
    if (this.renderAsPercentages)
                                    
    18
    d = d / total;
    Preondition Violations
    Unmatched statement d=d / total; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    18
    d = d / total;
    15
    if (d > 0)
    19
    if (d > 0)
    16
    positiveBase = positiveBase + d;
    20
    positiveBase = positiveBase + d;
    else
    else
    17
    negativeBase = negativeBase + d;
    21
    negativeBase = negativeBase + d;
    Precondition Violations (2)
    Row Violation
    1Unmatched statement d=d / total; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    2Clone fragment #1 returns variables positiveBase, negativeBase , while Clone fragment #2 returns variables d, positiveBase, negativeBase
  2. {Non-refactorable}
    Mapping Summary
    Number of mapped statements3
    Number of unmapped statements in the first code fragment0
    Number of unmapped statements in the second code fragment4
    Time elapsed for statement mapping (ms)108.5
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
                                                                                              
    37
    Paint itemPaint = getItemPaint(row, column);
    Preondition Violations
    Unmatched statement Paint itemPaint=getItemPaint(row,column); cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    37
    Paint itemPaint = getItemPaint(row, column);
                                                                                                                              
    38
    GradientPaintTransformer t = getGradientPaintTransformer();
                                                          
    41
    g2.setPaint(itemPaint);
                                      
    42
    g2.fill(bar);
    46
    EntityCollection entities = state.getEntityCollection();
    47
    EntityCollection entities = state.getEntityCollection();
    47
    if (entities != null)
    48
    if (entities != null)
    48
    addItemEntity(entities, dataset, row, column, bar);
    49
    addItemEntity(entities, dataset, row, column, bar);
    Precondition Violations (1)
    Row Violation
    1Unmatched statement Paint itemPaint=getItemPaint(row,column); cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted