private bool IsExcludedGeneratedCode(ImplicitNullabilityConfiguration configuration, ITypeMember typeMember)
        {
            if (configuration.GeneratedCode == GeneratedCodeOptions.Exclude)
                return _generatedCodeProvider.IsGeneratedOrSynthetic(typeMember);

            return false;
        }
        public void ConvertToAssemblyMetadataAttributeCode_WithAllOptionsEnabled()
        {
            var configuration = new ImplicitNullabilityConfiguration(true, true, true);

            var result = AssemblyAttributeConfigurationTranslator.GenerateAttributeCode(configuration);

            Assert.That(result, Is.EqualTo("[assembly: System.Reflection.AssemblyMetadataAttribute(\"ImplicitNullability.AppliesTo\", " +
                                           "\"InputParameters, RefParameters, OutParametersAndResult\")]"));
        }
Пример #3
0
        private void CopyAssemblyAttributeCode()
        {
            var currentImplicitNullabilitySettings =
                OptionsSettingsSmartContext.GetKey <ImplicitNullabilitySettings>(_settingsOptimization);

            var assemblyMetadataCode = AssemblyAttributeConfigurationTranslator.GenerateAttributeCode(
                ImplicitNullabilityConfiguration.CreateFromSettings(currentImplicitNullabilitySettings));

            _clipboard.SetText(assemblyMetadataCode);
            MessageBox.ShowInfo("The following code has been copied to your clipboard:\n\n\n" + assemblyMetadataCode);
        }
Пример #4
0
        public void GenerateAttributeCode_WithFieldOrPropertyOptions_ButAppliesToFieldsOrPropertiesDisabled()
        {
            var configuration = new ImplicitNullabilityConfiguration(
                ImplicitNullabilityAppliesTo.InputParameters, AllFieldOptions, AllPropertyOptions, GeneratedCodeOptions.Exclude);

            var result = AssemblyAttributeConfigurationTranslator.GenerateAttributeCode(configuration);

            Assert.That(result, Is.EqualTo(
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.AppliesTo", "InputParameters") + NewLine +
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.GeneratedCode", "Exclude")),
                        "'options'-attribute should not be rendered");
        }
Пример #5
0
        public void GenerateAttributeCode_WithIncludeGeneratedCode()
        {
            var configuration = new ImplicitNullabilityConfiguration(
                ImplicitNullabilityAppliesTo.InputParameters,
                ImplicitNullabilityFieldOptions.NoOption,
                ImplicitNullabilityPropertyOptions.NoOption,
                GeneratedCodeOptions.Include);

            var result = AssemblyAttributeConfigurationTranslator.GenerateAttributeCode(configuration);

            Assert.That(result, Is.EqualTo(
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.AppliesTo", "InputParameters") + NewLine +
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.GeneratedCode", "Include")));
        }
Пример #6
0
 private static void AssertImplicitNullabilityConfiguration(
     ImplicitNullabilityConfiguration actual,
     bool expectedEnableInputParameters,
     bool expectedEnableRefParameters,
     bool expectedEnableOutParametersAndResult)
 {
     Assert.That(new
     {
         actual.EnableInputParameters,
         actual.EnableRefParameters,
         actual.EnableOutParametersAndResult
     }, Is.EqualTo(new
     {
         EnableInputParameters        = expectedEnableInputParameters,
         EnableRefParameters          = expectedEnableRefParameters,
         EnableOutParametersAndResult = expectedEnableOutParametersAndResult
     }));
 }
Пример #7
0
        public void GenerateAttributeCode_WithAllOptionsEnabled()
        {
            var configuration = new ImplicitNullabilityConfiguration(
                ImplicitNullabilityAppliesTo.InputParameters |
                ImplicitNullabilityAppliesTo.RefParameters |
                ImplicitNullabilityAppliesTo.OutParametersAndResult |
                ImplicitNullabilityAppliesTo.Fields |
                ImplicitNullabilityAppliesTo.Properties,
                AllFieldOptions,
                AllPropertyOptions,
                GeneratedCodeOptions.Exclude);

            var result = AssemblyAttributeConfigurationTranslator.GenerateAttributeCode(configuration);

            Assert.That(result, Is.EqualTo(
                            ExpectedAssemblyMetadataAttribute(
                                "ImplicitNullability.AppliesTo",
                                "InputParameters, RefParameters, OutParametersAndResult, Fields, Properties") + NewLine +
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.Fields", "RestrictToReadonly, RestrictToReferenceTypes") + NewLine +
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.Properties", "RestrictToGetterOnly, RestrictToReferenceTypes") + NewLine +
                            ExpectedAssemblyMetadataAttribute("ImplicitNullability.GeneratedCode", "Exclude")));
        }
Пример #8
0
        public static string GenerateAttributeCode(ImplicitNullabilityConfiguration configuration)
        {
            var optionTexts = new List <string>();

            if (configuration.EnableInputParameters)
            {
                optionTexts.Add(InputParametersAssemblyAttributeOption);
            }

            if (configuration.EnableRefParameters)
            {
                optionTexts.Add(RefParametersAssemblyAttributeOption);
            }

            if (configuration.EnableOutParametersAndResult)
            {
                optionTexts.Add(OutParametersAndResultAssemblyAttributeOption);
            }

            return($"[assembly: {AssemblyMetadataAttributeTypeName.FullName}(" +
                   $"\"{AppliesToAttributeKey}\", " +
                   $"\"{string.Join(", ", optionTexts)}\")]");
        }
 private static bool IsPropertyMatchingConfigurationOptions(IProperty property, ImplicitNullabilityConfiguration configuration)
 {
     return
         // Note that `IsWritable` also searches for "polymorphic setters" (see `PartiallyOveriddenProperties` test data)
         ((!configuration.HasPropertyOption(ImplicitNullabilityPropertyOptions.RestrictToGetterOnly) || !property.IsWritable) &&
          (!configuration.HasPropertyOption(ImplicitNullabilityPropertyOptions.RestrictToReferenceTypes) || property.IsMemberOfReferenceType()));
 }
 private static bool IsFieldMatchingConfigurationOptions(IField field, ImplicitNullabilityConfiguration configuration)
 {
     return
         ((!configuration.HasFieldOption(ImplicitNullabilityFieldOptions.RestrictToReadonly) || field.IsReadonly) &&
          (!configuration.HasFieldOption(ImplicitNullabilityFieldOptions.RestrictToReferenceTypes) || field.IsMemberOfReferenceType()));
 }