Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: failure on anonymous class with a method #1824

Merged
merged 7 commits into from
Mar 5, 2025

Conversation

rix0rrr
Copy link
Contributor

@rix0rrr rix0rrr commented Mar 4, 2025

jsii used to fail when trying to generate deprecation warnings and
given a statement like this:

export function propertyInjectionDecorator<T extends Constructor>(ctr: T) {
  // Important for the bug: the anonymous class extends something, *and*
  // declares a method.
  return class extends ctr {
    public someMethod(): string {
      return 'abc';
    }
  };
}

The reason is that during generation of deprecation warnings we iterate
over all classes and methods (both exported and unexported), and
generate a symbol identifier for every method; but this class is anonymous
so it doesn't have a symbol, and generating the identifier fails with
the error:

TypeError: Cannot read properties of undefined (reading 'flags')
    at symbolIdentifier (.../jsii/lib/common/symbol-id.js:40:17)

Handle this by handling the case where we don't have a symbol
and returning undefined.

Fixes aws/aws-cdk#33213


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

`jsii` used to fail when trying to generate deprecation warnings and
given a statement like this:

```ts
export function propertyInjectionDecorator<T extends Constructor>(ctr: T) {
  // Important for the bug: the anonymous class extends something, *and*
  // declares a method.
  return class extends ctr {
    public someMethod(): string {
      return 'abc';
    }
  };
}
```

The reason is that during generation of deprecation warnings we iterate
over all classes and methods (both exported and unexported), and
generate a symbol identifier for every method; but this class is anonymous
so it doesn't have a symbol, and generating the identifier fails with
the error:

```
TypeError: Cannot read properties of undefined (reading 'flags')
    at symbolIdentifier (.../jsii/lib/common/symbol-id.js:40:17)
```

Handle this by handling the case where we don't have a symbol
and returning `undefined`.
@rix0rrr rix0rrr force-pushed the huijbers/decorators branch from efa57b2 to c91e88b Compare March 5, 2025 12:51
@rix0rrr rix0rrr changed the title feat: decorators fix: fails when a method returns an anonymous class with a method Mar 5, 2025
@rix0rrr rix0rrr changed the title fix: fails when a method returns an anonymous class with a method fix: failure when a method returns an anonymous class with a method Mar 5, 2025
@rix0rrr rix0rrr changed the title fix: failure when a method returns an anonymous class with a method fix: failure on anonymous class with a method Mar 5, 2025
@aws-cdk-automation aws-cdk-automation added this pull request to the merge queue Mar 5, 2025
Merged via the queue into main with commit dbd4506 Mar 5, 2025
72 checks passed
@aws-cdk-automation aws-cdk-automation deleted the huijbers/decorators branch March 5, 2025 18:45
rix0rrr added a commit to aws/aws-cdk that referenced this pull request Mar 10, 2025
This brings in this fix: aws/jsii-compiler#1824

This prevents jsii from failing on cases where we return an anonymous
class with methods from a method.
mergify bot pushed a commit to aws/aws-cdk that referenced this pull request Mar 10, 2025
This brings in this fix: aws/jsii-compiler#1824

This prevents jsii from failing on cases where we return an anonymous class with methods from a method.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
aws-cdk-automation pushed a commit that referenced this pull request Mar 10, 2025
`jsii` used to fail when trying to generate deprecation warnings and
given a statement like this:

```ts
export function propertyInjectionDecorator<T extends Constructor>(ctr: T) {
  // Important for the bug: the anonymous class extends something, *and*
  // declares a method.
  return class extends ctr {
    public someMethod(): string {
      return 'abc';
    }
  };
}
```

The reason is that during generation of deprecation warnings we iterate
over all classes and methods (both exported and unexported), and
generate a symbol identifier for every method; but this class is
anonymous
so it doesn't have a symbol, and generating the identifier fails with
the error:

```
TypeError: Cannot read properties of undefined (reading 'flags')
    at symbolIdentifier (.../jsii/lib/common/symbol-id.js:40:17)
```

Handle this by handling the case where we don't have a symbol
and returning `undefined`.

Fixes aws/aws-cdk#33213

---

By submitting this pull request, I confirm that my contribution is made
under the terms of the [Apache 2.0 license].

