Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Scala Macro Tools
提交
1b5cc306
S
Scala Macro Tools
项目概览
梦境迷离
/
Scala Macro Tools
上一次同步 大约 1 年
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Scala Macro Tools
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
1b5cc306
编写于
8月 02, 2021
作者:
I
IceMimosa
提交者:
GitHub
8月 02, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support generic with bound (#92)
上级
88423051
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
36 addition
and
8 deletion
+36
-8
intellij-plugin/src/main/scala/io/github/dreamylost/plugin/processor/AbsProcessor.scala
.../io/github/dreamylost/plugin/processor/AbsProcessor.scala
+16
-0
intellij-plugin/src/main/scala/io/github/dreamylost/plugin/processor/clazz/ApplyProcessor.scala
...ub/dreamylost/plugin/processor/clazz/ApplyProcessor.scala
+3
-2
intellij-plugin/src/main/scala/io/github/dreamylost/plugin/processor/clazz/BuilderProcessor.scala
.../dreamylost/plugin/processor/clazz/BuilderProcessor.scala
+7
-5
src/test/scala/io/github/dreamylost/ApplyTest.scala
src/test/scala/io/github/dreamylost/ApplyTest.scala
+4
-0
src/test/scala/io/github/dreamylost/BuilderTest.scala
src/test/scala/io/github/dreamylost/BuilderTest.scala
+6
-1
未找到文件。
intellij-plugin/src/main/scala/io/github/dreamylost/plugin/processor/AbsProcessor.scala
浏览文件 @
1b5cc306
...
...
@@ -52,4 +52,20 @@ abstract class AbsProcessor extends Processor {
)
}
}
/**
* get type param string
*
* @param returnType if it is return type
* @return
* if `returnType` is false, just return typeParamString with bound like [T <: Any, U]
* else return typeParamString without bound like [T, U]
*/
protected
def
getTypeParamString
(
clazz
:
ScClass
,
returnType
:
Boolean
=
false
)
:
String
=
{
if
(!
returnType
||
clazz
.
typeParamString
.
isEmpty
)
{
clazz
.
typeParamString
}
else
{
clazz
.
typeParameters
.
map
(
_
.
name
).
mkString
(
"["
,
", "
,
"]"
)
}
}
}
intellij-plugin/src/main/scala/io/github/dreamylost/plugin/processor/clazz/ApplyProcessor.scala
浏览文件 @
1b5cc306
...
...
@@ -24,8 +24,9 @@ class ApplyProcessor extends AbsProcessor {
val
nameAndTypes
=
getConstructorCurryingParameters
(
clazz
,
withSecond
=
false
)
.
map
(
_
.
map
(
o
=>
s
"${o._1}: ${o._2}"
).
mkString
(
"("
,
", "
,
")"
))
.
mkString
val
genericTypes
=
clazz
.
typeParamString
Seq
(
s
"def apply$genericTypes$nameAndTypes: ${clazz.getName}$genericTypes = ???"
)
val
genericType
=
getTypeParamString
(
clazz
)
val
returnGenericType
=
getTypeParamString
(
clazz
,
returnType
=
true
)
Seq
(
s
"def apply$genericType$nameAndTypes: ${clazz.getName}$returnGenericType = ???"
)
case
_
=>
Nil
}
case
_
=>
Nil
...
...
intellij-plugin/src/main/scala/io/github/dreamylost/plugin/processor/clazz/BuilderProcessor.scala
浏览文件 @
1b5cc306
...
...
@@ -25,8 +25,9 @@ class BuilderProcessor extends AbsProcessor {
case
obj
:
ScObject
=>
obj
.
fakeCompanionClassOrCompanionClass
match
{
case
clazz
:
ScClass
=>
val
genericTypes
=
clazz
.
typeParamString
Seq
(
s
"""def builder$genericTypes(): ${genBuilderName(clazz.getName, returnType = true)}$genericTypes = ???"""
)
val
genericType
=
getTypeParamString
(
clazz
)
val
returnGenericType
=
getTypeParamString
(
clazz
,
returnType
=
true
)
Seq
(
s
"""def builder$genericType(): ${genBuilderName(clazz.getName, returnType = true)}$returnGenericType = ???"""
)
case
_
=>
Nil
}
case
_
=>
Nil
...
...
@@ -40,14 +41,15 @@ class BuilderProcessor extends AbsProcessor {
val
className
=
clazz
.
getName
// support constructor and second constructor
val
nameAndTypes
=
getConstructorParameters
(
clazz
.
asInstanceOf
[
ScClass
])
val
genericTypes
=
clazz
.
typeParamString
val
genericType
=
getTypeParamString
(
clazz
)
val
returnGenericType
=
getTypeParamString
(
clazz
,
returnType
=
true
)
val
assignMethods
=
nameAndTypes
.
map
(
term
=>
s
"def ${term._1}(${term._1}: ${term._2}) = this"
)
Seq
(
s
"""
|class ${genBuilderName(className)}$genericType
s
{
| def build(): $className$
genericTypes
= ???
|class ${genBuilderName(className)}$genericType {
| def build(): $className$
returnGenericType
= ???
| ${assignMethods.mkString("\n")}
|}
|"""
.
stripMargin
...
...
src/test/scala/io/github/dreamylost/ApplyTest.scala
浏览文件 @
1b5cc306
...
...
@@ -76,6 +76,10 @@ class ApplyTest extends AnyFlatSpec with Matchers {
@toString
@apply
class
B4
[
T
,
U
](
int
:
T
,
val
j
:
U
)
println
(
B4
(
"helloworld"
,
2
))
@toString
@apply
class
B5
[
T
<:
Any
,
U
](
int
:
T
,
val
j
:
U
)
println
(
B5
(
"helloworld"
,
2
))
}
"apply5"
should
"failed when input not invalid"
in
{
"""@apply(true) class C2(int: Int, val j: Int, var k: Option[String] = None, t: Option[Long] = Some(1L))(o: Int = 1)"""
shouldNot
compile
...
...
src/test/scala/io/github/dreamylost/BuilderTest.scala
浏览文件 @
1b5cc306
...
...
@@ -119,8 +119,13 @@ class BuilderTest extends AnyFlatSpec with Matchers {
println
(
a
)
@builder
class
TestClass12
[
T
,
U
](
val
i
:
T
,
var
j
:
U
)
c
ase
c
lass
TestClass12
[
T
,
U
](
val
i
:
T
,
var
j
:
U
)
val
b
=
TestClass12
.
builder
().
i
(
new
AnyRef
).
j
(
List
(
"helloworld"
,
"generic is ok"
)).
build
()
println
(
b
)
@builder
case
class
TestClass13
[
T
<:
Any
,
U
](
val
i
:
T
,
var
j
:
U
)
val
c
=
TestClass13
.
builder
().
i
(
1
).
j
(
List
(
"helloworld"
,
"generic is ok"
)).
build
()
println
(
c
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录