11package com .reallyliri .plugins .interfacepairing ;
22
3+ import com .google .common .collect .Streams ;
4+ import com .intellij .ide .projectView .PresentationData ;
35import com .intellij .ide .util .treeView .AbstractTreeNode ;
46import com .intellij .openapi .diagnostic .Logger ;
57import com .intellij .openapi .project .Project ;
8+ import com .intellij .openapi .vfs .VirtualFile ;
69import com .jetbrains .rider .model .RdProjectFileDescriptor ;
7- import com .jetbrains .rider .projectView .nodes .ProjectModelNode ;
810import com .jetbrains .rider .projectView .views .solutionExplorer .SolutionExplorerCustomization ;
11+ import com .jetbrains .rider .projectView .workspace .ProjectModelEntity ;
912import java .awt .EventQueue ;
10- import java .util . ArrayList ;
13+ import java .lang . reflect . Field ;
1114import java .util .List ;
1215import java .util .Map ;
1316import java .util .Set ;
1417import java .util .stream .Collectors ;
18+ import kotlin .sequences .Sequence ;
1519import org .jetbrains .annotations .NotNull ;
1620
1721public class InterfacePairingSolutionExplorerCustomization extends SolutionExplorerCustomization {
@@ -21,20 +25,36 @@ public InterfacePairingSolutionExplorerCustomization(@NotNull Project project) {
2125 super (project );
2226 }
2327
28+ @ Override
29+ public int compareNodes (@ NotNull ProjectModelEntity x , @ NotNull ProjectModelEntity y ) {
30+ return -1 * super .compareNodes (x , y );
31+ }
32+
33+ @ Override
34+ public void updateNode (@ NotNull PresentationData presentation , @ NotNull VirtualFile virtualFile ) {
35+ super .updateNode (presentation , virtualFile );
36+ }
37+
38+ @ Override
39+ public void updateNode (@ NotNull PresentationData presentation , @ NotNull ProjectModelEntity entity ) {
40+ super .updateNode (presentation , entity );
41+ }
42+
2443 @ NotNull
2544 @ Override
26- public List <AbstractTreeNode <?>> getChildren (@ NotNull ProjectModelNode parentNode ) {
45+ public List <AbstractTreeNode <?>> getChildren (@ NotNull ProjectModelEntity entity ) {
2746 if (!EventQueue .isDispatchThread ()) {
28- setInterfacePairingSortKeys (parentNode );
47+ setInterfacePairingSortKeys (entity );
2948 }
30- return super .getChildren (parentNode ); // always returns empty, but its fine
49+ return super .getChildren (entity ); // always returns empty, but its fine
3150 }
3251
33- private void setInterfacePairingSortKeys (ProjectModelNode parentNode ) {
34- ArrayList <ProjectModelNode > children = parentNode .getChildren (true , false );
35- Map <@ NotNull String , ProjectModelNode > fileNodesByName = children .stream ()
36- .filter (node -> node .getDescriptor () instanceof RdProjectFileDescriptor )
37- .collect (Collectors .toMap (ProjectModelNode ::getName , node -> node , (node1 , node2 ) -> node1 ));
52+ private void setInterfacePairingSortKeys (ProjectModelEntity entity ) {
53+ Sequence <ProjectModelEntity > children = entity .getChildrenEntities ();
54+ Map <@ NotNull String , ProjectModelEntity > fileNodesByName =
55+ Streams .stream (children .iterator ())
56+ .filter (node -> node .getDescriptor () instanceof RdProjectFileDescriptor )
57+ .collect (Collectors .toMap (ProjectModelEntity ::getName , node -> node , (node1 , node2 ) -> node1 ));
3858
3959 if (fileNodesByName .isEmpty ()) {
4060 return ;
@@ -58,13 +78,13 @@ private void setInterfacePairingSortKeys(ProjectModelNode parentNode) {
5878
5979 int sortKey = 0 ;
6080 for (String currentNodeName : orderedNonInterfaceNames ) {
61- ProjectModelNode currentNode = fileNodesByName .get (currentNodeName );
81+ ProjectModelEntity currentNode = fileNodesByName .get (currentNodeName );
6282 setNodeSortKey (currentNode , sortKey );
6383 sortKey ++;
6484
6585 String potentialInterfaceName = String .format ("I%s" , currentNodeName );
6686 if (interfacesSet .contains (potentialInterfaceName )) {
67- ProjectModelNode interfaceNode = fileNodesByName .get (potentialInterfaceName );
87+ ProjectModelEntity interfaceNode = fileNodesByName .get (potentialInterfaceName );
6888 setNodeSortKey (interfaceNode , sortKey );
6989 sortKey ++;
7090 }
@@ -73,20 +93,18 @@ private void setInterfacePairingSortKeys(ProjectModelNode parentNode) {
7393 assert sortKey == fileNodesByName .size ();
7494 }
7595
76- private void setNodeSortKey (ProjectModelNode node , int sortKey ) {
96+ private void setNodeSortKey (ProjectModelEntity node , int sortKey ) {
7797 RdProjectFileDescriptor fileDescriptor = (RdProjectFileDescriptor ) node .getDescriptor ();
7898 if (fileDescriptor .getSortKey () != null && fileDescriptor .getSortKey () == sortKey ) {
7999 return ;
80100 }
81- RdProjectFileDescriptor newDescriptor = new RdProjectFileDescriptor (
82- fileDescriptor .isInternal (),
83- fileDescriptor .isLinked (),
84- fileDescriptor .getBuildAction (),
85- sortKey ,
86- fileDescriptor .getUserData (),
87- fileDescriptor .getName (),
88- fileDescriptor .getLocation ()
89- );
90- node .updateData (newDescriptor , node .getParent ());
101+
102+ try {
103+ Field sortKeyField = fileDescriptor .getClass ().getDeclaredField ("sortKey" );
104+ sortKeyField .setAccessible (true );
105+ sortKeyField .set (fileDescriptor , sortKey );
106+ } catch (NoSuchFieldException | IllegalAccessException e ) {
107+ e .printStackTrace ();
108+ }
91109 }
92110}
0 commit comments