Skip to content

Commit 399b174

Browse files
authored
Merge pull request #16 from DeepCodeAI/dev
1.2.11
2 parents e97393a + cf06a77 commit 399b174

21 files changed

+210
-86
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## [1.2.11] - 2019-09-16
2+
1.2.11 - Fix bug with IndexOutOfBound Exception for wrongly positioned suggestion/marker;
3+
- Fix bug with multiple analyses processes on project opening.
4+
5+
## [1.2.10] - 2019-09-14
6+
- Update modes added:
7+
* Interactive (on any source file change);
8+
* On Save (when source file saved on disk);
9+
* On Demand (only if explicitly invoked).
10+
111
## [1.2.9] - 2019-09-08
212
- Status Bar widget with summary info added;
313
- .dcignore parsing fixed.

DeveloperGuide.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ See below correspondent `java-client` version requirements:
1919
| 1.2.5 | 2.0.8 |
2020
| 1.2.7 | 2.0.12 |
2121
| 1.2.8 | 2.0.14 |
22+
| 1.2.10 | 2.0.16 |
23+
| 1.2.11 | 2.0.17 |
2224

2325
**Important note: For backward compatibility build MUST be run against Intellij Idea 2019.2 instance!**
2426
- Run `source gradlew buildPlugin`

build.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77

88
//group 'org.example'
99

10-
version '1.2.9'
10+
version '1.2.11'
1111
sourceCompatibility = 1.8
1212

