Skip to content

Class static abstract methods on interfaces don't work #21060

@jborean93

Description

@jborean93

Prerequisites

Steps to reproduce

Add-Type -TypeDefinition @'
public interface IMethod
{
    static abstract int GetId();
}

public class CSharpMethod : IMethod
{
    public static int GetId() => 1;
}
'@

class PwshMethod : IMethod {
    static [int] GetId() { return 1 }
}

Expected behavior

Class is created and you can do `[PwshMethod]::GetId()` to return `1`.

Actual behavior

ParserError:
Line |
   1 |  class PwshMethod : IMethod {
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Error during creation of type "PwshMethod". Error message: Virtual static method 'GetId' is not implemented on type 'PwshMethod' from assembly 'PowerShell Class Assembly,
     | Version=1.0.0.1, Culture=neutral, PublicKeyToken=null'.

Error details

Type        : System.Management.Automation.ParseException
Errors      :
    Extent  : class PwshMethod : IMethod {
              static [int] GetId() { return 1 }
              }
    ErrorId : TypeCreationError
    Message : Error during creation of type "PwshMethod". Error message:
              Virtual static method 'GetId' is not implemented on type 'PwshMethod' from assembly 'PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null'.
Message     : At line:1 char:1
              + class PwshMethod : IMethod {
              + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              Error during creation of type "PwshMethod". Error message:
              Virtual static method 'GetId' is not implemented on type 'PwshMethod' from assembly 'PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null'.
ErrorRecord :
    Exception             :
        Type    : System.Management.Automation.ParentContainsErrorRecordException
        Message : At line:1 char:1
                  + class PwshMethod : IMethod {
                  + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  Error during creation of type "PwshMethod". Error message:
                  Virtual static method 'GetId' is not implemented on type 'PwshMethod' from assembly 'PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral,
PublicKeyToken=null'.
        HResult : -2146233087
    CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    FullyQualifiedErrorId : TypeCreationError
    InvocationInfo        :
        ScriptLineNumber : 1
        OffsetInLine     : 1
        HistoryId        : -1
        Line             : class PwshMethod : IMethod {

        Statement        : class PwshMethod : IMethod {
                           static [int] GetId() { return 1 }
                           }
        PositionMessage  : At line:1 char:1
                           + class PwshMethod : IMethod {
                           + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        CommandOrigin    : Internal
TargetSite  :
    Name          : Invoke
    DeclaringType : System.Management.Automation.Runspaces.PipelineBase, System.Management.Automation, Version=7.4.0.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35
    MemberType    : Method
    Module        : System.Management.Automation.dll
Source      : System.Management.Automation
HResult     : -2146233087
StackTrace  :
   at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
   at Microsoft.PowerShell.Executor.ExecuteCommandHelper(Pipeline tempPipeline, Exception& exceptionThrown, ExecutionOptions options)

Environment data

Name                           Value
----                           -----
PSVersion                      7.4.0
PSEdition                      Core
GitCommitId                    7.4.0
OS                             Arch Linux
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Visuals

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    In-PRIndicates that a PR is out for the issueWG-Enginecore PowerShell engine, interpreter, and runtimeWG-TriagedThe issue has been triaged by the designated WG.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions