Skip to content

Test plan for "Static Abstract Members In Interfaces" feature #52221

@AlekseyTs

Description

@AlekseyTs

Proposal:

Feature branch: https://github.com/dotnet/roslyn/tree/features/StaticAbstractMembersInInterfaces

We don't support UnmanagedCallersOnly on instance methods at all, nor do we support taking a pointer to instance methods. We probably shouldn't support them on abstract statics either, or we should make sure that users are forced to apply the attribute to implementations of an abstract static member in a way that matches up.

Features covered during IDE test pass:

Test plan

General

  • LangVersion
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Runtime Version
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Update compiler test plan
  • Build VS

Syntax

  • Explicit Implementations
    • Conversions
    • Binary Operators
    • Unary Operators

Semantics

  • Definition emits correct metadata
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Operator restriction relaxations:
    • Restricted operands are allowed to be a type parameter constrained to the containing type
      • Conversions
      • Binary Operators
      • Unary Operators
    • Not allowed to be indirectly constrained
    • Shift restriction relaxations
  • Interface inheritance
    • Hide
    • Default impl
  • Non-interface inheritance
    • Abstract class
      • Hide
      • Implement
      • Missing impl
    • Concrete class
      • Hide
      • Implement
      • Missing impl
  • Access to member off type parameter constrained to type
    • Methods
    • Properties
    • Events
  • Access to member off parameter constrained to type
    • Conversions
    • Binary Operators
    • Unary Operators
  • No access to member directly off type
    • Methods
    • Properties
    • Events
  • No access to member directly of parameter of type
    • Conversions
    • Binary Operators
    • Unary Operators
  • Generic substitution of I for a type parameter where T : I
  • Variance safety on members
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Abstract static conversions are considered when processing user-defined conversions
  • LINQ-to-Types
  • Expression Trees
  • Dynamic behavior (via operators)
  • Function pointers
    • Address of abstract static method
    • UnmanagedCallersOnly
  • Obsolete honored on abstract statics
  • Incorrectly implemented
    • Missing
    • Non-static
    • Wrong return type
    • Wrong parameter types
    • Not public
  • Substitution causing ambiguities in implementation

Metadata

  • Metadata is correctly read
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Metadata is correctly emitted
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Constrained T call emitted
  • Forwarding methods added for implicit impls from base
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators

Public API/IDE

  • GetTypeInfo/GetDeclaredSymbol/GetSymbolInfo
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • IOperation
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • CFG
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • LookupSymbols
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Completion
    • operator keyword completion in interfaces
    • Explicit interface implementation completion
    • Member completion
    • Conversion completion
    • Operator completion
  • Implement interface refactoring
    • Implicit
    • Explicit
  • GoToDefinition
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • FindAllRefs
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • EnC
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Formatting of explicit impls
    • Conversions
    • Binary Operators
    • Unary Operators
  • Change Signature works as expected
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Extract method extracts to appropriate generic method
    • Methods
    • Properties
    • Events
    • Conversions
    • Binary Operators
    • Unary Operators
  • Generate method on Type Parameter

Metadata

Metadata

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions