144-2-4

if (loginSuceeded) { if (changeRemoteDir(remoteTmpDir)) { FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp); ds.setBasedir(new File(getProject().getBaseDir(), "tmp")); ds.setIncludes(new String[] {"ALPHA/"}); ds.setCaseSensitive(false); ds.scan(); compareFiles(ds, new String[] {"alpha/beta/beta.xml", "alpha/beta/gamma/gamma.xml"}, new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"}); } }
if (loginSuceeded) { if (changeRemoteDir(remoteTmpDir)) { FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp); ds.setBasedir(new File(getProject().getBaseDir(), "tmp")); ds.scan(); compareFiles(ds, new String[] {"alpha/beta/beta.xml", "alpha/beta/gamma/gamma.xml"}, new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"}); } }

Clone fragments detected by clone detection tool
File path: /apache-ant-1.7.0/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java |  | File path: /apache-ant-1.7.0/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
Method name: `void test2ButCaseInsensitive()` |  | Method name: `void test3()`
Number of AST nodes: 8 |  | Number of AST nodes: 6

1

    if (loginSuceeded) {↵

1

    if (loginSuceeded) {↵

2

                if (changeRemoteDir(remoteTmpDir)) {↵

2

                if (changeRemoteDir(remoteTmpDir)) {↵

3

                    FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);↵

3

                    FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);↵

4

                    ds.setBasedir(new File(getProject().getBaseDir(), "tmp"));↵

4

                    ds.setBasedir(new File(getProject().getBaseDir(), "tmp"));↵

5

                    ds.setIncludes(new String[] {"ALPHA/"});↵

6

                    ds.setCaseSensitive(false);↵

7

                    ds.scan();↵

5

                    ds.scan();↵

8

                    compareFiles(ds, new String[] {"alpha/beta/beta.xml",↵

6

                    compareFiles(ds, new String[] {"alpha/beta/beta.xml",↵

9

                                                   "alpha/beta/gamma/gamma.xml"},↵

7

                                                   "alpha/beta/gamma/gamma.xml"},↵

10

                        new String[] {"alpha", "alpha/beta",↵

8

                        new String[] {"alpha", "alpha/beta",↵

11

     "alpha/beta/gamma"});↵

9

                                      "alpha/beta/gamma"});↵

12

                }↵

10

                }↵

13

            }

11

            }

See real code fragment |  | See real code fragment

Summary
Number of common nesting structure subtrees | 1
Number of refactorable cases | 0
Number of non-refactorable cases | 1
Time elapsed for finding largest common nesting structure subtrees (ms) | 0.1
Clones location | Clones are declared in the same class
Number of node comparisons | 36

1. {Non-refactorable}

   Mapping Summary
   Number of mapped statements | 6
   Number of unmapped statements in the first code fragment | 2
   Number of unmapped statements in the second code fragment | 0
   Time elapsed for statement mapping (ms) | 2.3
   Clone type | Type 3

   Mapped Statements
   ID | Statement |  | ID | Statement
   --- | --- | --- | --- | ---

   1

       if (loginSuceeded)

   1

       if (loginSuceeded)

   2

       if (changeRemoteDir(remoteTmpDir))

   2

       if (changeRemoteDir(remoteTmpDir))

   3

       FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);

   3

       FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);

   4

       ds.setBasedir(new File(getProject().getBaseDir(), "tmp"));

   4

       ds.setBasedir(new File(getProject().getBaseDir(), "tmp"));

   5

       ds.setIncludes(new String[] {"ALPHA/"});

   5 | ds.setIncludes(new String[] {"ALPHA/"});

   Preondition Violations
   Unmatched statement ds.setIncludes(new String[]{"ALPHA/"}); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted

   6

       ds.setCaseSensitive(false);

   6 | ds.setCaseSensitive(false);

   Preondition Violations
   Unmatched statement ds.setCaseSensitive(false); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted

   7

       ds.scan();

   5

       ds.scan();

   8

       compareFiles(ds, new String[] {"alpha/beta/beta.xml", "alpha/beta/gamma/gamma.xml"}, new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});

   6

       compareFiles(ds, new String[] {"alpha/beta/beta.xml", "alpha/beta/gamma/gamma.xml"}, new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});

   Precondition Violations (3)
   Row | Violation
   --- | ---
   1 | Unmatched statement ds.setIncludes(new String[]{"ALPHA/"}); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
   2 | Unmatched statement ds.setCaseSensitive(false); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
   3 | Clone fragment #1 returns variables ds , while Clone fragment #2 returns variables