Completion for java "expression" does't work with DTO as records
まだ誰も着手していません。
評価
調査の方向性
org.mapstruct.intellij.expression.JavaExpressionInjector から始め、Java 式のために解決されたターゲットがどのように型へ変換されるかを調べます。OrderDto record で補完リクエストを再現し、orderPaymentRefPayments に対する補完候補が表示されることを確認します。record component のターゲット型が解決され、既存のフィールド、メソッド、パラメーターの処理にリグレッションがないことが完了条件です。
索引モデルが issue の本文から書いたものです。
説明
Example mapper:
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface OrderMapper {
OrderGetAllDto toOrderDto(Order order);
default <T, R> R mapFromAggregateReference(AggregateReference<T, R> aggregateReference) {
if (aggregateReference == null) {
return null;
}
return aggregateReference.getId();
}
@Mapping(target = "orderPaymentRefPayments", expression = "java(orderPaymentRefsToOrderPaymentRefPayments())")
OrderDto toOrderGetOneDto(Order order);
default Set<Long> orderPaymentRefsToOrderPaymentRefPayments(Set<OrderPaymentRef> orderPaymentRefs) {
return orderPaymentRefs.stream()
.map(OrderPaymentRef::getPayment)
.map(AggregateReference::getId)
.collect(Collectors.toSet());
}
}
DTO as JAVA record:
public record OrderDto(Long id, String number, Integer owner, Set<Long> orderPaymentRefPayments,
List<OrderItemDto> orderItems, BigDecimal totalCost, LocalDateTime createdDate,
LocalDateTime lastModifiedDate) {
/**
* DTO for {@link OrderItem}
*/
public record OrderItemDto(Long id, Long service, Integer quantity, String serviceName, BigDecimal price,
BigDecimal cost) {
}
}
When writing an JAVA expression for
@Mapping(target = "orderPaymentRefPayments", expression = "java()")
completion hints are not displayed.
Because OrderDto is a record and it's not possible to resolve target type in sources org.mapstruct.intellij.expression.JavaExpressionInjector, see
PsiElement resolved = references[0].resolve();
if ( resolved instanceof PsiMethod resolvedPsiMethod ) {
PsiParameter[] psiParameters =
resolvedPsiMethod.getParameterList().getParameters();
if ( psiParameters.length > 0) {
targetType = psiParameters[0].getType();
}
}
else if ( resolved instanceof PsiParameter resolvedPsiParameter ) {
targetType = resolvedPsiParameter.getType();
}
else if ( resolved instanceof PsiField resolvedPsiField ) {
targetType = resolvedPsiField.getType();
}
- 主要言語
- Java
- スター
- 168
- フォーク
- 41
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
mapstruct/mapstruct-idea のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
mapstruct/mapstruct-idea#274 · コメント 2 件 ·
-
feature hack.commit.push
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
mapstruct/mapstruct-idea#267 ·
-
feature hack.commit.push
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
mapstruct/mapstruct-idea#266 ·
-
feature hack.commit.push
難易度 3/5 1〜2日 初心者へのやさしさ 75/100
mapstruct/mapstruct-idea#265 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
mapstruct/mapstruct-idea#257 · コメント 1 件 ·
mapstruct/mapstruct-idea の issue をすべて見る
似ている issue
-
awaiting triage bug Causes friction Hop Gui P1 P2 Transforms
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
apache/flink-agents#1152 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
jenkinsci/blueocean-plugin#5417 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
objectionary/eo-graphs#75 ·