Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Graphql Java Codegen
提交
f0fc9665
G
Graphql Java Codegen
项目概览
梦境迷离
/
Graphql Java Codegen
11 个月 前同步成功
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Graphql Java Codegen
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
f0fc9665
编写于
12月 04, 2020
作者:
B
Bogdan Kobylynskyi
提交者:
GitHub
12月 04, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Consider case when both Optional & apiReturnType is used #410 (#414)
上级
ed0c7422
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
77 addition
and
45 deletion
+77
-45
src/main/java/com/kobylynskyi/graphql/codegen/mapper/FieldDefinitionToParameterMapper.java
...phql/codegen/mapper/FieldDefinitionToParameterMapper.java
+1
-1
src/main/java/com/kobylynskyi/graphql/codegen/mapper/FieldDefinitionsToResolverDataModelMapper.java
...gen/mapper/FieldDefinitionsToResolverDataModelMapper.java
+9
-2
src/main/java/com/kobylynskyi/graphql/codegen/mapper/GraphqlTypeToJavaTypeMapper.java
...i/graphql/codegen/mapper/GraphqlTypeToJavaTypeMapper.java
+41
-41
src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputValueDefinitionToParameterMapper.java
...codegen/mapper/InputValueDefinitionToParameterMapper.java
+1
-1
src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenOptionalTest.java
...bylynskyi/graphql/codegen/GraphQLCodegenOptionalTest.java
+15
-0
src/test/resources/expected-classes/optional/NodeQueryResolver_mono.java.txt
...expected-classes/optional/NodeQueryResolver_mono.java.txt
+10
-0
未找到文件。
src/main/java/com/kobylynskyi/graphql/codegen/mapper/FieldDefinitionToParameterMapper.java
浏览文件 @
f0fc9665
...
...
@@ -70,7 +70,7 @@ public class FieldDefinitionToParameterMapper {
ParameterDefinition
parameter
=
new
ParameterDefinition
();
parameter
.
setName
(
MapperUtils
.
capitalizeIfRestricted
(
mappingContext
,
fieldDef
.
getName
()));
parameter
.
setOriginalName
(
fieldDef
.
getName
());
parameter
.
setType
(
GraphqlTypeToJavaTypeMapper
.
getTypeConsideringPrimitive
(
mappingContext
,
namedDefinition
));
parameter
.
setType
(
GraphqlTypeToJavaTypeMapper
.
getTypeConsideringPrimitive
(
mappingContext
,
namedDefinition
,
namedDefinition
.
getJavaName
()
));
parameter
.
setAnnotations
(
GraphqlTypeToJavaTypeMapper
.
getAnnotations
(
mappingContext
,
fieldDef
.
getType
(),
fieldDef
,
parentTypeName
,
false
));
parameter
.
setJavaDoc
(
fieldDef
.
getJavaDoc
());
parameter
.
setDeprecated
(
fieldDef
.
isDeprecated
());
...
...
src/main/java/com/kobylynskyi/graphql/codegen/mapper/FieldDefinitionsToResolverDataModelMapper.java
浏览文件 @
f0fc9665
...
...
@@ -22,7 +22,14 @@ import java.util.Map;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.*;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
CLASS_NAME
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
ENUM_IMPORT_IT_SELF_IN_SCALA
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
GENERATED_INFO
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
IMPLEMENTS
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
IMPORTS
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
JAVA_DOC
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
OPERATIONS
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
DataModelFields
.
PACKAGE
;
import
static
com
.
kobylynskyi
.
graphql
.
codegen
.
model
.
MappingConfigConstants
.
PARENT_INTERFACE_TYPE_PLACEHOLDER
;
import
static
java
.
util
.
Collections
.
emptyList
;
import
static
java
.
util
.
Collections
.
singletonList
;
...
...
@@ -215,7 +222,7 @@ public class FieldDefinitionsToResolverDataModelMapper {
}
}
}
return
GraphqlTypeToJavaTypeMapper
.
wrapApiReturnTypeIfRequired
(
mappingContext
,
fieldDef
,
namedDefinition
,
parentTypeName
);
return
GraphqlTypeToJavaTypeMapper
.
wrapApiReturnTypeIfRequired
(
mappingContext
,
namedDefinition
,
parentTypeName
);
}
}
src/main/java/com/kobylynskyi/graphql/codegen/mapper/GraphqlTypeToJavaTypeMapper.java
浏览文件 @
f0fc9665
...
...
@@ -4,7 +4,6 @@ import com.kobylynskyi.graphql.codegen.model.GeneratedLanguage;
import
com.kobylynskyi.graphql.codegen.model.MappingContext
;
import
com.kobylynskyi.graphql.codegen.model.NamedDefinition
;
import
com.kobylynskyi.graphql.codegen.model.definitions.ExtendedDefinition
;
import
com.kobylynskyi.graphql.codegen.model.definitions.ExtendedFieldDefinition
;
import
com.kobylynskyi.graphql.codegen.model.graphql.GraphQLOperation
;
import
com.kobylynskyi.graphql.codegen.utils.Utils
;
import
graphql.language.Argument
;
...
...
@@ -296,67 +295,68 @@ public class GraphqlTypeToJavaTypeMapper {
* @return Java/Scala type wrapped into the subscriptionReturnType
*/
static
String
wrapApiReturnTypeIfRequired
(
MappingContext
mappingContext
,
ExtendedFieldDefinition
fieldDef
,
NamedDefinition
namedDefinition
,
String
parentTypeName
)
{
String
javaTypeName
=
namedDefinition
.
getJavaName
();
if
(
parentTypeName
.
equalsIgnoreCase
(
GraphQLOperation
.
SUBSCRIPTION
.
name
()))
{
if
(
Utils
.
isNotBlank
(
mappingContext
.
getSubscriptionReturnType
()))
{
// in case it is subscription and subscriptionReturnType is set
return
getGenericsString
(
mappingContext
,
mappingContext
.
getSubscriptionReturnType
(),
javaTypeName
);
String
computedTypeName
=
namedDefinition
.
getJavaName
();
if
(
parentTypeName
.
equalsIgnoreCase
(
GraphQLOperation
.
SUBSCRIPTION
.
name
())
&&
Utils
.
isNotBlank
(
mappingContext
.
getSubscriptionReturnType
()))
{
// in case it is subscription and subscriptionReturnType is set
return
getGenericsString
(
mappingContext
,
mappingContext
.
getSubscriptionReturnType
(),
computedTypeName
);
}
if
(
Boolean
.
TRUE
.
equals
(
mappingContext
.
getUseOptionalForNullableReturnTypes
())
&&
!
namedDefinition
.
isMandatory
())
{
if
(
GeneratedLanguage
.
SCALA
.
equals
(
mappingContext
.
getGeneratedLanguage
())
&&
!
computedTypeName
.
startsWith
(
SCALA_UTIL_LIST
)
&&
!
computedTypeName
.
startsWith
(
JAVA_UTIL_LIST
))
{
// wrap the type into java.util.Optional (except java list and scala list)
computedTypeName
=
getGenericsString
(
mappingContext
,
SCALA_UTIL_OPTIONAL
,
computedTypeName
);
}
else
if
(!
computedTypeName
.
startsWith
(
JAVA_UTIL_LIST
))
{
// wrap the type into java.util.Optional (except lists)
computedTypeName
=
getGenericsString
(
mappingContext
,
JAVA_UTIL_OPTIONAL
,
computedTypeName
);
}
}
else
if
(
Boolean
.
TRUE
.
equals
(
mappingContext
.
getUseOptionalForNullableReturnTypes
()))
{
// wrap the type into java.util.Optional (except lists)
if
(!
namedDefinition
.
isMandatory
()
&&
!
javaTypeName
.
startsWith
(
JAVA_UTIL_LIST
))
{
return
getGenericsString
(
mappingContext
,
JAVA_UTIL_OPTIONAL
,
javaTypeName
);
}
// scala
if
(
GeneratedLanguage
.
SCALA
.
equals
(
mappingContext
.
getGeneratedLanguage
()))
{
if
(
computedTypeName
.
startsWith
(
SCALA_UTIL_LIST
)
&&
Utils
.
isNotBlank
(
mappingContext
.
getApiReturnListType
()))
{
// in case it is query/mutation, return type is list and apiReturnListType is set
return
computedTypeName
.
replace
(
SCALA_UTIL_LIST
,
mappingContext
.
getApiReturnListType
());
}
// wrap the type into java.util.Optional (except java list and scala list)
if
(!
namedDefinition
.
isMandatory
()
&&
!
javaTypeName
.
startsWith
(
SCALA_UTIL_LIST
)
&&
!
javaTypeName
.
startsWith
(
JAVA_UTIL_LIST
))
{
return
getGenericsString
(
mappingContext
,
SCALA_UTIL_OPTIONAL
,
java
TypeName
);
if
(
Utils
.
isNotBlank
(
mappingContext
.
getApiReturnType
()))
{
// in case it is query/mutation and apiReturnType is set
return
getGenericsString
(
mappingContext
,
mappingContext
.
getApiReturnType
(),
computed
TypeName
);
}
}
else
{
// scala
if
(
GeneratedLanguage
.
SCALA
.
equals
(
mappingContext
.
getGeneratedLanguage
()))
{
if
(
javaTypeName
.
startsWith
(
SCALA_UTIL_LIST
)
&&
Utils
.
isNotBlank
(
mappingContext
.
getApiReturnListType
()))
{
// in case it is query/mutation, return type is list and apiReturnListType is set
return
javaTypeName
.
replace
(
SCALA_UTIL_LIST
,
mappingContext
.
getApiReturnListType
());
}
if
(
Utils
.
isNotBlank
(
mappingContext
.
getApiReturnType
()))
{
// in case it is query/mutation and apiReturnType is set
return
getGenericsString
(
mappingContext
,
mappingContext
.
getApiReturnType
(),
javaTypeName
);
}
}
if
(
javaTypeName
.
startsWith
(
JAVA_UTIL_LIST
)
&&
if
(
computedTypeName
.
startsWith
(
JAVA_UTIL_LIST
)
&&
Utils
.
isNotBlank
(
mappingContext
.
getApiReturnListType
()))
{
// in case it is query/mutation, return type is list and apiReturnListType is set
return
java
TypeName
.
replace
(
JAVA_UTIL_LIST
,
mappingContext
.
getApiReturnListType
());
return
computed
TypeName
.
replace
(
JAVA_UTIL_LIST
,
mappingContext
.
getApiReturnListType
());
}
if
(
Utils
.
isNotBlank
(
mappingContext
.
getApiReturnType
()))
{
// in case it is query/mutation and apiReturnType is set
return
getGenericsString
(
mappingContext
,
mappingContext
.
getApiReturnType
(),
java
TypeName
);
return
getGenericsString
(
mappingContext
,
mappingContext
.
getApiReturnType
(),
computed
TypeName
);
}
}
return
GraphqlTypeToJavaTypeMapper
.
getTypeConsideringPrimitive
(
mappingContext
,
namedDefinition
);
return
GraphqlTypeToJavaTypeMapper
.
getTypeConsideringPrimitive
(
mappingContext
,
namedDefinition
,
computedTypeName
);
}
public
static
String
getTypeConsideringPrimitive
(
MappingContext
mappingContext
,
NamedDefinition
namedDefinition
)
{
NamedDefinition
namedDefinition
,
String
computedTypeName
)
{
String
graphqlTypeName
=
namedDefinition
.
getGraphqlTypeName
();
if
(
namedDefinition
.
isMandatory
()
&&
namedDefinition
.
isPrimitiveCanBeUsed
())
{
String
possiblyPrimitiveType
=
mappingContext
.
getCustomTypesMapping
().
get
(
getMandatoryType
(
graphqlTypeName
));
if
(
GeneratedLanguage
.
JAVA
.
equals
(
mappingContext
.
getGeneratedLanguage
()))
{
if
(
isJavaPrimitive
(
possiblyPrimitiveType
))
{
return
possiblyPrimitiveType
;
}
}
else
if
(
GeneratedLanguage
.
SCALA
.
equals
(
mappingContext
.
getGeneratedLanguage
()))
{
if
(
isScalaPrimitive
(
possiblyPrimitiveType
))
{
return
possiblyPrimitiveType
;
}
if
(
isPrimitive
(
mappingContext
,
possiblyPrimitiveType
))
{
return
possiblyPrimitiveType
;
}
//TODO kotlin
}
return
namedDefinition
.
getJavaName
();
return
computedTypeName
;
}
private
static
boolean
isPrimitive
(
MappingContext
mappingContext
,
String
possiblyPrimitiveType
)
{
GeneratedLanguage
generatedLanguage
=
mappingContext
.
getGeneratedLanguage
();
// TODO kotlin
return
GeneratedLanguage
.
JAVA
.
equals
(
generatedLanguage
)
&&
isJavaPrimitive
(
possiblyPrimitiveType
)
||
GeneratedLanguage
.
SCALA
.
equals
(
generatedLanguage
)
&&
isScalaPrimitive
(
possiblyPrimitiveType
);
}
public
static
boolean
isJavaPrimitive
(
String
javaType
)
{
...
...
src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputValueDefinitionToParameterMapper.java
浏览文件 @
f0fc9665
...
...
@@ -49,7 +49,7 @@ public class InputValueDefinitionToParameterMapper {
ParameterDefinition
parameter
=
new
ParameterDefinition
();
parameter
.
setName
(
MapperUtils
.
capitalizeIfRestricted
(
mappingContext
,
inputValueDefinition
.
getName
()));
parameter
.
setOriginalName
(
inputValueDefinition
.
getName
());
parameter
.
setType
(
GraphqlTypeToJavaTypeMapper
.
getTypeConsideringPrimitive
(
mappingContext
,
namedDefinition
));
parameter
.
setType
(
GraphqlTypeToJavaTypeMapper
.
getTypeConsideringPrimitive
(
mappingContext
,
namedDefinition
,
namedDefinition
.
getJavaName
()
));
parameter
.
setDefaultValue
(
ValueMapper
.
map
(
mappingContext
,
inputValueDefinition
.
getDefaultValue
(),
inputValueDefinition
.
getType
()));
parameter
.
setAnnotations
(
GraphqlTypeToJavaTypeMapper
.
getAnnotations
(
mappingContext
,
inputValueDefinition
.
getType
(),
inputValueDefinition
,
parentTypeName
,
false
));
parameter
.
setDeprecated
(
isDeprecated
(
inputValueDefinition
));
...
...
src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenOptionalTest.java
浏览文件 @
f0fc9665
...
...
@@ -56,4 +56,19 @@ class GraphQLCodegenOptionalTest {
getFileByName
(
files
,
"QueryResolver.java"
));
}
@Test
void
generate_OptionalWithCustomApiReturnType
()
throws
Exception
{
mappingConfig
.
setApiReturnType
(
"reactor.core.publisher.Mono"
);
mappingConfig
.
setApiReturnListType
(
"reactor.core.publisher.Flux"
);
new
GraphQLCodegen
(
schemaFinder
.
findSchemas
(),
outputBuildDir
,
mappingConfig
,
TestUtils
.
getStaticGeneratedInfo
())
.
generate
();
File
[]
files
=
Objects
.
requireNonNull
(
outputJavaClassesDir
.
listFiles
());
// node(id: ID!): Node
assertSameTrimmedContent
(
new
File
(
"src/test/resources/expected-classes/optional/NodeQueryResolver_mono.java.txt"
),
getFileByName
(
files
,
"NodeQueryResolver.java"
));
}
}
\ No newline at end of file
src/test/resources/expected-classes/optional/NodeQueryResolver_mono.java.txt
0 → 100644
浏览文件 @
f0fc9665
@javax.annotation.Generated(
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
date = "2020-12-31T23:59:59-0500"
)
public interface NodeQueryResolver {
reactor.core.publisher.Mono<java.util.Optional<Node>> node(String id) throws Exception;
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录