aws / aws/jsii

Structs + type unions don't work in Java

Open
#2,852 1 comment 0 reactions 0 assignees View on GitHub
bug language/java p1
Dominant language
TypeScript
Stars
2.9k
Forks
267
Avg merge
1d 25m
Merged PRs (30d)
14

Description

## :bug: Bug Report

### Affected Languages

- [ ] `TypeScript` or `Javascript`
- [ ] `Python`
- [x] `Java`
- [ ] .NET (`C#`, `F#`, ...)
- [ ] `Go`

### General Information
* **JSII Version:** 1.29.0
* **Platform:** Darwin 186590cdb71d.ant.amazon.com 18.7.0 Darwin Kernel Version 18.7.0: Mon Mar 8 22:11:48 PST 2021; root:xnu-4903.278.65~1/RELEASE_X86_64 x86_64

### What is the problem?

Structs that have type unions do not work correctly in Java.

For example:

```java
CfnBucket cfnBucket = CfnBucket.Builder.create(this, "CfnBucket").build();
cfnBucket.setAccelerateConfiguration(CfnBucket.AccelerateConfigurationProperty.builder()
.accelerationStatus("Suspended")
.build());
System.out.println(cfnBucket.getAccelerateConfiguration());
```

prints out:

```
software.amazon.jsii.JsiiObject@68a13400
```

while it clearly should return an instance of `CfnBucket.AccelerateConfigurationProperty`.

This is not a problem in other languages; for example, in Python:

```python
bucket = s3.CfnBucket(
self, 'CfnBucket'
)
bucket.accelerate_configuration = s3.CfnBucket.AccelerateConfigurationProperty(
acceleration_status='Suspended',
)
print(bucket.accelerate_configuration)
```

prints out:

```
AccelerateConfigurationProperty(acceleration_status='Suspended')
```

Which is what I would expect.

This is negatively impacting CDK customers that use Java (example: https://github.com/aws/aws-cdk/issues/12338).

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the Java CfnBucket.AccelerateConfigurationProperty example and comparing its getter output with the Python example. Trace how jsii represents and returns Java structs containing type unions; the issue is done when the Java getter returns the expected AccelerateConfigurationProperty instance instead of a generic JsiiObject.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, typescript
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.