EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() ); assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() ); SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass() ); OptimizerFactory.HiLoOptimizer optimizer = ( OptimizerFactory.HiLoOptimizer ) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[ increment + 1 ]; Session s = openSession(); s.beginTransaction(); for ( int i = 0; i < increment; i++ ) { entities[i] = new Entity( "" + ( i + 1 ) ); s.save( entities[i] ); assertEquals( 1, generator.getDatabaseStructure().getTimesAccessed() ); // initialization assertEquals( 1, optimizer.getLastSourceValue() ); // initialization assertEquals( i + 1, optimizer.getLastValue() ); assertEquals( increment + 1, optimizer.getHiValue() ); } // now force a "clock over" entities[ increment ] = new Entity( "" + increment ); s.save( entities[ increment ] ); assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization assertEquals( 2, optimizer.getLastSourceValue() ); // initialization assertEquals( increment + 1, optimizer.getLastValue() ); assertEquals( ( increment * 2 ) + 1, optimizer.getHiValue() ); s.getTransaction().commit(); s.beginTransaction(); for ( int i = 0; i < entities.length; i++ ) { assertEquals( i + 1, entities[i].getId().intValue() ); s.delete( entities[i] ); } s.getTransaction().commit(); s.close();
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() ); assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() ); SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass() ); OptimizerFactory.PooledOptimizer optimizer = ( OptimizerFactory.PooledOptimizer ) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[ increment + 1 ]; Session s = openSession(); s.beginTransaction(); for ( int i = 0; i < increment; i++ ) { entities[i] = new Entity( "" + ( i + 1 ) ); s.save( entities[i] ); assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization calls seq twice assertEquals( increment + 1, optimizer.getLastSourceValue() ); // initialization calls seq twice assertEquals( i + 1, optimizer.getLastValue() ); assertEquals( increment + 1, optimizer.getLastSourceValue() ); } // now force a "clock over" entities[ increment ] = new Entity( "" + increment ); s.save( entities[ increment ] ); assertEquals( 3, generator.getDatabaseStructure().getTimesAccessed() ); // initialization (2) + clock over assertEquals( ( increment * 2 ) + 1, optimizer.getLastSourceValue() ); // initialization (2) + clock over assertEquals( increment + 1, optimizer.getLastValue() ); s.getTransaction().commit(); s.beginTransaction(); for ( int i = 0; i < entities.length; i++ ) { assertEquals( i + 1, entities[i].getId().intValue() ); s.delete( entities[i] ); } s.getTransaction().commit(); s.close();
Clone fragments detected by clone detection tool
File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/idgen/enhanced/sequence/HiLoSequenceTest.java File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/idgen/enhanced/sequence/PooledSequenceTest.java
Method name: void testNormalBoundary() Method name: void testNormalBoundary()
Number of AST nodes: 29 Number of AST nodes: 28
1
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() );
1
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() );
2
		assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() );
2
		assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() );
3
		SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator();
3
		SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator();
4
		assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass() );
4
		assertClassAssignability( OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass() );
5
		OptimizerFactory.HiLoOptimizer optimizer = ( OptimizerFactory.HiLoOptimizer ) generator.getOptimizer();
5
		OptimizerFactory.PooledOptimizer optimizer = ( OptimizerFactory.PooledOptimizer ) generator.getOptimizer();
6
		int increment = optimizer.getIncrementSize();
6
		int increment = optimizer.getIncrementSize();
7
		Entity[] entities = new Entity[ increment + 1 ];
7
		Entity[] entities = new Entity[ increment + 1 ];
8
		Session s = openSession();
8
		Session s = openSession();
9
		s.beginTransaction();
9
		s.beginTransaction();
10
		for ( int i = 0; i < increment; i++ ) {
10
		for ( int i = 0; i < increment; i++ ) {
11
			entities[i] = new Entity( "" + ( i + 1 ) );
11
			entities[i] = new Entity( "" + ( i + 1 ) );
12
			s.save( entities[i] );
12
			s.save( entities[i] );
13
			assertEquals( 1, generator.getDatabaseStructure().getTimesAccessed() ); // initialization
13
			assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization calls seq twice
14
			assertEquals( 1, optimizer.getLastSourceValue() ); // initialization
14
			assertEquals( increment + 1, optimizer.getLastSourceValue() ); // initialization calls seq twice
15
			assertEquals( i + 1, optimizer.getLastValue() );
15
			assertEquals( i + 1, optimizer.getLastValue() );
16
			assertEquals( increment + 1, optimizer.getHiValue() );
16
			assertEquals( increment + 1, optimizer.getLastSourceValue() );
17
		}
17
		}
