Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
3193b7d2
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3193b7d2
编写于
11月 12, 2011
作者:
S
Stepan Koltsov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix incorrect overload error on regular function and extension function with same name
=== fun ff() = 1 fun Int.ff() = 1 ===
上级
50c7364f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
52 addition
and
11 deletion
+52
-11
compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java
...nd/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java
+29
-11
compiler/testData/checkerWithErrorTypes/quick/ConflictingOverloads.jet
...Data/checkerWithErrorTypes/quick/ConflictingOverloads.jet
+19
-0
compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java
compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java
+4
-0
未找到文件。
compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java
浏览文件 @
3193b7d2
...
@@ -7,12 +7,10 @@ import com.google.common.collect.Sets;
...
@@ -7,12 +7,10 @@ import com.google.common.collect.Sets;
import
com.intellij.util.Function
;
import
com.intellij.util.Function
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.descriptors.*
;
import
org.jetbrains.jet.lang.descriptors.*
;
import
org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor
;
import
org.jetbrains.jet.lang.types.*
;
import
org.jetbrains.jet.lang.types.*
;
import
java.util.Collection
;
import
java.util.*
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
/**
/**
* @author abreslav
* @author abreslav
...
@@ -95,6 +93,26 @@ public class OverridingUtil {
...
@@ -95,6 +93,26 @@ public class OverridingUtil {
public
static
OverrideCompatibilityInfo
isOverridableBy
(
@NotNull
CallableDescriptor
superDescriptor
,
@NotNull
CallableDescriptor
subDescriptor
)
{
public
static
OverrideCompatibilityInfo
isOverridableBy
(
@NotNull
CallableDescriptor
superDescriptor
,
@NotNull
CallableDescriptor
subDescriptor
)
{
return
isOverridableByImpl
(
superDescriptor
,
subDescriptor
,
true
);
return
isOverridableByImpl
(
superDescriptor
,
subDescriptor
,
true
);
}
}
private
static
List
<
JetType
>
compiledValueParameters
(
CallableDescriptor
callableDescriptor
)
{
ReceiverDescriptor
receiverParameter
=
callableDescriptor
.
getReceiverParameter
();
ArrayList
<
JetType
>
parameters
=
new
ArrayList
<
JetType
>();
if
(
receiverParameter
.
exists
())
{
parameters
.
add
(
receiverParameter
.
getType
());
}
for
(
ValueParameterDescriptor
valueParameterDescriptor
:
callableDescriptor
.
getValueParameters
())
{
parameters
.
add
(
valueParameterDescriptor
.
getOutType
());
}
return
parameters
;
}
private
static
int
compiledValueParameterCount
(
CallableDescriptor
callableDescriptor
)
{
if
(
callableDescriptor
.
getReceiverParameter
().
exists
())
{
return
1
+
callableDescriptor
.
getValueParameters
().
size
();
}
else
{
return
callableDescriptor
.
getValueParameters
().
size
();
}
}
/**
/**
* @param forOverride true for override, false for overload
* @param forOverride true for override, false for overload
...
@@ -116,7 +134,7 @@ public class OverridingUtil {
...
@@ -116,7 +134,7 @@ public class OverridingUtil {
return
OverrideCompatibilityInfo
.
typeParameterNumberMismatch
();
return
OverrideCompatibilityInfo
.
typeParameterNumberMismatch
();
}
}
if
(
superDescriptor
.
getValueParameters
().
size
()
!=
subDescriptor
.
getValueParameters
().
size
(
))
{
if
(
compiledValueParameterCount
(
superDescriptor
)
!=
compiledValueParameterCount
(
subDescriptor
))
{
return
OverrideCompatibilityInfo
.
valueParameterNumberMismatch
();
return
OverrideCompatibilityInfo
.
valueParameterNumberMismatch
();
}
}
...
@@ -139,13 +157,13 @@ public class OverridingUtil {
...
@@ -139,13 +157,13 @@ public class OverridingUtil {
}
}
}
}
List
<
ValueParameterDescriptor
>
superValueParameters
=
superDescriptor
.
getValueParameters
(
);
List
<
JetType
>
superValueParameters
=
compiledValueParameters
(
superDescriptor
);
List
<
ValueParameterDescriptor
>
subValueParameters
=
subDescriptor
.
getValueParameters
(
);
List
<
JetType
>
subValueParameters
=
compiledValueParameters
(
subDescriptor
);
for
(
int
i
=
0
,
unsubstitutedValueParametersSize
=
superValueParameters
.
size
();
i
<
unsubstitutedValueParametersSize
;
i
++)
{
for
(
int
i
=
0
,
unsubstitutedValueParametersSize
=
superValueParameters
.
size
();
i
<
unsubstitutedValueParametersSize
;
i
++)
{
ValueParameterDescriptor
superValueParameter
=
superValueParameters
.
get
(
i
);
JetType
superValueParameter
=
superValueParameters
.
get
(
i
);
ValueParameterDescriptor
subValueParameter
=
subValueParameters
.
get
(
i
);
JetType
subValueParameter
=
subValueParameters
.
get
(
i
);
if
(!
JetTypeImpl
.
equalTypes
(
superValueParameter
.
getOutType
(),
subValueParameter
.
getOutType
()
,
axioms
))
{
if
(!
JetTypeImpl
.
equalTypes
(
superValueParameter
,
subValueParameter
,
axioms
))
{
return
OverrideCompatibilityInfo
.
valueParameterTypeMismatch
(
superValueParameter
,
subValueParameter
);
return
OverrideCompatibilityInfo
.
valueParameterTypeMismatch
(
superValueParameter
,
subValueParameter
);
}
}
}
}
...
@@ -209,7 +227,7 @@ public class OverridingUtil {
...
@@ -209,7 +227,7 @@ public class OverridingUtil {
}
}
@NotNull
@NotNull
public
static
OverrideCompatibilityInfo
valueParameterTypeMismatch
(
ValueParameterDescriptor
superValueParameter
,
ValueParameterDescriptor
subValueParameter
)
{
public
static
OverrideCompatibilityInfo
valueParameterTypeMismatch
(
JetType
superValueParameter
,
JetType
subValueParameter
)
{
return
new
OverrideCompatibilityInfo
(
false
,
"valueParameterTypeMismatch"
);
// TODO
return
new
OverrideCompatibilityInfo
(
false
,
"valueParameterTypeMismatch"
);
// TODO
}
}
...
...
compiler/testData/checkerWithErrorTypes/quick/ConflictingOverloads.jet
浏览文件 @
3193b7d2
...
@@ -46,3 +46,22 @@ namespace ns3 {
...
@@ -46,3 +46,22 @@ namespace ns3 {
}
}
}
}
// check same rules apply for ext functions
namespace extensionFunctions {
<!CONFLICTING_OVERLOADS!>fun Int.qwe(a: Float)<!> = 1
<!CONFLICTING_OVERLOADS!>fun Int.qwe(a: Float)<!> = 2
fun Int.rty() = 3
fun String.rty() = 4
}
// check no error when regular function and extension function have same name
namespace extensionAndRegular {
fun who() = 1
fun Int.who() = 1
}
compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java
浏览文件 @
3193b7d2
...
@@ -127,6 +127,10 @@ public class JetOverloadTest extends JetLiteFixture {
...
@@ -127,6 +127,10 @@ public class JetOverloadTest extends JetLiteFixture {
"fun a<T1, X : Array<out T1>>(a : Array<*>) : T1"
,
"fun a<T1, X : Array<out T1>>(a : Array<*>) : T1"
,
"fun a<T, Y : Array<out T>>(a : Array<in T>) : T"
);
"fun a<T, Y : Array<out T>>(a : Array<in T>) : T"
);
assertOverloadable
(
"fun ff() : Int"
,
"fun Int.ff() : Int"
);
}
}
private
void
assertNotOverloadable
(
String
funA
,
String
funB
)
{
private
void
assertNotOverloadable
(
String
funA
,
String
funB
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录