11package com .reveal .codetimemachine ;
22
3- import com .github .mauricioaniche .ck .CK ;
4- import com .github .mauricioaniche .ck .CKNumber ;
5- import com .github .mauricioaniche .ck .CKReport ;
6- import com .google .common .io .Files ;
3+
74import com .intellij .analysis .AnalysisScope ;
85import com .intellij .openapi .actionSystem .*;
96import com .intellij .openapi .fileChooser .FileChooser ;
2118import com .intellij .openapi .vcs .history .VcsHistorySession ;
2219import com .intellij .openapi .vfs .LocalFileSystem ;
2320import com .intellij .openapi .vfs .VirtualFile ;
24- import com .intellij .openapi .wm .ToolWindow ;
2521import com .intellij .psi .*;
26- import com .intellij .ui .content .Content ;
27- import com .reveal .metrics .MaxCKNumber ;
2822
29- import java .io .BufferedWriter ;
3023import java .io .File ;
31- import java .io .FileWriter ;
3224import java .io .IOException ;
33- import java .lang .reflect .Array ;
3425import java .util .*;
3526
27+
28+
3629/**
3730 * Created by emadpres on 11/23/16.
31+ * Some notes about plugin.xml: https://intellij-support.jetbrains.com/hc/en-us/community/posts/206761495-How-to-add-items-to-a-tab-context-menu-
3832 */
3933public class CodeTimeMachineAction extends AnAction
4034{
@@ -55,24 +49,22 @@ public void actionPerformed(AnActionEvent e)
5549 Project project = e .getProject ();
5650
5751
58- VirtualFile [] chosenVirtualFiles = selectVirtualFiles_auto (e );
59- if (chosenVirtualFiles [0 ] == null )
60- chosenVirtualFiles = selectVirtualFiles_manually (project );
52+ ArrayList <VirtualFile > chosenJavaVirtualFiles = selectJavaVirtualFiles_auto (e );
6153
62- if (chosenVirtualFiles == null || chosenVirtualFiles .length ==0 )
63- return ;
6454
6555 VcsHistoryProvider myGitVcsHistoryProvider = getGitHistoryProvider (project );
56+ if (myGitVcsHistoryProvider == null )
57+ return ; // It means project doesn't have "Git".
6658
67- ArrayList <CommitWrapper >[] subjectAndTestClassCommitsList = new ArrayList [chosenVirtualFiles . length ];
59+ ArrayList <CommitWrapper >[] javaFilesCommitsList = new ArrayList [chosenJavaVirtualFiles . size () ];
6860 CommitWrapper aCommitWrapper = null ;
69- for (int i =0 ; i < chosenVirtualFiles . length ; i ++)
61+ for (int i =0 ; i < chosenJavaVirtualFiles . size () ; i ++)
7062 {
7163
72- List <VcsFileRevision > _fileRevisionsLists = getRevisionListForSubjectAndTestClass (myGitVcsHistoryProvider , chosenVirtualFiles [ i ] );
64+ List <VcsFileRevision > _fileRevisionsLists = getRevisionListForSubjectAndTestClass (myGitVcsHistoryProvider , chosenJavaVirtualFiles . get ( i ) );
7365
7466 int realCommitsSize = _fileRevisionsLists .size ();
75- subjectAndTestClassCommitsList [i ] = new ArrayList <>(realCommitsSize + 1 );
67+ javaFilesCommitsList [i ] = new ArrayList <>(realCommitsSize + 1 );
7668
7769
7870 int cIndex = 0 ;
@@ -81,7 +73,7 @@ public void actionPerformed(AnActionEvent e)
8173 String currentContent = "" ;
8274 try
8375 {
84- byte [] currentBytes = chosenVirtualFiles [ i ] .contentsToByteArray ();
76+ byte [] currentBytes = chosenJavaVirtualFiles . get ( i ) .contentsToByteArray ();
8577 currentContent = new String (currentBytes );
8678 } catch (IOException e1 )
8779 {
@@ -96,20 +88,20 @@ public void actionPerformed(AnActionEvent e)
9688 {
9789 final String UNCOMMITED_CHANGE_TEXT = "Uncommitted Changes" ;
9890 aCommitWrapper = new CommitWrapper (currentContent , UNCOMMITED_CHANGE_TEXT , new Date (), UNCOMMITED_CHANGE_TEXT , -1 );
99- subjectAndTestClassCommitsList [i ].add (0 , aCommitWrapper );
91+ javaFilesCommitsList [i ].add (0 , aCommitWrapper );
10092 }
10193
10294 ///// Other Real
10395 for (int j = 0 ; j < realCommitsSize ; j ++)
10496 {
10597 aCommitWrapper = new CommitWrapper (_fileRevisionsLists .get (j ), -1 );
106- subjectAndTestClassCommitsList [i ].add (aCommitWrapper );
98+ javaFilesCommitsList [i ].add (aCommitWrapper );
10799 }
108100
109101
110102 /// Sort by Date all commits
111103 // index 0 will contain most recent commit
112- Collections .sort (subjectAndTestClassCommitsList [i ], new Comparator <CommitWrapper >()
104+ Collections .sort (javaFilesCommitsList [i ], new Comparator <CommitWrapper >()
113105 {
114106 @ Override
115107 public int compare (CommitWrapper o1 , CommitWrapper o2 )
@@ -120,13 +112,13 @@ public int compare(CommitWrapper o1, CommitWrapper o2)
120112
121113
122114 // Assign cIndex
123- for (int j = 0 ; j < subjectAndTestClassCommitsList [i ].size (); j ++)
115+ for (int j = 0 ; j < javaFilesCommitsList [i ].size (); j ++)
124116 {
125- subjectAndTestClassCommitsList [i ].get (j ).cIndex = j ;
117+ javaFilesCommitsList [i ].get (j ).cIndex = j ;
126118 }
127119
128- String contentName = chosenVirtualFiles [ i ] .getName ();
129- TTMSingleFileView mainWindow = new TTMSingleFileView (project , chosenVirtualFiles [ i ], subjectAndTestClassCommitsList [i ]);
120+ String contentName = chosenJavaVirtualFiles . get ( i ) .getName ();
121+ TTMSingleFileView mainWindow = new TTMSingleFileView (project , chosenJavaVirtualFiles . get ( i ), javaFilesCommitsList [i ]);
130122 getCodeTimeMachine (project ).addNewContent (mainWindow , contentName );
131123 }
132124 }
@@ -223,15 +215,36 @@ public VirtualFile[] selectVirtualFiles_manually(Project project)
223215 return chosenVirtualFiles ;
224216 }
225217
226- private VirtualFile [] selectVirtualFiles_auto (AnActionEvent e )
218+ private ArrayList < VirtualFile > selectJavaVirtualFiles_auto (AnActionEvent e )
227219 {
228- VirtualFile [] chosenVirtualFiles = new VirtualFile [1 ];
220+ // If you run this action from Tools menu, and some file is open in Editor, the file will be retrieved.
221+ // If you run this action from ProjectView by right-clicking on some files, all selected files will be retrieved.
222+ // otherwise (i.e. right clicking on some empty space in Project View, or when there is no open file in Editor) it is null.
223+ VirtualFile [] files = e .getData (LangDataKeys .VIRTUAL_FILE_ARRAY );
229224
230- if (e .getData (LangDataKeys .PSI_FILE ) != null )
231- chosenVirtualFiles [0 ] = e .getData (LangDataKeys .PSI_FILE ).getVirtualFile ();
232- else
233- chosenVirtualFiles [0 ] = null ;
225+ ArrayList <VirtualFile > onlyJavaFiles = new ArrayList <>();
234226
235- return chosenVirtualFiles ;
227+ if (files ==null )
228+ return onlyJavaFiles ;
229+
230+ for (int i =0 ; i <files .length ; i ++)
231+ {
232+ if (files [i ].getFileType ().getDefaultExtension () == "java" )
233+ onlyJavaFiles .add (files [i ]);
234+ }
235+
236+ return onlyJavaFiles ;
237+ }
238+
239+ @ Override
240+ public void update (AnActionEvent e )
241+ {
242+ ArrayList <VirtualFile > files = selectJavaVirtualFiles_auto (e );
243+
244+
245+ if (files .size ()==0 )
246+ e .getPresentation ().setEnabled (false );
247+ else
248+ e .getPresentation ().setEnabled (true );
236249 }
237250}
0 commit comments