18
		// now force a "clock over"
18
		// now force a "clock over"
19
		entities[ increment ] = new Entity( "" + increment );
19
		entities[ increment ] = new Entity( "" + increment );
20
		s.save( entities[ increment ] );
20
		s.save( entities[ increment ] );
21
		assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization
21
		assertEquals( 3, generator.getDatabaseStructure().getTimesAccessed() ); // initialization (2) + clock over
22
		assertEquals( 2, optimizer.getLastSourceValue() ); // initialization
22
		assertEquals( ( increment * 2 ) + 1, optimizer.getLastSourceValue() ); // initialization
23
		assertEquals( increment + 1, optimizer.getLastValue() );
23
 (2) + clock over
24
		assertEquals( ( increment * 2 ) + 1, optimizer.getHiValue() );
24
		assertEquals( increment + 1, optimizer.getLastValue() );
25
		s.getTransaction().commit();
25
		s.getTransaction().commit();
26
		s.beginTransaction();
26
		s.beginTransaction();
27
		for ( int i = 0; i < entities.length; i++ ) {
27
		for ( int i = 0; i < entities.length; i++ ) {
28
			assertEquals( i + 1, entities[i].getId().intValue() );
28
			assertEquals( i + 1, entities[i].getId().intValue() );
29
			s.delete( entities[i] );
29
			s.delete( entities[i] );
30
		}
30
		}
31
		s.getTransaction().commit();
31
		s.getTransaction().commit();
32
		s.close();