[Apache 2.0 license]: https://www.apache.org/licenses/LICENSE-2.0

---------

Co-authored-by: Eli Polonsky <Eli.polonsky@gmail.com>
(cherry picked from commit dbd4506)
aws-cdk-automation pushed a commit that referenced this pull request Mar 10, 2025
`jsii` used to fail when trying to generate deprecation warnings and
given a statement like this:

```ts
export function propertyInjectionDecorator<T extends Constructor>(ctr: T) {
  // Important for the bug: the anonymous class extends something, *and*
  // declares a method.
  return class extends ctr {
    public someMethod(): string {
      return 'abc';
    }
  };
}
```

The reason is that during generation of deprecation warnings we iterate
over all classes and methods (both exported and unexported), and
generate a symbol identifier for every method; but this class is
anonymous
so it doesn't have a symbol, and generating the identifier fails with
the error:

```
TypeError: Cannot read properties of undefined (reading 'flags')
    at symbolIdentifier (.../jsii/lib/common/symbol-id.js:40:17)
```

Handle this by handling the case where we don't have a symbol
and returning `undefined`.

Fixes aws/aws-cdk#33213

---

By submitting this pull request, I confirm that my contribution is made
under the terms of the [Apache 2.0 license].

[Apache 2.0 license]: https://www.apache.org/licenses/LICENSE-2.0

---------

Co-authored-by: Eli Polonsky <Eli.polonsky@gmail.com>
(cherry picked from commit dbd4506)
aws-cdk-automation pushed a commit that referenced this pull request Mar 10, 2025
`jsii` used to fail when trying to generate deprecation warnings and
given a statement like this:

```ts
export function propertyInjectionDecorator<T extends Constructor>(ctr: T) {
  // Important for the bug: the anonymous class extends something, *and*
  // declares a method.
  return class extends ctr {
    public someMethod(): string {
      return 'abc';
    }
  };
}
```

The reason is that during generation of deprecation warnings we iterate
over all classes and methods (both exported and unexported), and
generate a symbol identifier for every method; but this class is
anonymous
so it doesn't have a symbol, and generating the identifier fails with
the error:

```
TypeError: Cannot read properties of undefined (reading 'flags')
    at symbolIdentifier (.../jsii/lib/common/symbol-id.js:40:17)
```

Handle this by handling the case where we don't have a symbol
and returning `undefined`.

Fixes aws/aws-cdk#33213

---

By submitting this pull request, I confirm that my contribution is made
under the terms of the [Apache 2.0 license].

[Apache 2.0 license]: https://www.apache.org/licenses/LICENSE-2.0

---------

Co-authored-by: Eli Polonsky <Eli.polonsky@gmail.com>
(cherry picked from commit dbd4506)
@aws-cdk-automation
Copy link
Collaborator

💔 Some backports could not be created

Status Branch Result
maintenance/v5.5 An unhandled error occurred. Please see the logs for details
maintenance/v5.6

Manual backport

To create the backport manually run:

backport --pr 1824

Questions ?

Please refer to the Backport tool documentation and see the Github Action logs for details

@aws-cdk-automation
Copy link
Collaborator

💚 All backports created successfully

Status Branch Result
maintenance/v5.5
maintenance/v5.6

Questions ?

Please refer to the Backport tool documentation and see the Github Action logs for details

github-merge-queue bot pushed a commit that referenced this pull request Mar 10, 2025
# Backport

This will backport the following commits from `main` to
`maintenance/v5.6`:
- [fix: failure on anonymous class with a method
(#1824)](#1824)

<!--- Backport version: 9.5.1 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

Co-authored-by: Rico Hermans <rix0rrr@gmail.com>
github-merge-queue bot pushed a commit that referenced this pull request Mar 10, 2025
# Backport

This will backport the following commits from `main` to
`maintenance/v5.5`:
- [fix: failure on anonymous class with a method
(#1824)](#1824)

<!--- Backport version: 9.5.1 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

Co-authored-by: Rico Hermans <rix0rrr@gmail.com>
paulhcsun pushed a commit to paulhcsun/aws-cdk that referenced this pull request Mar 11, 2025
This brings in this fix: aws/jsii-compiler#1824

This prevents jsii from failing on cases where we return an anonymous class with methods from a method.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants