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 }