32
		s.close();
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.7
Clones locationClones are in different classes having the same super class
Number of node comparisons298
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements28
    Number of unmapped statements in the first code fragment1
    Number of unmapped statements in the second code fragment0
    Time elapsed for statement mapping (ms)65.8
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
    1
    EntityPersister persister = sfi().getEntityPersister(Entity.class.getName());
    1
    EntityPersister persister = sfi().getEntityPersister(Entity.class.getName());
    2
    assertClassAssignability(SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass());
    2
    assertClassAssignability(SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass());
    3
    SequenceStyleGenerator generator = (SequenceStyleGenerator)persister.getIdentifierGenerator();
    3
    SequenceStyleGenerator generator = (SequenceStyleGenerator)persister.getIdentifierGenerator();
    4
    assertClassAssignability(OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass());
    4
    assertClassAssignability(OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass());
    4
    assertClassAssignability(OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass());
    Differences
    Expression1Expression2Difference
    OptimizerFactory.HiLoOptimizer.classOptimizerFactory.PooledOptimizer.classLITERAL_VALUE_MISMATCH
    4
    assertClassAssignability(OptimizerFactory.PooledOptimizer.class, generator.getOptimizer().getClass());
    5
    OptimizerFactory.HiLoOptimizer optimizer = (OptimizerFactory.HiLoOptimizer)generator.getOptimizer();
    5
    OptimizerFactory.HiLoOptimizer optimizer = (OptimizerFactory.HiLoOptimizer)generator.getOptimizer();
    5
    OptimizerFactory.PooledOptimizer optimizer = (OptimizerFactory.PooledOptimizer)generator.getOptimizer();
    Differences
    Expression1Expression2Difference
    HiLoOptimizerPooledOptimizerVARIABLE_NAME_MISMATCH
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    HiLoOptimizerPooledOptimizerVARIABLE_NAME_MISMATCH
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    Preondition Violations
    Expression (OptimizerFactory.HiLoOptimizer)generator.getOptimizer() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression (OptimizerFactory.PooledOptimizer)generator.getOptimizer() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    5
    OptimizerFactory.PooledOptimizer optimizer = (OptimizerFactory.PooledOptimizer)generator.getOptimizer();
    6
    int increment = optimizer.getIncrementSize();
    6
    int increment = optimizer.getIncrementSize();
    6
    int increment = optimizer.getIncrementSize();
    Differences
    Expression1Expression2Difference
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    6
    int increment = optimizer.getIncrementSize();
    7
    Entity[] entities = new Entity[increment + 1];
    7
    Entity[] entities = new Entity[increment + 1];
    8
    Session s = openSession();
    8
    Session s = openSession();
    9
    s.beginTransaction();
    9
    s.beginTransaction();
    10
    for (int i = 0; i < increment; i++)
    10
    for (int i = 0; i < increment; i++)
    11
    entities[i] = new Entity("" + (i + 1));
    11
    entities[i] = new Entity("" + (i + 1));
    12
    s.save(entities[i]);
    12
    s.save(entities[i]);
    13
    assertEquals(1, generator.getDatabaseStructure().getTimesAccessed());
    13
    assertEquals(1, generator.getDatabaseStructure().getTimesAccessed());
    13
    assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
    Differences
    Expression1Expression2Difference
    12LITERAL_VALUE_MISMATCH
    13
    assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
    14
    assertEquals(1, optimizer.getLastSourceValue());
    14
    assertEquals(1, optimizer.getLastSourceValue());
    14
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    Differences
    Expression1Expression2Difference
    1increment + 1TYPE_COMPATIBLE_REPLACEMENT
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    Preondition Violations
    Expression increment + 1 cannot be parameterized, because it has dependencies to/from statements that will be extracted
    14
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    Differences
    Expression1Expression2Difference
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    Preondition Violations
    Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getLastValue()
    15
    assertEquals(i + 1, optimizer.getLastValue());
    16
    assertEquals(increment + 1, optimizer.getHiValue());
    16
    assertEquals(increment + 1, optimizer.getHiValue());
    16
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    Differences
    Expression1Expression2Difference
    getHiValuegetLastSourceValueMETHOD_INVOCATION_NAME_MISMATCH
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    Preondition Violations
    Expression optimizer.getHiValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression optimizer.getLastSourceValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getHiValue()
    16
    assertEquals(increment + 1, optimizer.getLastSourceValue());
    17
    entities[increment] = new Entity("" + increment);
    17
    entities[increment] = new Entity("" + increment);
    18
    s.save(entities[increment]);
    18
    s.save(entities[increment]);
    19
    assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
    19
    assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
    19
    assertEquals(3, generator.getDatabaseStructure().getTimesAccessed());
    Differences
    Expression1Expression2Difference
    23LITERAL_VALUE_MISMATCH
    19
    assertEquals(3, generator.getDatabaseStructure().getTimesAccessed());
    20
    assertEquals(2, optimizer.getLastSourceValue());
    20
    assertEquals(2, optimizer.getLastSourceValue());
    Preondition Violations
    Unmatched statement assertEquals(2,optimizer.getLastSourceValue()); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                                          
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    Differences
    Expression1Expression2Difference
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    Preondition Violations
    Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getLastValue()
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    22
    assertEquals((increment * 2) + 1, optimizer.getHiValue());
    22
    assertEquals((increment * 2) + 1, optimizer.getHiValue());
    20
    assertEquals((increment * 2) + 1, optimizer.getLastSourceValue());
    Differences
    Expression1Expression2Difference
    getHiValuegetLastSourceValueMETHOD_INVOCATION_NAME_MISMATCH
    org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizerorg.hibernate.id.enhanced.OptimizerFactory.PooledOptimizerSUBCLASS_TYPE_MISMATCH
    Preondition Violations
    Expression optimizer.getHiValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression optimizer.getLastSourceValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getHiValue()
    20
    assertEquals((increment * 2) + 1, optimizer.getLastSourceValue());
    23
    s.getTransaction().commit();
    22
    s.getTransaction().commit();
    24
    s.beginTransaction();
    23
    s.beginTransaction();
    25
    for (int i = 0; i < entities.length; i++)
    24
    for (int i = 0; i < entities.length; i++)
    26
    assertEquals(i + 1, entities[i].getId().intValue());
    25
    assertEquals(i + 1, entities[i].getId().intValue());
    27
    s.delete(entities[i]);
    26
    s.delete(entities[i]);
    28
    s.getTransaction().commit();
    27
    s.getTransaction().commit();
    29
    s.close();
    28
    s.close();
    Precondition Violations (13)
    Row Violation
    1Expression (OptimizerFactory.HiLoOptimizer)generator.getOptimizer() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    2Expression (OptimizerFactory.PooledOptimizer)generator.getOptimizer() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    3Expression increment + 1 cannot be parameterized, because it has dependencies to/from statements that will be extracted
    4Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getLastValue()
    5Expression optimizer.getHiValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    6Expression optimizer.getLastSourceValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    7Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getHiValue()
    8Unmatched statement assertEquals(2,optimizer.getLastSourceValue()); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    9Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getLastValue()
    10Expression optimizer.getHiValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    11Expression optimizer.getLastSourceValue() cannot be parameterized, because it has dependencies to/from statements that will be extracted
    12Expression optimizer cannot be unified with expression optimizer , because common superclass org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport does not declare member(s) public long getHiValue()
    13Clone fragment #1 returns variables optimizer , while Clone fragment #2 returns variables