Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
2449bcde
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2449bcde
编写于
4月 16, 2015
作者:
C
Charles Stoner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Allow extension methods in script code
上级
93d3ced6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
54 addition
and
2 deletion
+54
-2
src/Compilers/CSharp/Portable/Binder/InContainerBinder.cs
src/Compilers/CSharp/Portable/Binder/InContainerBinder.cs
+11
-0
src/Compilers/CSharp/Portable/Symbols/Source/SourceMemberContainerSymbol.cs
...rp/Portable/Symbols/Source/SourceMemberContainerSymbol.cs
+1
-1
src/Compilers/CSharp/Portable/Symbols/Source/SourceMemberMethodSymbol.cs
...Sharp/Portable/Symbols/Source/SourceMemberMethodSymbol.cs
+1
-1
src/Compilers/CSharp/Test/Symbol/Symbols/ExtensionMethodTests.cs
...pilers/CSharp/Test/Symbol/Symbols/ExtensionMethodTests.cs
+41
-0
未找到文件。
src/Compilers/CSharp/Portable/Binder/InContainerBinder.cs
浏览文件 @
2449bcde
...
...
@@ -146,6 +146,17 @@ internal override bool SupportsExtensionMethods
{
((
NamespaceSymbol
)
_container
).
GetExtensionMethods
(
methods
,
name
,
arity
,
options
);
}
else
if
(((
NamedTypeSymbol
)
_container
).
IsScriptClass
)
{
for
(
var
submission
=
this
.
Compilation
;
submission
!=
null
;
submission
=
submission
.
PreviousSubmission
)
{
var
scriptClass
=
submission
.
ScriptClass
;
if
((
object
)
scriptClass
!=
null
)
{
scriptClass
.
GetExtensionMethods
(
methods
,
name
,
arity
,
options
);
}
}
}
}
}
...
...
src/Compilers/CSharp/Portable/Symbols/Source/SourceMemberContainerSymbol.cs
浏览文件 @
2449bcde
...
...
@@ -3151,7 +3151,7 @@ internal bool ContainsExtensionMethods
{
if
(!
_lazyContainsExtensionMethods
.
HasValue
())
{
bool
containsExtensionMethods
=
(
this
.
IsStatic
&&
!
this
.
IsGenericType
&&
this
.
declaration
.
ContainsExtensionMethods
)
;
bool
containsExtensionMethods
=
(
(
this
.
IsStatic
&&
!
this
.
IsGenericType
)
||
this
.
IsScriptClass
)
&&
this
.
declaration
.
ContainsExtensionMethods
;
_lazyContainsExtensionMethods
=
containsExtensionMethods
.
ToThreeState
();
}
...
...
src/Compilers/CSharp/Portable/Symbols/Source/SourceMemberMethodSymbol.cs
浏览文件 @
2449bcde
...
...
@@ -221,7 +221,7 @@ private void MethodChecks(MethodDeclarationSyntax syntax, Binder withTypeParamsB
{
diagnostics
.
Add
(
ErrorCode
.
ERR_ExtensionMethodsDecl
,
location
,
ContainingType
.
Name
);
}
else
if
(!
ContainingType
.
IsS
tatic
||
ContainingType
.
Arity
!=
0
)
else
if
(!
ContainingType
.
IsS
criptClass
&&
!(
ContainingType
.
IsStatic
&&
ContainingType
.
Arity
==
0
)
)
{
// Duplicate Dev10 behavior by selecting the containing type identifier. However if there
// is no containing type (in the interactive case for instance), select the method identifier.
...
...
src/Compilers/CSharp/Test/Symbol/Symbols/ExtensionMethodTests.cs
浏览文件 @
2449bcde
...
...
@@ -3671,5 +3671,46 @@ static void Main(string[] args)
Assert
.
Contains
(
"GetEnumerableDisposable2"
,
symbols
);
Assert
.
Contains
(
"GetEnumerableDisposable1"
,
symbols
);
}
[
Fact
]
public
void
ScriptExtensionMethods
()
{
var
source
=
@"static object F(this object o) { return null; }
class C
{
void M() { this.F(); }
}
var o = new object();
o.F();"
;
var
compilation
=
CreateCompilationWithMscorlib
(
source
,
references
:
new
[]
{
SystemCoreRef
},
parseOptions
:
TestOptions
.
Script
);
compilation
.
VerifyDiagnostics
();
}
[
Fact
]
public
void
InteractiveExtensionMethods
()
{
var
parseOptions
=
TestOptions
.
Interactive
;
var
references
=
new
[]
{
MscorlibRef
,
SystemCoreRef
};
var
source0
=
@"static object F(this object o) { return 0; }
var o = new object();
o.F();"
;
var
source1
=
@"static object G(this object o) { return 1; }
var o = new object();
o.G().F();"
;
var
s0
=
CSharpCompilation
.
CreateSubmission
(
"s0.dll"
,
syntaxTree
:
SyntaxFactory
.
ParseSyntaxTree
(
source0
,
options
:
parseOptions
),
references
:
references
);
s0
.
VerifyDiagnostics
();
var
s1
=
CSharpCompilation
.
CreateSubmission
(
"s1.dll"
,
syntaxTree
:
SyntaxFactory
.
ParseSyntaxTree
(
source1
,
options
:
parseOptions
),
previousSubmission
:
s0
,
references
:
references
);
s1
.
VerifyDiagnostics
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录