diff --git a/.travis.yml b/.travis.yml
index ae6f9bfbdbd..77258bcd662 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,10 @@
language: java
install: true
+env:
+ global:
+ - LOCAL_ENV_RUN=true
+
matrix:
include:
- os: linux
diff --git a/buildspec/linuxTests.yml b/buildspec/linuxTests.yml
index e6ee931600d..87825f86984 100644
--- a/buildspec/linuxTests.yml
+++ b/buildspec/linuxTests.yml
@@ -8,6 +8,7 @@ cache:
env:
variables:
CI: true
+ LOCAL_ENV_RUN: true
phases:
install:
diff --git a/gradle.properties b/gradle.properties
index 4f3d650fbe1..d9639e24fa5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -9,7 +9,7 @@ publishToken=
publishChannel=
# Common dependencies
-ideProfileName=2019.2
+ideProfileName=2019.3
kotlinVersion=1.3.21
awsSdkVersion=2.6.5
ideaPluginVersion=0.4.9
diff --git a/intellijJVersions.gradle b/intellijJVersions.gradle
index 4bd4cc5de8a..48a0d0183f0 100644
--- a/intellijJVersions.gradle
+++ b/intellijJVersions.gradle
@@ -75,10 +75,10 @@ static def ideProfiles() {
],
"2019.3": [
"IC": [
- version: "IC-193.4099-EAP-CANDIDATE-SNAPSHOT", // Update to actual version when it gets released
+ version: "IC-193.4386-EAP-CANDIDATE-SNAPSHOT", // Update to actual version when it gets released
plugins: [
"yaml",
- "PythonCore:193.4099.13",
+ "PythonCore:193.4386.10",
"java",
"gradle",
"maven",
@@ -86,14 +86,20 @@ static def ideProfiles() {
]
],
"IU": [
- version: "IU-193.4099-EAP-CANDIDATE-SNAPSHOT",
+ version: "IU-193.4386-EAP-CANDIDATE-SNAPSHOT",
plugins: [
- "PythonCore:193.4099.13",
+ "PythonCore:193.4386.10",
"yaml",
"JavaScriptLanguage",
"JavaScriptDebugger",
"CSS",
]
+ ],
+ "RD": [
+ version: "RD-2019.3-SNAPSHOT",
+ plugins: [
+ "yaml"
+ ]
]
]
]
diff --git a/jetbrains-core/resources/META-INF/ext-rider.xml b/jetbrains-core/resources/META-INF/ext-rider.xml
index 8beac9c88c6..f1d5109c25a 100644
--- a/jetbrains-core/resources/META-INF/ext-rider.xml
+++ b/jetbrains-core/resources/META-INF/ext-rider.xml
@@ -10,6 +10,9 @@
software.aws.toolkits.jetbrains.services.lambda.LambdaPsiHost
+
+ software.aws.toolkits.jetbrains.settings.LambdaGutterMarkSettings
+
diff --git a/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettings.kt b/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettings.kt
index f2e482af7e8..b1cfa7f0cb1 100644
--- a/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettings.kt
+++ b/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettings.kt
@@ -10,7 +10,7 @@ import com.intellij.openapi.components.Storage
import com.intellij.openapi.project.Project
@State(name = "lambda", storages = [Storage("aws.xml")])
-class LambdaSettings : PersistentStateComponent {
+class LambdaSettings(private val project: Project) : PersistentStateComponent {
private var state = LambdaConfiguration()
override fun getState(): LambdaConfiguration = state
@@ -23,6 +23,7 @@ class LambdaSettings : PersistentStateComponent {
get() = state.showAllHandlerGutterIcons
set(value) {
state.showAllHandlerGutterIcons = value
+ project.messageBus.syncPublisher(LambdaSettingsChangeListener.TOPIC).samShowAllHandlerGutterIconsSettingsChange(value)
}
companion object {
diff --git a/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettingsChangeListener.kt b/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettingsChangeListener.kt
new file mode 100644
index 00000000000..e7c55fcfede
--- /dev/null
+++ b/jetbrains-core/src/software/aws/toolkits/jetbrains/settings/LambdaSettingsChangeListener.kt
@@ -0,0 +1,18 @@
+// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package software.aws.toolkits.jetbrains.settings
+
+import com.intellij.util.messages.Topic
+import java.util.EventListener
+
+interface LambdaSettingsChangeListener : EventListener {
+ companion object {
+ @JvmStatic val TOPIC = Topic("SAM Setting has been changed", LambdaSettingsChangeListener::class.java)
+ }
+
+ /**
+ * SAM CLI version evaluation finished for the chosen profile, and it may be validated synchronously now.
+ */
+ fun samShowAllHandlerGutterIconsSettingsChange(isShow: Boolean)
+}
diff --git a/jetbrains-core/src/software/aws/toolkits/jetbrains/ui/RegionSelector.kt b/jetbrains-core/src/software/aws/toolkits/jetbrains/ui/RegionSelector.kt
index 30b55e61377..6f1ec645339 100644
--- a/jetbrains-core/src/software/aws/toolkits/jetbrains/ui/RegionSelector.kt
+++ b/jetbrains-core/src/software/aws/toolkits/jetbrains/ui/RegionSelector.kt
@@ -43,7 +43,7 @@ class RegionSelector : ComboBox() {
private inner class Renderer : SimpleListCellRenderer() {
override fun customize(
- list: JList?,
+ list: JList,
value: AwsRegion?,
index: Int,
selected: Boolean,
diff --git a/jetbrains-rider/ReSharper.AWS/ReSharper.AWS.sln b/jetbrains-rider/ReSharper.AWS/ReSharper.AWS.sln
index 4e144b69cf2..841bd59f851 100644
--- a/jetbrains-rider/ReSharper.AWS/ReSharper.AWS.sln
+++ b/jetbrains-rider/ReSharper.AWS/ReSharper.AWS.sln
@@ -10,6 +10,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWS.Psi", "src\AWS.Psi\AWS.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWS.Localization", "src\AWS.Localization\AWS.Localization.csproj", "{A7D464FD-2D77-4BDB-9F89-A60C090B67FA}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWS.Settings", "src\AWS.Settings\AWS.Settings.csproj", "{03F889DD-2864-4EC5-911E-FC3AB883FA94}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -28,10 +30,15 @@ Global
{A7D464FD-2D77-4BDB-9F89-A60C090B67FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A7D464FD-2D77-4BDB-9F89-A60C090B67FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7D464FD-2D77-4BDB-9F89-A60C090B67FA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {03F889DD-2864-4EC5-911E-FC3AB883FA94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {03F889DD-2864-4EC5-911E-FC3AB883FA94}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {03F889DD-2864-4EC5-911E-FC3AB883FA94}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {03F889DD-2864-4EC5-911E-FC3AB883FA94}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{168E7AB3-EA27-42F3-AAAA-EB542274DF72} = {242F86AA-AA1D-40B5-97DE-0C139E777832}
{A6C3DF73-FEA6-4A20-B45C-051D7D02C510} = {242F86AA-AA1D-40B5-97DE-0C139E777832}
{A7D464FD-2D77-4BDB-9F89-A60C090B67FA} = {242F86AA-AA1D-40B5-97DE-0C139E777832}
+ {03F889DD-2864-4EC5-911E-FC3AB883FA94} = {242F86AA-AA1D-40B5-97DE-0C139E777832}
EndGlobalSection
EndGlobal
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/AWS.Daemon.csproj b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/AWS.Daemon.csproj
index dec724feca4..a79565e170b 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/AWS.Daemon.csproj
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/AWS.Daemon.csproj
@@ -2,15 +2,15 @@
net461
- ReSharper.AWS
+ AWS.Daemon
-
+
-
+
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaFinder.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaFinder.cs
index 46f6edde1d3..e993b555935 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaFinder.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaFinder.cs
@@ -13,7 +13,7 @@
using JetBrains.Util;
using JetBrains.Util.Logging;
-namespace ReSharper.AWS.Lambda
+namespace AWS.Daemon.Lambda
{
public static class LambdaFinder
{
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHandlerUtils.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHandlerUtils.cs
index bfe2d4fefa9..95fa54cd1af 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHandlerUtils.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHandlerUtils.cs
@@ -4,7 +4,7 @@
using JetBrains.ReSharper.Psi.Modules;
using JetBrains.RiderTutorials.Utils;
-namespace ReSharper.AWS.Lambda
+namespace AWS.Daemon.Lambda
{
public static class LambdaHandlerUtils
{
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHost.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHost.cs
index 093876b2e8f..be155618a60 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHost.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Lambda/LambdaHost.cs
@@ -10,24 +10,24 @@
using JetBrains.ReSharper.Resources.Shell;
using JetBrains.Rider.Model;
-namespace ReSharper.AWS.Lambda
+namespace AWS.Daemon.Lambda
{
[SolutionComponent]
public class LambdaHost
{
- private readonly LambdaModel myModel;
- private readonly ISymbolCache mySymbolCache;
- private readonly PsiIconManager myPsiIconManager;
- private readonly IconHost myIconHost;
+ private readonly LambdaModel _model;
+ private readonly ISymbolCache _symbolCache;
+ private readonly PsiIconManager _psiIconManager;
+ private readonly IconHost _iconHost;
public LambdaHost(ISolution solution, ISymbolCache symbolCache, PsiIconManager psiIconManager, IconHost iconHost)
{
- myModel = solution.GetProtocolSolution().GetLambdaModel();
- mySymbolCache = symbolCache;
- myPsiIconManager = psiIconManager;
- myIconHost = iconHost;
+ _model = solution.GetProtocolSolution().GetLambdaModel();
+ _symbolCache = symbolCache;
+ _psiIconManager = psiIconManager;
+ _iconHost = iconHost;
- myModel.DetermineHandlers.Set((lifetime, unit) =>
+ _model.DetermineHandlers.Set((lifetime, unit) =>
{
var task = new RdTask>();
task.Set(DetermineHandlers(solution));
@@ -37,17 +37,17 @@ public LambdaHost(ISolution solution, ISymbolCache symbolCache, PsiIconManager p
public void RunLambda(string methodName, string handler)
{
- myModel.RunLambda(new LambdaRequest(methodName, handler));
+ _model.RunLambda(new LambdaRequest(methodName, handler));
}
public void DebugLambda(string methodName, string handler)
{
- myModel.DebugLambda(new LambdaRequest(methodName, handler));
+ _model.DebugLambda(new LambdaRequest(methodName, handler));
}
public void CreateNewLambda(string methodName, string handler)
{
- myModel.CreateNewLambda(new LambdaRequest(methodName, handler));
+ _model.CreateNewLambda(new LambdaRequest(methodName, handler));
}
private List DetermineHandlers(ISolution solution)
@@ -67,7 +67,7 @@ private List DetermineHandlers(ISolution solution)
{
using (CompilationContextCookie.OverrideOrCreate(psiModule.GetContextFromModule()))
{
- var scope = mySymbolCache.GetSymbolScope(psiModule, false, true);
+ var scope = _symbolCache.GetSymbolScope(psiModule, false, true);
var namespaces = scope.GlobalNamespace.GetNestedNamespaces(scope);
foreach (var @namespace in namespaces)
@@ -120,8 +120,8 @@ private void GetHandlers(IMethod method, ICollection hand
if (!LambdaFinder.IsSuitableLambdaMethod(method)) return;
var handlerString = LambdaHandlerUtils.ComposeHandlerString(method);
- var iconId = myPsiIconManager.GetImage(method.GetElementType());
- var iconModel = myIconHost.Transform(iconId);
+ var iconId = _psiIconManager.GetImage(method.GetElementType());
+ var iconModel = _iconHost.Transform(iconId);
handlers.Add(new HandlerCompletionItem(handlerString, iconModel));
}
}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerAttributeIds.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerAttributeIds.cs
index 5f215891793..b958437a41b 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerAttributeIds.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerAttributeIds.cs
@@ -1,5 +1,5 @@
+using AWS.Daemon.RunMarkers;
using JetBrains.TextControl.DocumentMarkup;
-using ReSharper.AWS.RunMarkers;
[assembly:
RegisterHighlighter(
@@ -10,10 +10,10 @@
)
]
-namespace ReSharper.AWS.RunMarkers
+namespace AWS.Daemon.RunMarkers
{
public static class LambdaRunMarkerAttributeIds
{
public const string LAMBDA_RUN_METHOD_MARKER_ID = "AWS Lambda Run Method Gutter Mark";
}
-}
\ No newline at end of file
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerGutterMark.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerGutterMark.cs
index f9ad5d8852f..e640d488776 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerGutterMark.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerGutterMark.cs
@@ -1,104 +1,104 @@
-using System.Collections.Generic;
-using AWS.Localization;
-using JetBrains.Annotations;
-using JetBrains.Application.UI.Controls.BulbMenu.Anchors;
-using JetBrains.Application.UI.Controls.BulbMenu.Items;
-using JetBrains.Application.UI.Icons.ComposedIcons;
-using JetBrains.ProjectModel;
-using JetBrains.ReSharper.Host.Features.RunMarkers;
-using JetBrains.ReSharper.Resources.Shell;
-using JetBrains.RiderTutorials.Utils;
-using JetBrains.TextControl.DocumentMarkup;
-using JetBrains.UI.Icons;
-using JetBrains.UI.RichText;
-using JetBrains.UI.ThemedIcons;
-using JetBrains.Util;
-using JetBrains.Util.Logging;
-using ReSharper.AWS.Lambda;
-
-namespace ReSharper.AWS.RunMarkers
-{
- public abstract class LambdaRunMarkerGutterMark : IconGutterMark
- {
- private static readonly ILogger ourLogger = Logger.GetLogger();
-
- public override IAnchor Anchor => BulbMenuAnchors.PermanentBackgroundItems;
-
- protected LambdaRunMarkerGutterMark([NotNull] IconId iconId) : base(iconId)
- {
- }
-
- public override IEnumerable GetBulbMenuItems(IHighlighter highlighter)
- {
- if (!(highlighter.UserData is RunMarkerHighlighting runMarker)) yield break;
-
- var solution = Shell.Instance.GetComponent().Solution;
- if (solution == null) yield break;
-
- if (runMarker.AttributeId != LambdaRunMarkerAttributeIds.LAMBDA_RUN_METHOD_MARKER_ID)
- yield break;
-
- foreach (var item in GetRunMethodItems(solution, runMarker))
- {
- yield return item;
- }
- }
-
- private IEnumerable GetRunMethodItems(ISolution solution,
- [NotNull] RunMarkerHighlighting runMarker)
- {
- var lambdaHost = solution.GetComponent();
- var javaPropertiesLoader = solution.GetComponent();
-
- var methodName = runMarker.Method.ShortName;
- if (methodName.IsEmpty())
- {
- ourLogger.Warn("MethodName for lambda runMarker should not be empty");
- yield break;
- }
-
- var handlerString = ComposeHandlerString(runMarker);
-
- yield return new BulbMenuItem(
- new ExecutableItem(() => { lambdaHost.RunLambda(methodName, handlerString); }),
- new RichText($"Run '[Local] {methodName}'"),
- LambdaRunMarkersThemedIcons.RunThis.Id, BulbMenuAnchors.PermanentBackgroundItems);
-
- yield return new BulbMenuItem(
- new ExecutableItem(() => { lambdaHost.DebugLambda(methodName, handlerString); }),
- new RichText($"Debug '[Local] {methodName}'"),
- LambdaRunMarkersThemedIcons.DebugThis.Id, BulbMenuAnchors.PermanentBackgroundItems);
-
- yield return new BulbMenuItem(
- new ExecutableItem(() => { lambdaHost.CreateNewLambda(methodName, handlerString); }),
- new RichText(javaPropertiesLoader.GetLocalizedString("lambda.create_new")),
- CompositeIconId.Compose(LambdaRunMarkersThemedIcons.Lambda.Id,
- LambdaRunMarkersThemedIcons.CreateNew.Id), BulbMenuAnchors.PermanentBackgroundItems);
- }
-
- [NotNull]
- private static string ComposeHandlerString([NotNull] RunMarkerHighlighting runMarker)
- {
- var project = runMarker.Project;
- if (project == null) return "";
-
- var assemblyName = project.GetOutputAssemblyName(runMarker.TargetFrameworkId);
-
- var containingType = runMarker.Method.GetContainingType();
- if (containingType == null) return "";
-
- var typeString = containingType.GetFullClrName();
-
- var methodName = runMarker.Method.ShortName;
-
- return $"{assemblyName}::{typeString}::{methodName}";
- }
- }
-
- public class LambdaMethodRunMarkerGutterMark : LambdaRunMarkerGutterMark
- {
- public LambdaMethodRunMarkerGutterMark() : base(LambdaRunMarkersThemedIcons.Lambda.Id)
- {
- }
- }
-}
\ No newline at end of file
+using System.Collections.Generic;
+using AWS.Daemon.Lambda;
+using AWS.Localization;
+using JetBrains.Annotations;
+using JetBrains.Application.UI.Controls.BulbMenu.Anchors;
+using JetBrains.Application.UI.Controls.BulbMenu.Items;
+using JetBrains.Application.UI.Icons.ComposedIcons;
+using JetBrains.ProjectModel;
+using JetBrains.ReSharper.Host.Features.RunMarkers;
+using JetBrains.ReSharper.Resources.Shell;
+using JetBrains.RiderTutorials.Utils;
+using JetBrains.TextControl.DocumentMarkup;
+using JetBrains.UI.Icons;
+using JetBrains.UI.RichText;
+using JetBrains.UI.ThemedIcons;
+using JetBrains.Util;
+using JetBrains.Util.Logging;
+
+namespace AWS.Daemon.RunMarkers
+{
+ public abstract class LambdaRunMarkerGutterMark : IconGutterMark
+ {
+ private static readonly ILogger ourLogger = Logger.GetLogger();
+
+ public override IAnchor Anchor => BulbMenuAnchors.PermanentBackgroundItems;
+
+ protected LambdaRunMarkerGutterMark([NotNull] IconId iconId) : base(iconId)
+ {
+ }
+
+ public override IEnumerable GetBulbMenuItems(IHighlighter highlighter)
+ {
+ if (!(highlighter.UserData is RunMarkerHighlighting runMarker)) yield break;
+
+ var solution = Shell.Instance.GetComponent().Solution;
+ if (solution == null) yield break;
+
+ if (runMarker.AttributeId != LambdaRunMarkerAttributeIds.LAMBDA_RUN_METHOD_MARKER_ID)
+ yield break;
+
+ foreach (var item in GetRunMethodItems(solution, runMarker))
+ {
+ yield return item;
+ }
+ }
+
+ private IEnumerable GetRunMethodItems(ISolution solution,
+ [NotNull] RunMarkerHighlighting runMarker)
+ {
+ var lambdaHost = solution.GetComponent();
+ var javaPropertiesLoader = solution.GetComponent();
+
+ var methodName = runMarker.Method.ShortName;
+ if (methodName.IsEmpty())
+ {
+ ourLogger.Warn("MethodName for lambda runMarker should not be empty");
+ yield break;
+ }
+
+ var handlerString = ComposeHandlerString(runMarker);
+
+ yield return new BulbMenuItem(
+ new ExecutableItem(() => { lambdaHost.RunLambda(methodName, handlerString); }),
+ new RichText($"Run '[Local] {methodName}'"),
+ LambdaRunMarkersThemedIcons.RunThis.Id, BulbMenuAnchors.PermanentBackgroundItems);
+
+ yield return new BulbMenuItem(
+ new ExecutableItem(() => { lambdaHost.DebugLambda(methodName, handlerString); }),
+ new RichText($"Debug '[Local] {methodName}'"),
+ LambdaRunMarkersThemedIcons.DebugThis.Id, BulbMenuAnchors.PermanentBackgroundItems);
+
+ yield return new BulbMenuItem(
+ new ExecutableItem(() => { lambdaHost.CreateNewLambda(methodName, handlerString); }),
+ new RichText(javaPropertiesLoader.GetLocalizedString("lambda.create_new")),
+ CompositeIconId.Compose(LambdaRunMarkersThemedIcons.Lambda.Id,
+ LambdaRunMarkersThemedIcons.CreateNew.Id), BulbMenuAnchors.PermanentBackgroundItems);
+ }
+
+ [NotNull]
+ private static string ComposeHandlerString([NotNull] RunMarkerHighlighting runMarker)
+ {
+ var project = runMarker.Project;
+ if (project == null) return "";
+
+ var assemblyName = project.GetOutputAssemblyName(runMarker.TargetFrameworkId);
+
+ var containingType = runMarker.Method.GetContainingType();
+ if (containingType == null) return "";
+
+ var typeString = containingType.GetFullClrName();
+
+ var methodName = runMarker.Method.ShortName;
+
+ return $"{assemblyName}::{typeString}::{methodName}";
+ }
+ }
+
+ public class LambdaMethodRunMarkerGutterMark : LambdaRunMarkerGutterMark
+ {
+ public LambdaMethodRunMarkerGutterMark() : base(LambdaRunMarkersThemedIcons.Lambda.Id)
+ {
+ }
+ }
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerProvider.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerProvider.cs
index 2f15473cb86..c05b50e3db7 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerProvider.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/RunMarkers/LambdaRunMarkerProvider.cs
@@ -1,3 +1,5 @@
+using AWS.Daemon.Lambda;
+using AWS.Daemon.Settings;
using JetBrains.Application.Settings;
using JetBrains.ReSharper.Feature.Services.Daemon;
using JetBrains.ReSharper.Host.Features.RunMarkers;
@@ -6,10 +8,9 @@
using JetBrains.ReSharper.Psi.CSharp;
using JetBrains.ReSharper.Psi.CSharp.Tree;
using JetBrains.ReSharper.Psi.Tree;
-using ReSharper.AWS.Lambda;
using IMethodDeclaration = JetBrains.ReSharper.Psi.CSharp.Tree.IMethodDeclaration;
-namespace ReSharper.AWS.RunMarkers
+namespace AWS.Daemon.RunMarkers
{
[Language(typeof(CSharpLanguage))]
public class LambdaRunMarkerProvider : IRunMarkerProvider
@@ -18,8 +19,10 @@ public class LambdaRunMarkerProvider : IRunMarkerProvider
public void CollectRunMarkers(IFile file, IContextBoundSettingsStore settings, IHighlightingConsumer consumer)
{
- if (!LambdaFinder.IsLambdaProjectType(file.GetProject())) return;
+ var isLambdaGutterMarksEnabled = settings.GetValue((LambdaGutterMarkSettings s) => s.Enabled);
+ if (!isLambdaGutterMarksEnabled) return;
if (!(file is ICSharpFile csharpFile)) return;
+ if (!LambdaFinder.IsLambdaProjectType(file.GetProject())) return;
foreach (var declaration in CachedDeclarationsCollector.Run(csharpFile))
{
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Settings/LambdaGutterMarkSettings.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Settings/LambdaGutterMarkSettings.cs
new file mode 100644
index 00000000000..56529a9c165
--- /dev/null
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/Settings/LambdaGutterMarkSettings.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Linq.Expressions;
+using JetBrains.Application.Settings;
+using JetBrains.Application.Settings.WellKnownRootKeys;
+
+namespace AWS.Daemon.Settings
+{
+ [SettingsKey(typeof(EnvironmentSettings), "AWS Lambda gutter mark settings")]
+ public class LambdaGutterMarkSettings
+ {
+ [SettingsEntry(true, "Show gutter icons for all potential AWS Lambda handlers")]
+ public bool Enabled;
+ }
+
+ public class LambdaGutterMarkSettingsExtensions
+ {
+ public static Expression> Enabled = settings => settings.Enabled;
+ }
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/ZoneMarker.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/ZoneMarker.cs
index ae32b6673c5..5e67e12e71b 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/ZoneMarker.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Daemon/ZoneMarker.cs
@@ -1,11 +1,11 @@
-using JetBrains.Application.BuildScript.Application.Zones;
-using JetBrains.ReSharper.Feature.Services;
-using JetBrains.ReSharper.Psi.CSharp;
-
-namespace ReSharper.AWS
-{
- [ZoneMarker]
- public class ZoneMarker : IRequire, IRequire
- {
- }
-}
\ No newline at end of file
+using JetBrains.Application.BuildScript.Application.Zones;
+using JetBrains.ReSharper.Feature.Services;
+using JetBrains.ReSharper.Psi.CSharp;
+
+namespace AWS.Daemon
+{
+ [ZoneMarker]
+ public class ZoneMarker : IRequire, IRequire
+ {
+ }
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Localization/ZoneMarker.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Localization/ZoneMarker.cs
new file mode 100644
index 00000000000..6a6fbf3ad73
--- /dev/null
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Localization/ZoneMarker.cs
@@ -0,0 +1,10 @@
+using JetBrains.Application.BuildScript.Application.Zones;
+using JetBrains.ReSharper.Psi.CSharp;
+
+namespace AWS.Localization
+{
+ [ZoneMarker]
+ public class ZoneMarker : IRequire
+ {
+ }
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/AWS.Psi.csproj b/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/AWS.Psi.csproj
index f9a0405e52b..a25d2d324a2 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/AWS.Psi.csproj
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/AWS.Psi.csproj
@@ -2,6 +2,7 @@
net461
+ AWS.Psi
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/ZoneMarker.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/ZoneMarker.cs
index 09eafbef81b..cff541a9eac 100644
--- a/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/ZoneMarker.cs
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Psi/ZoneMarker.cs
@@ -1,10 +1,11 @@
using JetBrains.Application.BuildScript.Application.Zones;
using JetBrains.ReSharper.Psi.CSharp;
+using JetBrains.ReSharper.Resources.Shell;
namespace AWS.Psi
{
[ZoneMarker]
- public class ZoneMarker : IRequire
+ public class ZoneMarker : IRequire, IRequire
{
}
-}
\ No newline at end of file
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/AWS.Settings.csproj b/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/AWS.Settings.csproj
new file mode 100644
index 00000000000..f59a606a531
--- /dev/null
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/AWS.Settings.csproj
@@ -0,0 +1,16 @@
+
+
+
+ net461
+ AWS.Settings
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/AwsSettingsHost.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/AwsSettingsHost.cs
new file mode 100644
index 00000000000..04c2b2d5f92
--- /dev/null
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/AwsSettingsHost.cs
@@ -0,0 +1,30 @@
+using AWS.Daemon.Settings;
+using JetBrains.Annotations;
+using JetBrains.Application.Settings;
+using JetBrains.Lifetimes;
+using JetBrains.ProjectModel;
+using JetBrains.ProjectModel.DataContext;
+using JetBrains.ReSharper.Daemon.Impl;
+using JetBrains.ReSharper.Host.Features;
+using JetBrains.Rider.Model;
+
+namespace AWS.Settings
+{
+ [SolutionComponent]
+ public class AwsSettingsHost
+ {
+ public AwsSettingsHost(Lifetime lifetime, [NotNull] ISolution solution, [NotNull] ISettingsStore settingsStore)
+ {
+ var model = solution.GetProtocolSolution().GetAwsSettingModel();
+
+ var contextBoundSettingsStoreLive = settingsStore.BindToContextLive(lifetime, ContextRange.Smart(solution.ToDataContext()));
+
+ model.ShowLambdaGutterMarks.Advise(lifetime, isEnabled =>
+ {
+ var entry = settingsStore.Schema.GetScalarEntry( (LambdaGutterMarkSettings s) => s.Enabled);
+ contextBoundSettingsStoreLive.SetValue(entry, isEnabled, null);
+ solution.GetComponent().Invalidate();
+ });
+ }
+ }
+}
diff --git a/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/ZoneMarker.cs b/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/ZoneMarker.cs
new file mode 100644
index 00000000000..bc70b841e67
--- /dev/null
+++ b/jetbrains-rider/ReSharper.AWS/src/AWS.Settings/ZoneMarker.cs
@@ -0,0 +1,11 @@
+using JetBrains.Application.BuildScript.Application.Zones;
+using JetBrains.ReSharper.Feature.Services;
+using JetBrains.ReSharper.Psi.CSharp;
+
+namespace AWS.Settings
+{
+ [ZoneMarker]
+ public class ZoneMarker : IRequire
+ {
+ }
+}
diff --git a/jetbrains-rider/build.gradle b/jetbrains-rider/build.gradle
index b59784a2ad0..2914392e764 100644
--- a/jetbrains-rider/build.gradle
+++ b/jetbrains-rider/build.gradle
@@ -16,13 +16,6 @@ buildscript {
ext.resharperPluginPath = new File(projectDir, "ReSharper.AWS")
-def buildConfiguration = ext.properties["BuildConfiguration"] ?: "Debug"
-def pluginFiles = [
- "AWS.Localization/bin/$buildConfiguration/net461/AWS.Localization",
- "AWS.Daemon/bin/$buildConfiguration/net461/AWS.Daemon",
- "AWS.Psi/bin/$buildConfiguration/net461/AWS.Psi"
-]
-
apply plugin: 'org.jetbrains.intellij'
apply plugin: 'com.jetbrains.rdgen'
@@ -59,9 +52,8 @@ intellij {
tasks.withType(prepareSandbox.class).all {
dependsOn buildReSharperPlugin
- def files = pluginFiles.collect { "$resharperPluginPath/src/${it}.dll" } +
- pluginFiles.collect { "$resharperPluginPath/src/${it}.pdb" }
-
+ def config = ext.properties["BuildConfiguration"] ?: "Debug"
+ def files = getBackendProjectsOut(resharperPluginPath, config)
files.each {
from(it, { into("${intellij.pluginName}/dotnet") })
}
@@ -79,16 +71,19 @@ compileKotlin.dependsOn(generateModel)
test {
useTestNG()
-
- // TODO: Disable Rider tests until switching to 2019.3 SDK.
- // Please see https://youtrack.jetbrains.com/issue/RIDER-19506.
- def testClassToExclude = [ "DotNetLambdaHandlerResolverTest",
- "LambdaGutterMarkHighlightingTest",
- "DotNetLocalLambdaRunConfigurationTest",
- "DotNetHandlerCompletionTest" ]
-
- testClassToExclude.forEach { classToExclude ->
- exclude "**/${classToExclude}.class"
+ println("Configuring Rider tests. Environment variable LOCAL_ENV_RUN: ${System.getenv("LOCAL_ENV_RUN")}")
+
+ def compare = compareVersions(ideProfileName, "2019.3")
+ if (compare == -1) {
+ println("Current SDK version: ${ideProfileName}. Rider tests require 193 SDK or higher. Exclude Rider tests.")
+ def testClassToExclude = [ "DotNetLambdaHandlerResolverTest",
+ "LambdaGutterMarkHighlightingTest",
+ "DotNetLocalLambdaRunConfigurationTest",
+ "DotNetHandlerCompletionTest" ]
+
+ testClassToExclude.forEach { classToExclude ->
+ exclude "**/${classToExclude}.class"
+ }
}
}
@@ -99,3 +94,35 @@ runIde {
jar {
archiveBaseName = 'aws-intellij-toolkit-rider'
}
+
+private static int compareVersions(String version, String withVersion) {
+ List versionList = version.tokenize('.')
+ List withVersionList = withVersion.tokenize('.')
+
+ def minIndices = Math.min(versionList.size(), withVersionList.size())
+
+ for (int i = 0; i < minIndices; i++) {
+ def partInt = versionList[i].toInteger()
+ def withPartInt = withVersionList[i].toInteger()
+
+ if (partInt != withPartInt) {
+ return partInt <=> withPartInt
+ }
+ }
+
+ return 0
+}
+
+private static String[] getBackendProjectsOut(File resharperPluginDir, String buildConfiguration) {
+ def pluginFiles = [
+ "AWS.Daemon/bin/$buildConfiguration/net461/AWS.Daemon",
+ "AWS.Localization/bin/$buildConfiguration/net461/AWS.Localization",
+ "AWS.Psi/bin/$buildConfiguration/net461/AWS.Psi",
+ "AWS.Settings/bin/$buildConfiguration/net461/AWS.Settings"
+ ]
+
+ def files = pluginFiles.collect { "$resharperPluginDir/src/${it}.dll" } +
+ pluginFiles.collect { "$resharperPluginDir/src/${it}.pdb" }
+
+ return files
+}
diff --git a/jetbrains-rider/protocol.gradle b/jetbrains-rider/protocol.gradle
index 26bee6094ec..17da6c59cf7 100644
--- a/jetbrains-rider/protocol.gradle
+++ b/jetbrains-rider/protocol.gradle
@@ -5,6 +5,7 @@ def protocolGroup = 'protocol'
ext.csDaemonGeneratedOutput = new File(resharperPluginPath, "src/AWS.Daemon/Protocol")
ext.csPsiGeneratedOutput = new File(resharperPluginPath, "src/AWS.Psi/Protocol")
+ext.csAwsSettingGeneratedOutput = new File(resharperPluginPath, "src/AWS.Settings/Protocol")
ext.ktGeneratedOutput = new File(projectDir, "src/software/aws/toolkits/jetbrains/protocol")
@@ -86,18 +87,56 @@ task generatePsiModel(type: tasks.getByName("rdgen").class) {
}
}
+task generateAwsSettingModel(type: tasks.getByName("rdgen").class) {
+ def settingModelSource = new File(modelDir, "setting").canonicalPath
+
+ // NOTE: classpath is evaluated lazily, at execution time, because it comes from the unzipped
+ // intellij SDK, which is extracted in afterEvaluate
+ params {
+ verbose = true
+ hashFolder = "build/rdgen"
+
+ logger.info("Configuring rdgen params")
+ classpath {
+ logger.info("Calculating classpath for rdgen, intellij.ideaDependency is: ${intellij.ideaDependency}")
+ def sdkPath = intellij.ideaDependency.classes
+ def rdLibDirectory = new File(sdkPath, "lib/rd").canonicalFile
+
+ "$rdLibDirectory/rider-model.jar"
+ }
+ sources settingModelSource
+ packages = "protocol.model.setting"
+
+ generator {
+ language = "kotlin"
+ transform = "asis"
+ root = "com.jetbrains.rider.model.nova.ide.IdeRoot"
+ namespace = "com.jetbrains.rider.model"
+ directory = "$ktGeneratedOutput"
+ }
+
+ generator {
+ language = "csharp"
+ transform = "reversed"
+ root = "com.jetbrains.rider.model.nova.ide.IdeRoot"
+ namespace = "JetBrains.Rider.Model"
+ directory = "$csAwsSettingGeneratedOutput"
+ }
+ }
+}
+
task generateModel(type: tasks.getByName("rdgen").class) {
group = protocolGroup
description = 'Generates protocol models'
- dependsOn generateDaemonModel, generatePsiModel
+ dependsOn generateDaemonModel, generatePsiModel, generateAwsSettingModel
}
task cleanProtocolModels {
group = protocolGroup
description = 'Clean up generated protocol models'
- def protocolOutDirs = [ ktGeneratedOutput, csDaemonGeneratedOutput, csPsiGeneratedOutput ]
+ def protocolOutDirs = [ ktGeneratedOutput, csDaemonGeneratedOutput, csPsiGeneratedOutput, csAwsSettingGeneratedOutput ]
for (dir in protocolOutDirs) {
if (dir.isDirectory()) {
diff --git a/jetbrains-rider/protocol/model/daemon/LambdaModel.kt b/jetbrains-rider/protocol/model/daemon/LambdaModel.kt
index 143868478dd..e437321a9fd 100644
--- a/jetbrains-rider/protocol/model/daemon/LambdaModel.kt
+++ b/jetbrains-rider/protocol/model/daemon/LambdaModel.kt
@@ -5,12 +5,12 @@ package protocol.model.daemon
import com.jetbrains.rd.generator.nova.Ext
import com.jetbrains.rd.generator.nova.async
+import com.jetbrains.rd.generator.nova.call
import com.jetbrains.rd.generator.nova.doc
import com.jetbrains.rd.generator.nova.field
import com.jetbrains.rd.generator.nova.immutableList
import com.jetbrains.rd.generator.nova.nullable
import com.jetbrains.rd.generator.nova.sink
-import com.jetbrains.rd.generator.nova.call
import com.jetbrains.rd.generator.nova.PredefinedType.string
import com.jetbrains.rd.generator.nova.PredefinedType.void
import com.jetbrains.rider.model.nova.ide.SolutionModel
diff --git a/jetbrains-rider/protocol/model/setting/AwsSettingModel.kt b/jetbrains-rider/protocol/model/setting/AwsSettingModel.kt
new file mode 100644
index 00000000000..b3e94735b31
--- /dev/null
+++ b/jetbrains-rider/protocol/model/setting/AwsSettingModel.kt
@@ -0,0 +1,19 @@
+// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package protocol.model.setting
+
+import com.jetbrains.rd.generator.nova.Ext
+import com.jetbrains.rd.generator.nova.doc
+import com.jetbrains.rd.generator.nova.source
+import com.jetbrains.rd.generator.nova.PredefinedType.bool
+import com.jetbrains.rider.model.nova.ide.SolutionModel
+
+@Suppress("unused")
+object AwsSettingModel : Ext(SolutionModel.Solution) {
+
+ init {
+ source("showLambdaGutterMarks", bool)
+ .doc("Flag indicating whether Lambda gutter marks should be shown in editor")
+ }
+}
diff --git a/jetbrains-rider/src/software/aws/toolkits/jetbrains/icons/RiderAwsIconsPatcher.kt b/jetbrains-rider/src/software/aws/toolkits/jetbrains/icons/RiderAwsIconsPatcher.kt
index 2292212106a..a692081e5de 100644
--- a/jetbrains-rider/src/software/aws/toolkits/jetbrains/icons/RiderAwsIconsPatcher.kt
+++ b/jetbrains-rider/src/software/aws/toolkits/jetbrains/icons/RiderAwsIconsPatcher.kt
@@ -33,11 +33,10 @@ internal class RiderAwsIconsPatcher : IconPathPatcher() {
}
}
- override fun patchPath(path: String?, classLoader: ClassLoader?): String? =
- if (path != null) myIconsOverrideMap[path] else null
+ override fun patchPath(path: String, classLoader: ClassLoader?): String? = myIconsOverrideMap[path]
- override fun getContextClassLoader(path: String?, originalClassLoader: ClassLoader?): ClassLoader? =
- if (path != null && myIconsOverrideMap.containsKey(path)) javaClass.classLoader
+ override fun getContextClassLoader(path: String, originalClassLoader: ClassLoader?): ClassLoader? =
+ if (myIconsOverrideMap.containsKey(path)) javaClass.classLoader
else originalClassLoader
private val myIconsOverrideMap = mapOf(
diff --git a/jetbrains-rider/src/software/aws/toolkits/jetbrains/services/lambda/dotnet/DotNetSamDebugSupport.kt b/jetbrains-rider/src/software/aws/toolkits/jetbrains/services/lambda/dotnet/DotNetSamDebugSupport.kt
index c1893dd48cf..e24320e6858 100644
--- a/jetbrains-rider/src/software/aws/toolkits/jetbrains/services/lambda/dotnet/DotNetSamDebugSupport.kt
+++ b/jetbrains-rider/src/software/aws/toolkits/jetbrains/services/lambda/dotnet/DotNetSamDebugSupport.kt
@@ -10,8 +10,6 @@ import com.intellij.execution.process.ProcessAdapter
import com.intellij.execution.process.ProcessEvent
import com.intellij.execution.process.ProcessHandler
import com.intellij.execution.runners.ExecutionEnvironment
-import com.intellij.execution.ui.ConsoleView
-import com.intellij.execution.ui.ConsoleViewContentType
import com.intellij.execution.ui.ExecutionConsole
import com.intellij.openapi.rd.defineNestedLifetime
import com.intellij.xdebugger.XDebugProcess
@@ -40,7 +38,6 @@ import com.jetbrains.rider.model.debuggerWorker.DotNetCoreInfo
import com.jetbrains.rider.model.debuggerWorker.DotNetDebuggerSessionModel
import com.jetbrains.rider.model.debuggerWorkerConnectionHelperModel
import com.jetbrains.rider.projectView.solution
-import com.jetbrains.rider.run.ConsoleKind
import com.jetbrains.rider.run.IDebuggerOutputListener
import com.jetbrains.rider.run.bindToSettings
import org.jetbrains.concurrency.AsyncPromise
@@ -280,17 +277,12 @@ class DotNetSamDebugSupport : SamDebugSupport {
sessionModel: DotNetDebuggerSessionModel,
outputEventsListener: IDebuggerOutputListener
): XDebugProcessStarter {
- val consoleKind = ConsoleKind.ExternalConsole
- (executionConsole as? ConsoleView)
- ?.print(
- "Input/Output redirection disabled: ${consoleKind.message}${System.lineSeparator()}",
- ConsoleViewContentType.SYSTEM_OUTPUT
- )
val fireInitializedManually = env.getUserData(DotNetDebugRunner.FIRE_INITIALIZED_MANUALLY) ?: false
return object : XDebugProcessStarter() {
override fun start(session: XDebugSession): XDebugProcess =
+ // TODO: Update to use 'sessionId' parameter in ctr when min SDK version is 193.
DotNetDebugProcess(
sessionLifetime = sessionLifetime,
session = session,
diff --git a/jetbrains-rider/src/software/aws/toolkits/jetbrains/settings/LambdaGutterMarkSettings.kt b/jetbrains-rider/src/software/aws/toolkits/jetbrains/settings/LambdaGutterMarkSettings.kt
new file mode 100644
index 00000000000..250315391c1
--- /dev/null
+++ b/jetbrains-rider/src/software/aws/toolkits/jetbrains/settings/LambdaGutterMarkSettings.kt
@@ -0,0 +1,27 @@
+// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package software.aws.toolkits.jetbrains.settings
+
+import com.intellij.openapi.project.Project
+import com.intellij.util.messages.MessageBus
+import com.jetbrains.rider.model.awsSettingModel
+import com.jetbrains.rider.projectView.solution
+
+class LambdaGutterMarkSettings(project: Project, messageBus: MessageBus) {
+
+ val model = project.solution.awsSettingModel
+
+ init {
+ model.showLambdaGutterMarks.fire(LambdaSettings.getInstance(project).showAllHandlerGutterIcons)
+
+ messageBus.connect().subscribe(
+ LambdaSettingsChangeListener.TOPIC,
+ object : LambdaSettingsChangeListener {
+ override fun samShowAllHandlerGutterIconsSettingsChange(isShow: Boolean) {
+ model.showLambdaGutterMarks.fire(isShow)
+ }
+ }
+ )
+ }
+}
diff --git a/jetbrains-rider/tst/base/AwsBaseTestWithMarkup.kt b/jetbrains-rider/tst/base/AwsBaseTestWithMarkup.kt
new file mode 100644
index 00000000000..c54d0c9eef7
--- /dev/null
+++ b/jetbrains-rider/tst/base/AwsBaseTestWithMarkup.kt
@@ -0,0 +1,32 @@
+// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package base
+
+import com.intellij.openapi.util.SystemInfo
+import com.jetbrains.rider.test.base.BaseTestWithMarkup
+import com.jetbrains.rider.test.base.PrepareTestEnvironment
+import com.jetbrains.rider.test.scriptingApi.setUpCustomToolset
+import com.jetbrains.rider.test.scriptingApi.setUpDotNetCoreCliPath
+import org.testng.annotations.BeforeClass
+
+// BaseTestWithMarkup inherit the logic in EditorTestBase class that prepare test project that create
+// an empty solution and adds project under test to this solution.
+//
+// When running with LOCAL_ENV_RUN flag set to true (for running tests outside of internal IntelliJ networks),
+// Rider will auto-detect and use Rider's bundled MSBuild that might be incompatible with full .NET framework installed
+// on Windows agent to open an empty solution. This cause the MSBuild error when loading a test project.
+//
+// To avoid such errors we need to explicitly set toolset and MSBuild to be selected on an instance.
+// Please use this class for any Highlighting tests
+open class AwsBaseTestWithMarkup : BaseTestWithMarkup() {
+
+ @BeforeClass
+ fun setUpBuildToolPath() {
+ if (SystemInfo.isWindows) {
+ PrepareTestEnvironment.dotnetCoreCliPath = "C:\\Program Files\\dotnet\\dotnet.exe"
+ setUpDotNetCoreCliPath(PrepareTestEnvironment.dotnetCoreCliPath)
+ setUpCustomToolset("C:\\Program Files\\dotnet\\sdk\\2.2.104\\MSBuild.dll")
+ }
+ }
+}
diff --git a/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/completion/DotNetHandlerCompletionTest.kt b/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/completion/DotNetHandlerCompletionTest.kt
index c1df278448a..d31779ec9e8 100644
--- a/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/completion/DotNetHandlerCompletionTest.kt
+++ b/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/completion/DotNetHandlerCompletionTest.kt
@@ -41,14 +41,14 @@ class DotNetHandlerCompletionTest : BaseTestWithSolution() {
@Test
@TestEnvironment(solution = "SamMultipleHandlersApp")
fun testDetermineHandlers_MultipleHandlers() {
- val handlers = project.solution.lambdaModel.determineHandlers.sync(Unit, RpcTimeouts.default)
+ val handlers = project.solution.lambdaModel.determineHandlers.sync(Unit, RpcTimeouts.default).sortedBy { it.handler }
assertThat(handlers.size).isEqualTo(2)
- assertThat(handlers[0].handler).isEqualTo("HelloWorld::HelloWorld.Function::FunctionHandler")
+ assertThat(handlers[0].handler).isEqualTo("HelloWorld::HelloWorld.Function2::FunctionHandler2")
assertIconPath(handlers[0].iconId, "/resharper/PsiSymbols/Method.svg")
- assertThat(handlers[1].handler).isEqualTo("HelloWorld::HelloWorld.Function2::FunctionHandler2")
+ assertThat(handlers[1].handler).isEqualTo("HelloWorld::HelloWorld.Function::FunctionHandler")
assertIconPath(handlers[1].iconId, "/resharper/PsiSymbols/Method.svg")
}
diff --git a/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/dotnet/LambdaGutterMarkHighlightingTest.kt b/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/dotnet/LambdaGutterMarkHighlightingTest.kt
index 1a98be102be..843eb78c873 100644
--- a/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/dotnet/LambdaGutterMarkHighlightingTest.kt
+++ b/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/dotnet/LambdaGutterMarkHighlightingTest.kt
@@ -3,14 +3,16 @@
package software.aws.toolkits.jetbrains.services.lambda.dotnet
+import base.AwsBaseTestWithMarkup
import com.jetbrains.rdclient.daemon.util.attributeId
import com.jetbrains.rdclient.testFramework.waitForDaemon
import com.jetbrains.rider.daemon.util.isBackendGutterMark
-import com.jetbrains.rider.test.base.BaseTestWithMarkup
+import com.jetbrains.rider.model.awsSettingModel
+import com.jetbrains.rider.projectView.solution
import org.testng.annotations.DataProvider
import org.testng.annotations.Test
-class LambdaGutterMarkHighlightingTest : BaseTestWithMarkup() {
+class LambdaGutterMarkHighlightingTest : AwsBaseTestWithMarkup() {
companion object {
private const val LAMBDA_RUN_MARKER_ATTRIBUTE_ID = "AWS Lambda Run Method Gutter Mark"
@@ -162,6 +164,7 @@ class LambdaGutterMarkHighlightingTest : BaseTestWithMarkup() {
fun testSerializer_NoSerializer_NotDetected() = verifyLambdaGutterMark()
private fun verifyLambdaGutterMark() {
+ project.solution.awsSettingModel.showLambdaGutterMarks.fire(true)
doTestWithMarkupModel(
testFilePath = "src/HelloWorld/Function.cs",
sourceFileName = "Function.cs",
diff --git a/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/execution/local/LambdaRunConfigurationTestBase.kt b/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/execution/local/LambdaRunConfigurationTestBase.kt
index 9f2b0b29cf3..84dabaefb70 100644
--- a/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/execution/local/LambdaRunConfigurationTestBase.kt
+++ b/jetbrains-rider/tst/software/aws/toolkits/jetbrains/services/lambda/execution/local/LambdaRunConfigurationTestBase.kt
@@ -15,7 +15,7 @@ import software.aws.toolkits.jetbrains.settings.SamSettings
abstract class LambdaRunConfigurationTestBase : BaseTestWithSolution() {
companion object {
- protected const val HANDLER_EVALUATE_TIMEOUT_MS = 10000
+ protected const val HANDLER_EVALUATE_TIMEOUT_MS = 20000
}
protected val mockId = "MockCredsId"
diff --git a/jetbrains-ultimate/tst/softwere/aws/toolkits/jetbrains/utils/rules/NodeJsCodeInsightTestFixtureRule.kt b/jetbrains-ultimate/tst/softwere/aws/toolkits/jetbrains/utils/rules/NodeJsCodeInsightTestFixtureRule.kt
index aeea022f855..62894687de5 100644
--- a/jetbrains-ultimate/tst/softwere/aws/toolkits/jetbrains/utils/rules/NodeJsCodeInsightTestFixtureRule.kt
+++ b/jetbrains-ultimate/tst/softwere/aws/toolkits/jetbrains/utils/rules/NodeJsCodeInsightTestFixtureRule.kt
@@ -10,7 +10,6 @@ import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreterMa
import com.intellij.lang.javascript.dialects.JSLanguageLevel
import com.intellij.lang.javascript.psi.JSFile
import com.intellij.lang.javascript.settings.JSRootConfiguration
-import com.intellij.openapi.module.ModuleType
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.util.Ref
@@ -48,7 +47,7 @@ class NodeJsCodeInsightTestFixtureRule : CodeInsightTestFixtureRule() {
}
class NodeJsLightProjectDescriptor : LightProjectDescriptor() {
- override fun getModuleType(): ModuleType<*> = getWebModule() ?: throw NullPointerException("module not found")
+ override fun getModuleTypeId(): String = getWebModule()?.id ?: throw NullPointerException("module not found")
override fun getSdk(): Sdk? = null
}