@Override protected void updateListeners(Object oldOwner, Object newOwner) { Set<Object[]> l = new HashSet<Object[]>(); if (newOwner != null) { /* Don't listen to all property names * We only need to listen to its "type", and "remove". */ l.add(new Object[] {newOwner, new String[] {"type", "remove"}}); // register for events from the type Object type = Model.getFacade().getType(newOwner); if (Model.getFacade().isAClassifier(type)) { if (Model.getFacade().isAClassifierInState(type)) { Object classifier = Model.getFacade().getType(type); l.add(new Object[] {classifier, "name"}); l.add(new Object[] {type, "inState"}); Collection states = Model.getFacade().getInStates(type); Iterator i = states.iterator(); while (i.hasNext()) { l.add(new Object[] {i.next(), "name"}); } } else { l.add(new Object[] {type, "name"}); } } } updateElementListeners(l); }
@Override protected void updateListeners(Object oldOwner, Object newOwner) { if (isCompartmentVisible(Model.getMetaTypes().getAttribute())) { Set<Object[]> listeners = new HashSet<Object[]>(); // Collect the set of model elements that we want to listen to if (newOwner != null) { // TODO: Because we get called on each and every change event, when // the model is in a state of flux, we'll often get an // InvalidElementException before we finish this collection. The // only saving grace is that we're called SO many times that on the // last time, things should be stable again and we'll get a good set // of elements for the final update. We need a better mechanism. // add the listeners to the newOwner listeners.add(new Object[] {newOwner, null}); // and its stereotypes // TODO: Aren't stereotypes handled elsewhere? for (Object stereotype : Model.getFacade().getStereotypes(newOwner)) { listeners.add(new Object[] {stereotype, null}); } // and its features for (Object feat : Model.getFacade().getFeatures(newOwner)) { listeners.add(new Object[] {feat, null}); // and the stereotypes of its features for (Object stereotype : Model.getFacade().getStereotypes(feat)) { listeners.add(new Object[] {stereotype, null}); } // and the parameter of its operations if (Model.getFacade().isAOperation(feat)) { for (Object param : Model.getFacade().getParameters(feat)) { listeners.add(new Object[] {param, null}); } } } } // Update the listeners to match the desired set using the minimal // update facility updateElementListeners(listeners); } else { super.updateListeners(oldOwner, newOwner); } }
Clone fragments detected by clone detection tool
File path: /ArgoUML-0.34-src/argouml/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java File path: /ArgoUML-0.34-src/argouml/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java
Method name: void updateListeners(Object, Object) Method name: void updateListeners(Object, Object)
Number of AST nodes: 2 Number of AST nodes: 2
1
@Override
1
@Override
2
    protected void updateListeners(Object oldOwner, Object newOwner) {
2
    protected void updateListeners(Object oldOwner, Object newOwner) {
3
        Set<Object[]> l = new HashSet<Object[]>();
3
       
4
4
        if (isCompartmentVisible(Model.getMetaTypes().getAttribute())) {
5
        if (newOwner != null) {
5
            Set<Object[]> listeners = new HashSet<Object[]>();
6
            /* Don't listen to all property names
6
7
             * We only need to listen to its "type", and "remove". */
7
            // Collect the set of model elements that we want to listen to
8
            l.add(new Object[] {newOwner, new String[] {"type", "remove"}});
8
            if (newOwner != null) {
9
            // register for events from the type
9
                // TODO: Because we get called on each and every change event, when
10
            Object type = Model.getFacade().getType(newOwner);
10
                // the model is in a state of flux, we'll often get an
11
            if (Model.getFacade().isAClassifier(type)) {
11
                // InvalidElementException before we finish this collection. The
12
                if (Model.getFacade().isAClassifierInState(type)) {
12
                // only saving grace is that we're called SO many times that on the
13
                    Object classifier = Model.getFacade().getType(type);
13
                // last time, things should be stable again and we'll get a good set
14
                    l.add(new Object[] {classifier, "name"});
14
                // of elements for the final update.  We need a better mechanism.
15
                    l.add(new Object[] {type, "inState"});
15
                
16
                    Collection states = Model.getFacade().getInStates(type);
16
                // add the listeners to the newOwner
17
                    Iterator i = states.iterator();
17
                listeners.add(new Object[] {newOwner, null});
18
                    while (i.hasNext()) {
18
                
19
                        l.add(new Object[] {i.next(), "name"});
19
                // and its stereotypes
20
                    }
20
                // TODO: Aren't stereotypes handled elsewhere?
21
                } else {
21
                for (Object stereotype 
22
                    l.add(new Object[] {type, "name"});
22
                        : Model.getFacade().getStereotypes(newOwner)) {
23
                }
23
                    listeners.add(new Object[] {stereotype, null});
24
            }
24
                }
25
        }
25
26
26
                // and its features
27
        updateElementListeners(l);
27
                for (Object feat : Model.getFacade().getFeatures(newOwner)) {
28
    }
28
                    listeners.add(new Object[] {feat, null});
29
                    // and the stereotypes of its features
30
                    for (Object stereotype 
31
                            : Model.getFacade().getStereotypes(feat)) {
32
                        listeners.add(new Object[] {stereotype, null});
33
                    }
34
                    // and the parameter of its operations
35
                    if (Model.getFacade().isAOperation(feat)) {
36
                        for (Object param : Model.getFacade().getParameters(feat)) {
37
                            listeners.add(new Object[] {param, null});
38
                        }
39
                    }
40
                }
41
            }
42
            
43
            // Update the listeners to match the desired set using the minimal
44
            // update facility
45
            updateElementListeners(listeners);
46
        } else {
47
            super.updateListeners(oldOwner, newOwner);
48
        }
49
    }
  1. {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 fragment0
    Time elapsed for statement mapping (ms)0.0
    Similarity Score0.600
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
    12
    while (i.hasNext())
    12
    while (i.hasNext())
    12
    for (Object param : Model.getFacade().getParameters(feat))
    Differences
    Expression1Expression2Difference
    statesModel.getFacade().getParameters(feat)TYPE_COMPATIBLE_REPLACEMENT
    12
    for (Object param : Model.getFacade().getParameters(feat))
    13
    l.add(new Object[] {i.next(), "name"});
    13
    l.add(new Object[] {i.next(), "name"});
    13
    listeners.add(new Object[] {param, null});
    Differences
    Expression1Expression2Difference
    i.next()paramTYPE_COMPATIBLE_REPLACEMENT
    "name"nullTYPE_COMPATIBLE_REPLACEMENT
    llistenersVARIABLE_NAME_MISMATCH
    Preondition Violations
    Expression param cannot be parameterized, because it has dependencies to/from statements that will be extracted
    13
    listeners.add(new Object[] {param, null});
    Precondition Violations (1)
    Row Violation
    1Expression param cannot be parameterized, because it has dependencies to/from statements that will be extracted