1313
repositories {
@@ -33,6 +33,11 @@ patchPluginXml {
3333
untilBuild 203
3434

3535
changeNotes """
36+
1.2.11 - Fix bugs and performance optimisation<br>
37+
1.2.10 - Update modes added:<br>
38+
* Interactive (on any source file change);<br>
39+
* On Save (when source file saved on disk);<br>
40+
* On Demand (only if explicitly invoked).<br>
3641
1.2.9 - Status Bar widget with summary info added; .dcignore parsing fixed. <br>
3742
1.2.8 - Improvements: <br>
3843
* markers for each suggestion are shown in the List and highlighted in Preview <br>
@@ -64,7 +69,7 @@ task runIC_201(type: RunIdeTask){
6469

6570
task runIC_202(type: RunIdeTask){
6671
jvmArgs '-Xmx2G'
67-
ideDirectory 'C:\\Users\\artem\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-C\\ch-0\\202.6397.94'
72+
ideDirectory 'C:\\Users\\artem\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-C\\ch-0\\202.7319.50'
6873
}
6974

7075
task runIC_193(type: RunIdeTask){

src/main/java/ai/deepcode/jbplugin/DeepCodeStatusBarWidgetProvider.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212

1313
public class DeepCodeStatusBarWidgetProvider implements StatusBarWidgetProvider {
1414

15+
public static void updateWidget(@NotNull Project project) {
16+
StatusBar statusBar = WindowManager.getInstance().getStatusBar(project);
17+
if (statusBar != null) {
18+
StatusBarWidget widget = statusBar.getWidget("DeepCodeAnalysisStatus");
19+
if (widget instanceof DeepCodeStatusBarWidget)
20+
((DeepCodeStatusBarWidget) widget).update();
21+
}
22+
}
23+
1524
@Nullable
1625
@Override
1726
public StatusBarWidget getWidget(@NotNull Project project) {
@@ -24,7 +33,7 @@ public String getAnchor() {
2433
return StatusBar.Anchors.before(StatusBar.StandardWidgets.POSITION_PANEL);
2534
}
2635

27-
public class DeepCodeStatusBarWidget
36+
public static class DeepCodeStatusBarWidget
2837
implements StatusBarWidget, StatusBarWidget.IconPresentation {
2938
private final Project project;
3039
private StatusBar myStatusBar;
@@ -36,7 +45,7 @@ public DeepCodeStatusBarWidget(@NotNull Project project) {
3645
update();
3746
}
3847

39-
public void update() {
48+
private void update() {
4049
myCurrentIcon = DeepCodeUIUtils.getSummaryIcon(project);
4150
myToolTipText = DeepCodeUIUtils.addErrWarnInfoCounts(project, "DeepCode", true, null);
4251
if (myStatusBar != null) myStatusBar.updateWidget(ID());

src/main/java/ai/deepcode/jbplugin/actions/DeepCodeIntentionAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file
7575
return editor.getEditorKind() != EditorKind.PREVIEW
7676
// otherwise preview editor will close (no suggestion found) before description entered.
7777
&& file.equals(myPsiFile)
78-
&& !AnalysisData.getInstance().isUpdateAnalysisInProgress()
78+
&& AnalysisData.getInstance().isFileInCache(file)
7979
&& AnalysisData.getInstance().getAnalysis(file).stream()
8080
.flatMap(s -> s.getRanges().stream())
8181
.map(PDU::toTextRange)

src/main/java/ai/deepcode/jbplugin/annotators/DeepCodeExternalAnnotator.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,35 +30,39 @@ public class DeepCodeExternalAnnotator extends ExternalAnnotator<PsiFile, List<S
3030

3131
private static final Logger LOG = LoggerFactory.getLogger("DeepCode.Annotator");
3232

33-
/*
34-
@Nullable
35-
@Override
36-
public PsiFile collectInformation(@NotNull PsiFile psiFile) {
37-
DCLogger.getInstance().info("collectInformation(@NotNull PsiFile psiFile) for " + psiFile);
38-
return psiFile;
39-
}
33+
/*
34+
@Nullable
35+
@Override
36+
public PsiFile collectInformation(@NotNull PsiFile psiFile) {
37+
DCLogger.getInstance().info("collectInformation(@NotNull PsiFile psiFile) for " + psiFile);
38+
return psiFile;
39+
}
4040
41-
*/
41+
*/
4242
@Override
4343
@Nullable
4444
public PsiFile collectInformation(
4545
@NotNull PsiFile psiFile, @NotNull Editor editor, boolean hasErrors) {
46-
//DCLogger.getInstance().info("collectInformation(@NotNull PsiFile psiFile, @NotNull Editor editor, boolean hasErrors) for " + psiFile);
46+
// DCLogger.getInstance().info("collectInformation(@NotNull PsiFile psiFile, @NotNull Editor
47+
// editor, boolean hasErrors) for " + psiFile);
4748
return psiFile;
48-
//return collectInformation(psiFile);
49+
// return collectInformation(psiFile);
4950
}
5051

5152
@Nullable
5253
@Override
5354
public List<SuggestionForFile> doAnnotate(PsiFile psiFile) {
5455
if (!DeepCodeUtils.getInstance().isSupportedFileFormat(psiFile)) return Collections.emptyList();
5556
final long annotatorId = System.currentTimeMillis();
56-
DCLogger.getInstance().logInfo("Annotator (" + annotatorId + ") requested for file: " + psiFile.getName());
57-
AnalysisData.getInstance().waitForUpdateAnalysisFinish(ProgressManager.getInstance().getProgressIndicator());
57+
DCLogger.getInstance()
58+
.logInfo("Annotator (" + annotatorId + ") requested for file: " + psiFile.getName());
59+
AnalysisData.getInstance()
60+
.waitForUpdateAnalysisFinish(psiFile.getProject(), ProgressManager.getInstance().getProgressIndicator());
5861
ProgressManager.checkCanceled();
5962
List<SuggestionForFile> suggestions = AnalysisData.getInstance().getAnalysis(psiFile);
60-
DCLogger.getInstance().logInfo(
61-
"Annotator (" + annotatorId + ") suggestions gotten for file: " + psiFile.getName());
63+
DCLogger.getInstance()
64+
.logInfo(
65+
"Annotator (" + annotatorId + ") suggestions gotten for file: " + psiFile.getName());
6266
ProgressManager.checkCanceled();
6367

6468
return suggestions;

src/main/java/ai/deepcode/jbplugin/core/AnalysisData.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package ai.deepcode.jbplugin.core;
22

33
import ai.deepcode.javaclient.core.*;
4+
import ai.deepcode.jbplugin.DeepCodeStatusBarWidgetProvider;
5+
import com.intellij.psi.PsiFile;
46
import org.jetbrains.annotations.NotNull;
57

68
import java.util.Collection;
@@ -23,6 +25,10 @@ private AnalysisData() {
2325

2426
@Override
2527
protected void updateUIonFilesRemovalFromCache(@NotNull Collection<Object> files) {
28+
PDU.toPsiFiles(files).stream()
29+
.map(PsiFile::getProject)
30+
.distinct()
31+
.forEach(DeepCodeStatusBarWidgetProvider::updateWidget);
2632
// code from T0D0 already have listener for updates
2733
}
2834
}

src/main/java/ai/deepcode/jbplugin/core/DeepCodeIgnoreInfoHolder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ protected String getFileName(@NotNull Object file) {
3535
return PDU.toPsiFile(file).getVirtualFile().getName();
3636
}
3737

38+
@Override
39+
protected Object getProjectOfFile(@NotNull Object file) {
40+
return PDU.toPsiFile(file).getProject();
41+
}
42+
3843
@Override
3944
protected String getDirPath(@NotNull Object file) {
4045
return PDU.toPsiFile(file).getVirtualFile().getParent().getPath();

src/main/java/ai/deepcode/jbplugin/core/DeepCodeParams.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ public static DeepCodeParams getInstance() {
1515
return INSTANCE;
1616
}
1717

18+
public static enum UpdateMode {
19+
INTERACTIVE_MODE,
20+
ON_SAVE_MODE,
21+
MANUAL_MODE
22+
}
23+
24+
private UpdateMode updateMode;
25+
1826
// TODO https://www.jetbrains.org/intellij/sdk/docs/basics/persisting_sensitive_data.html
1927
private final PropertiesComponent propertiesComponent = PropertiesComponent.getInstance();
2028

@@ -35,6 +43,9 @@ private DeepCodeParams() {
3543
clearLoginParams();
3644
propertiesComponent.setValue("ideProductName", ideProductName);
3745
}
46+
updateMode =
47+
UpdateMode.valueOf(
48+
propertiesComponent.getValue("updateMode", UpdateMode.INTERACTIVE_MODE.name()));
3849
}
3950

4051
@Override
@@ -87,8 +98,16 @@ public void setConsentGiven(@NotNull Object projectO) {
8798

8899
public boolean isFirstStart() {
89100
boolean result = PropertiesComponent.getInstance().getBoolean("deepcode.isFirstStart", true);
90-
if (result)
91-
PropertiesComponent.getInstance().setValue("deepcode.isFirstStart", false, true);
101+
if (result) PropertiesComponent.getInstance().setValue("deepcode.isFirstStart", false, true);
92102
return result;
93103
}
104+
105+
public UpdateMode getUpdateMode() {
106+
return updateMode;
107+
}
108+
109+
public void setUpdateMode(UpdateMode updateMode) {
110+
this.updateMode = updateMode;
111+
propertiesComponent.setValue("updateMode", updateMode.name());
112+
}
94113
}

src/main/java/ai/deepcode/jbplugin/core/MyBulkFileListener.java

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
* <b>outside</b> of IDE.
2222
*/
2323
public class MyBulkFileListener implements BulkFileListener {
24+
2425
@Override
2526
public void after(@NotNull List<? extends VFileEvent> events) {
2627
// fixme debug only
@@ -43,20 +44,24 @@ public void after(@NotNull List<? extends VFileEvent> events) {
4344
// if too many files changed then it's easier to do Bulk Mode full rescan
4445
BulkMode.set(project);
4546
// small delay to prevent multiple rescan Background tasks
46-
RunUtils.getInstance().rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
47+
RunUtils.getInstance()
48+
.rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
4749
} else {
4850
for (PsiFile psiFile : filesChangedOrCreated) {
49-
RunUtils.getInstance().runInBackgroundCancellable(
50-
psiFile,
51-
"Analyzing changes in " + psiFile.getName(),
52-
(progress) -> {
53-
AnalysisData.getInstance().removeFilesFromCache(Collections.singleton(psiFile));
54-
RunUtils.getInstance().updateCachedAnalysisResults(project, Collections.singleton(psiFile), progress);
55-
});
51+
RunUtils.getInstance()
52+
.runInBackgroundCancellable(
53+
psiFile,
54+
"Analyzing changes in " + psiFile.getName(),
55+
(progress) -> {
56+
AnalysisData.getInstance()
57+
.removeFilesFromCache(Collections.singleton(psiFile));
58+
RunUtils.getInstance()
59+
.updateCachedAnalysisResults(
60+
project, Collections.singleton(psiFile), progress);
61+
});
5662
}
5763
}
5864
}
59-
// });
6065

6166
Set<PsiFile> dcignoreChangedFiles =
6267
getFilteredFilesByEventTypes(
@@ -68,14 +73,17 @@ public void after(@NotNull List<? extends VFileEvent> events) {
6873
if (!dcignoreChangedFiles.isEmpty()) {
6974
BulkMode.set(project);
7075
for (PsiFile dcignoreFile : dcignoreChangedFiles) {
71-
RunUtils.getInstance().runInBackgroundCancellable(
72-
dcignoreFile,
73-
"Updating ignored files list...",
74-
(progress) ->
75-
DeepCodeIgnoreInfoHolder.getInstance().update_dcignoreFileContent(dcignoreFile));
76+
RunUtils.getInstance()
77+
.runInBackgroundCancellable(
78+
dcignoreFile,
79+
"Updating ignored files list...",
80+
(progress) ->
81+
DeepCodeIgnoreInfoHolder.getInstance()
82+
.update_dcignoreFileContent(dcignoreFile));
7683
}
7784
// small delay to prevent multiple rescan Background tasks
78-
RunUtils.getInstance().rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
85+
RunUtils.getInstance()
86+
.rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
7987
}
8088
}
8189
// fixme debug only
@@ -102,16 +110,22 @@ public void before(@NotNull List<? extends VFileEvent> events) {
102110
if (filesRemoved.size() > 10) {
103111
BulkMode.set(project);
104112
// small delay to prevent multiple rescan Background tasks
105-
RunUtils.getInstance().rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
113+
RunUtils.getInstance()
114+
.rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
106115
} else if (!RunUtils.getInstance().isFullRescanRequested(project)) {
107-
RunUtils.getInstance().runInBackground(
108-
project,
109-
"Removing " + filesRemoved.size() + " locally deleted files on server...",
110-
(progress) -> {
111-
AnalysisData.getInstance().removeFilesFromCache(PDU.toObjects(filesRemoved));
112-
RunUtils.getInstance().updateCachedAnalysisResults(
113-
project, Collections.emptyList(), PDU.toObjects(filesRemoved), progress);
114-
});
116+
RunUtils.getInstance()
117+
.runInBackground(
118+
project,
119+
"Removing " + filesRemoved.size() + " locally deleted files on server...",
120+
(progress) -> {
121+
AnalysisData.getInstance().removeFilesFromCache(PDU.toObjects(filesRemoved));
122+
RunUtils.getInstance()
123+
.updateCachedAnalysisResults(
124+
project,
125+
Collections.emptyList(),
126+
PDU.toObjects(filesRemoved),
127+
progress);
128+
});
115129
}
116130
}
117131

@@ -124,21 +138,34 @@ public void before(@NotNull List<? extends VFileEvent> events) {
124138
if (!ignoreFilesToRemove.isEmpty()) {
125139
BulkMode.set(project);
126140
// small delay to prevent multiple rescan Background tasks
127-
RunUtils.getInstance().rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
141+
RunUtils.getInstance()
142+
.rescanInBackgroundCancellableDelayed(project, PDU.DEFAULT_DELAY_SMALL, true);
128143
}
129144
}
130145
DCLogger.getInstance().logInfo("MyBulkFileListener.before ends");
131146
}
132147

148+
private Predicate<VFileEvent> getUpdateModeFilter() {
149+
switch (DeepCodeParams.getInstance().getUpdateMode()) {
150+
case INTERACTIVE_MODE:
151+
// to prevent updating files already done by MyPsiTreeChangeAdapter
152+
return VFileEvent::isFromRefresh;
153+
case ON_SAVE_MODE:
154+
return VFileEvent::isFromSave;
155+
case MANUAL_MODE:
156+
return event -> false;
157+
}
158+
return event -> false;
159+
}
160+
133161
private Set<PsiFile> getFilteredFilesByEventTypes(
134162
@NotNull Project project,
135163
@NotNull List<? extends VFileEvent> events,
136164
@NotNull Predicate<PsiFile> fileFilter,
137165
@NotNull Class<?>... classesOfEventsToFilter) {
138166
PsiManager manager = PsiManager.getInstance(project);
139167
return events.stream()
140-
// to prevent updating files already done by MyPsiTreeChangeAdapter
141-
.filter(VFileEvent::isFromRefresh)
168+
.filter(getUpdateModeFilter())
142169
.filter(event -> PsiTreeUtil.instanceOf(event, classesOfEventsToFilter))
143170
.map(VFileEvent::getFile)
144171
.filter(Objects::nonNull)

0 commit comments

Comments
 (0)