Skip to content

Commit d247bbc

Browse files
authored
fix-issues-192-188 (#200)
1 parent 35577f0 commit d247bbc

File tree

6 files changed

+24
-9
lines changed

6 files changed

+24
-9
lines changed

java/src/main/java/org/digma/intellij/plugin/idea/psi/java/JavaLanguageService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public boolean isSupportedFile(Project project, PsiFile psiFile) {
127127
@Override
128128
@NotNull
129129
public MethodUnderCaret detectMethodUnderCaret(@NotNull Project project, @NotNull PsiFile psiFile, int caretOffset) {
130+
//MethodUnderCaret.isSupportedFile is always true here because this method will only be called on supported files
130131
PsiElement underCaret = findElementUnderCaret(project, psiFile, caretOffset);
131132
if (underCaret == null) {
132133
return new MethodUnderCaret("", "", "", PsiUtils.psiFileToUri(psiFile), true);

rider/Digma.Rider.Plugin/Digma.Rider/Protocol/ElementUnderCaretHost.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,9 @@ private void Register()
155155
using (WriteLockCookie.Create())
156156
{
157157
Log(_logger, "Resetting model to empty");
158+
//when clearing to empty values isSupportedFile should be true so the UI will be cleared but not show a non supported file message
158159
_model.ElementUnderCaret.Value =
159-
new MethodUnderCaretEvent(string.Empty, string.Empty, string.Empty, string.Empty);
160+
new MethodUnderCaretEvent(string.Empty, string.Empty, string.Empty, string.Empty,true);
160161
}
161162

162163
OnChange();
@@ -243,8 +244,9 @@ private void OnChange([NotNull] ITextControl textControl, [NotNull] IPsiSourceFi
243244
var methodName = PsiUtils.GetDeclaredName(functionDeclaration);
244245
var className = PsiUtils.GetClassName(functionDeclaration);
245246
var fileUri = Identities.ComputeFileUri(psiSourceFile);
247+
var isSupportedFile = PsiUtils.IsPsiSourceFileApplicable(psiSourceFile);
246248
var newElementUnderCaret =
247-
new MethodUnderCaretEvent(methodFqn, methodName, className, fileUri);
249+
new MethodUnderCaretEvent(methodFqn, methodName, className, fileUri,isSupportedFile);
248250
Log(_logger, "Creating MethodUnderCaretEvent {0} for function {1}", newElementUnderCaret,
249251
functionDeclaration);
250252
UpdateModelAndNotify(newElementUnderCaret);
@@ -293,8 +295,9 @@ private void NotifyWithFileUri([CanBeNull] IPsiSourceFile psiSourceFile)
293295
{
294296
var fileUri = Identities.ComputeFileUri(psiSourceFile);
295297
Log(_logger, "Updating model with fileUri {0}", fileUri);
298+
var isSupportedFile = PsiUtils.IsPsiSourceFileApplicable(psiSourceFile);
296299
var newElementUnderCaret =
297-
new MethodUnderCaretEvent(string.Empty, string.Empty, string.Empty, fileUri);
300+
new MethodUnderCaretEvent(string.Empty, string.Empty, string.Empty, fileUri,isSupportedFile);
298301
UpdateModelAndNotify(newElementUnderCaret);
299302
}
300303
}
@@ -325,7 +328,8 @@ private void UpdateModelAndNotify([NotNull] MethodUnderCaretEvent newMethodUnder
325328
private void ClearModel()
326329
{
327330
Log(_logger, "Clearing model to empty values");
328-
UpdateModelAndNotify(new MethodUnderCaretEvent(string.Empty, string.Empty, string.Empty, string.Empty));
331+
//when clearing to empty values isSupportedFile should be true so the UI will be cleared but not show a non supported file message
332+
UpdateModelAndNotify(new MethodUnderCaretEvent(string.Empty, string.Empty, string.Empty, string.Empty,true));
329333
}
330334

331335

rider/Digma.Rider.Plugin/Digma.Rider/Util/PsiUtils.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ public static bool IsPsiSourceFileApplicable([NotNull] IPsiSourceFile psiSourceF
6161
{
6262
var properties = psiSourceFile.Properties;
6363
var primaryPsiLanguage = psiSourceFile.PrimaryPsiLanguage;
64-
var isApplicable = !primaryPsiLanguage.IsNullOrUnknown() &&
64+
var isApplicable = psiSourceFile.IsValid() &&
65+
!primaryPsiLanguage.IsNullOrUnknown() &&
6566
!properties.IsGeneratedFile &&
67+
!properties.IsNonUserFile &&
6668
primaryPsiLanguage.Is<CSharpLanguage>() &&
6769
properties.ShouldBuildPsi &&
6870
properties.ProvidesCodeModel &&

rider/protocol/src/main/kotlin/rider/model/ElementUnderCaretModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ object ElementUnderCaretModel : Ext(SolutionModel.Solution) {
1313
field("name", PredefinedType.string)
1414
field("className", PredefinedType.string)
1515
field("fileUri", PredefinedType.string)
16-
field("isSupportedFile", PredefinedType.bool).default(true).documentation = "Used when a source file is not applicable for code objects, for example classes from external assemblies"
16+
field("isSupportedFile", PredefinedType.bool).documentation = "Used when a source file is not applicable for code objects, for example classes from external assemblies"
1717
}
1818

1919

rider/src/main/kotlin/org/digma/intellij/plugin/rider/protocol/ElementUnderCaretDetector.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class ElementUnderCaretDetector(project: Project) : LifetimedProjectComponent(pr
5353
fun emptyModel() {
5454
model.protocol.scheduler.invokeOrQueue {
5555
WriteAction.run<Exception> {
56-
model.elementUnderCaret.set(MethodUnderCaretEvent("", "", "", ""))
56+
model.elementUnderCaret.set(MethodUnderCaretEvent("", "", "", "",true))
5757
}
5858
}
5959
}

rider/src/main/kotlin/org/digma/intellij/plugin/rider/protocol/protocol.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package org.digma.intellij.plugin.rider.protocol
33

44
import com.intellij.openapi.project.Project
5+
import org.digma.intellij.plugin.psi.PsiFileNotFountException
56
import org.digma.intellij.plugin.psi.PsiUtils
67

78

@@ -40,6 +41,13 @@ fun normalizeFileUri(fileUri: String,project:Project): String {
4041
return fileUri
4142
}
4243

43-
val psiFile = PsiUtils.uriToPsiFile(fileUri,project)
44-
return PsiUtils.psiFileToUri(psiFile)
44+
//when this method is called from ElementUnderCaretDetector.toModel the file uri may be a non supported file
45+
//like json or a non-user file where there is no psi file. so in that case catch the exception and just return
46+
//the original file uri
47+
return try {
48+
val psiFile = PsiUtils.uriToPsiFile(fileUri, project)
49+
PsiUtils.psiFileToUri(psiFile)
50+
}catch (e:PsiFileNotFountException){
51+
fileUri
52+
}
4553
}

0 commit comments

Comments
 (0)