11package ai .devchat .devchat .handler ;
22
3- import ai .devchat .common .Log ;
43import ai .devchat .devchat .ActionHandler ;
54import ai .devchat .devchat .DevChatActionHandler ;
65import com .alibaba .fastjson .JSONObject ;
7- import com .intellij .psi .PsiFileFactory ;
6+ import com .intellij .diff .DiffContentFactory ;
7+ import com .intellij .diff .DiffManager ;
8+ import com .intellij .diff .requests .SimpleDiffRequest ;
9+ import com .intellij .openapi .application .ApplicationManager ;
10+ import com .intellij .openapi .editor .Document ;
11+ import com .intellij .openapi .editor .Editor ;
12+ import com .intellij .openapi .editor .SelectionModel ;
13+ import com .intellij .openapi .fileEditor .FileDocumentManager ;
14+ import com .intellij .openapi .fileEditor .FileEditorManager ;
15+ import com .intellij .openapi .fileTypes .FileType ;
16+ import com .intellij .openapi .project .Project ;
17+ import com .intellij .openapi .vfs .VirtualFile ;
818
919public class ViewDiffRequestHandler implements ActionHandler {
1020 private JSONObject metadata ;
@@ -15,14 +25,42 @@ public ViewDiffRequestHandler(DevChatActionHandler devChatActionHandler) {
1525 this .devChatActionHandler = devChatActionHandler ;
1626 }
1727
28+
1829 @ Override
1930 public void executeAction () {
20- Log .info ("Handling view diff request" );
21- String callbackFunc = metadata .getString ("callback" );
2231 String diffContent = payload .getString ("content" );
32+ Project project = devChatActionHandler .getProject ();
33+
34+ ApplicationManager .getApplication ().invokeLater (() -> {
35+ Editor editor = FileEditorManager .getInstance (project ).getSelectedTextEditor ();
36+ if (editor == null ) {
37+ // Handle the case when no editor is opened
38+ return ;
39+ }
40+ Document document = editor .getDocument ();
41+ VirtualFile file = FileDocumentManager .getInstance ().getFile (document );
42+ if (file == null ) {
43+ // Handle the case when no file corresponds to the document
44+ return ;
45+ }
46+
47+ FileType fileType = file .getFileType ();
48+ SelectionModel selectionModel = editor .getSelectionModel ();
49+ String localContent = selectionModel .hasSelection ()
50+ ? selectionModel .getSelectedText ()
51+ : document .getText ();
52+
53+ DiffContentFactory contentFactory = DiffContentFactory .getInstance ();
54+ SimpleDiffRequest diffRequest = new SimpleDiffRequest (
55+ "Code Diff" ,
56+ contentFactory .create (localContent , fileType ),
57+ contentFactory .create (diffContent , fileType ),
58+ "Current Code" ,
59+ "New Code"
60+ );
2361
24- PsiFileFactory psiFileFactory = PsiFileFactory .getInstance (devChatActionHandler . getProject () );
25- // PsiFile psiFile = psiFileFactory.createFileFromText("yourFileName.java", , diffContent );
62+ DiffManager .getInstance (). showDiff ( project , diffRequest );
63+ } );
2664 }
2765
2866 @ Override
0 commit comments