Skip to content

Commit c97cf47

Browse files
cigalymbladel
authored andcommitted
HHH-18933 Hierarchically ordering classes before returning from method in equivalent way as in main (7.0) branch
1 parent a1cbcb1 commit c97cf47

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/annotations/AnnotationMetadataSourceProcessorImpl.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,28 @@ private List<XClass> orderAndFillHierarchy(List<XClass> classes) {
304304
}
305305
}
306306
}
307-
return new ArrayList<>( orderedClasses );
307+
308+
// order the hierarchy
309+
ArrayList<XClass> workingCopy = new ArrayList<>( orderedClasses );
310+
List<XClass> newList = new ArrayList<>( orderedClasses.size() );
311+
while ( !workingCopy.isEmpty() ) {
312+
XClass clazz = workingCopy.get( 0 );
313+
orderHierarchy( workingCopy, newList, orderedClasses, clazz );
314+
}
315+
return newList;
316+
}
317+
318+
private void orderHierarchy(List<XClass> copy, List<XClass> newList, LinkedHashSet<XClass> original, XClass clazz) {
319+
if ( clazz != null && !Object.class.getName().equals( clazz.getName() ) ) {
320+
//process superclass first
321+
orderHierarchy( copy, newList, original, clazz.getSuperclass() );
322+
if ( original.contains( clazz ) ) {
323+
if ( !newList.contains( clazz ) ) {
324+
newList.add( clazz );
325+
}
326+
copy.remove( clazz );
327+
}
328+
}
308329
}
309330

310331
@Override

0 commit comments

Comments
 (0)