Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
fb71f839
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,发现更多精彩内容 >>
提交
fb71f839
编写于
3月 16, 2011
作者:
A
Andrey Breslav
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Redeclarations reported in the editor
上级
6fb8ed82
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
67 addition
and
43 deletion
+67
-43
idea/src/org/jetbrains/jet/lang/ErrorHandler.java
idea/src/org/jetbrains/jet/lang/ErrorHandler.java
+9
-0
idea/src/org/jetbrains/jet/lang/JetSemanticServices.java
idea/src/org/jetbrains/jet/lang/JetSemanticServices.java
+8
-4
idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java
...src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java
+17
-15
idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java
idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java
+1
-1
idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java
...g/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java
+3
-3
idea/src/org/jetbrains/jet/lang/resolve/JetScopeAdapter.java
idea/src/org/jetbrains/jet/lang/resolve/JetScopeAdapter.java
+2
-1
idea/src/org/jetbrains/jet/lang/resolve/MutableClassDescriptor.java
...rg/jetbrains/jet/lang/resolve/MutableClassDescriptor.java
+3
-2
idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
+4
-4
idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java
idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java
+11
-4
idea/src/org/jetbrains/jet/lang/types/JetStandardClasses.java
.../src/org/jetbrains/jet/lang/types/JetStandardClasses.java
+2
-1
idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java
idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java
+1
-2
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
+6
-6
未找到文件。
idea/src/org/jetbrains/jet/lang/ErrorHandler.java
浏览文件 @
fb71f839
...
...
@@ -3,6 +3,7 @@ package org.jetbrains.jet.lang;
import
com.intellij.lang.ASTNode
;
import
org.jetbrains.jet.lang.psi.JetExpression
;
import
org.jetbrains.jet.lang.psi.JetReferenceExpression
;
import
org.jetbrains.jet.lang.types.DeclarationDescriptor
;
import
org.jetbrains.jet.lang.types.JetType
;
/**
...
...
@@ -25,6 +26,11 @@ public class ErrorHandler {
public
void
typeMismatch
(
JetExpression
expression
,
JetType
expectedType
,
JetType
actualType
)
{
throw
new
IllegalStateException
(
"Type mismatch: inferred type is "
+
actualType
+
" but "
+
expectedType
+
" was expected"
);
}
@Override
public
void
redeclaration
(
DeclarationDescriptor
existingDescriptor
,
DeclarationDescriptor
redeclaredDescriptor
)
{
throw
new
IllegalStateException
(
"Redeclaration: "
+
existingDescriptor
.
getName
());
}
};
public
void
unresolvedReference
(
JetReferenceExpression
referenceExpression
)
{
...
...
@@ -35,4 +41,7 @@ public class ErrorHandler {
public
void
typeMismatch
(
JetExpression
expression
,
JetType
expectedType
,
JetType
actualType
)
{
}
public
void
redeclaration
(
DeclarationDescriptor
existingDescriptor
,
DeclarationDescriptor
redeclaredDescriptor
)
{
}
}
idea/src/org/jetbrains/jet/lang/JetSemanticServices.java
浏览文件 @
fb71f839
...
...
@@ -3,11 +3,10 @@ package org.jetbrains.jet.lang;
import
com.intellij.openapi.project.Project
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.resolve.ClassDescriptorResolver
;
import
org.jetbrains.jet.lang.resolve.JetScope
;
import
org.jetbrains.jet.lang.resolve.OverloadResolver
;
import
org.jetbrains.jet.lang.types.BindingTrace
;
import
org.jetbrains.jet.lang.types.JetStandardLibrary
;
import
org.jetbrains.jet.lang.types.JetTypeChecker
;
import
org.jetbrains.jet.lang.types.JetTypeInferrer
;
import
org.jetbrains.jet.lang.resolve.WritableScope
;
import
org.jetbrains.jet.lang.types.*
;
/**
* @author abreslav
...
...
@@ -63,4 +62,9 @@ public class JetSemanticServices {
public
OverloadResolver
getOverloadResolver
()
{
return
overloadResolver
;
}
@NotNull
public
WritableScope
createWritableScope
(
@NotNull
JetScope
scope
,
@NotNull
DeclarationDescriptor
owner
)
{
return
new
WritableScope
(
scope
,
owner
,
errorHandler
);
}
}
idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java
浏览文件 @
fb71f839
...
...
@@ -12,11 +12,17 @@ import com.intellij.psi.PsiElement;
import
com.intellij.psi.PsiReference
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.ErrorHandler
;
import
org.jetbrains.jet.lang.psi.*
;
import
org.jetbrains.jet.lang.psi.JetExpression
;
import
org.jetbrains.jet.lang.psi.JetFile
;
import
org.jetbrains.jet.lang.psi.JetReferenceExpression
;
import
org.jetbrains.jet.lang.resolve.AnalyzingUtils
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.types.DeclarationDescriptor
;
import
org.jetbrains.jet.lang.types.JetType
;
import
java.util.Collection
;
import
java.util.HashSet
;
/**
* @author abreslav
*/
...
...
@@ -29,6 +35,7 @@ public class JetPsiChecker implements Annotator {
JetFile
file
=
(
JetFile
)
element
;
try
{
final
Collection
<
DeclarationDescriptor
>
redeclarations
=
new
HashSet
<
DeclarationDescriptor
>();
final
BindingContext
bindingContext
=
AnalyzingUtils
.
analyzeFile
(
file
,
new
ErrorHandler
()
{
@Override
public
void
unresolvedReference
(
JetReferenceExpression
referenceExpression
)
{
...
...
@@ -52,24 +59,19 @@ public class JetPsiChecker implements Annotator {
public
void
typeMismatch
(
JetExpression
expression
,
JetType
expectedType
,
JetType
actualType
)
{
holder
.
createErrorAnnotation
(
expression
,
"Type mismatch: inferred type is "
+
actualType
+
" but "
+
expectedType
+
" was expected"
);
}
});
file
.
getRootNamespace
().
accept
(
new
JetVisitor
()
{
@Override
public
void
visitClass
(
JetClass
klass
)
{
for
(
JetDelegationSpecifier
specifier
:
klass
.
getDelegationSpecifiers
())
{
JetTypeReference
typeReference
=
specifier
.
getTypeReference
();
JetType
type
=
bindingContext
.
resolveTypeReference
(
typeReference
);
holder
.
createWeakWarningAnnotation
(
typeReference
,
type
.
toString
());
}
}
@Override
public
void
visitNamespace
(
JetNamespace
namespace
)
{
for
(
JetDeclaration
declaration
:
namespace
.
getDeclarations
())
{
declaration
.
accept
(
this
);
}
public
void
redeclaration
(
DeclarationDescriptor
existingDescriptor
,
DeclarationDescriptor
redeclaredDescriptor
)
{
redeclarations
.
add
(
existingDescriptor
);
redeclarations
.
add
(
redeclaredDescriptor
);
}
});
for
(
DeclarationDescriptor
redeclaration
:
redeclarations
)
{
PsiElement
declarationPsiElement
=
bindingContext
.
getDeclarationPsiElement
(
redeclaration
);
if
(
declarationPsiElement
!=
null
)
{
holder
.
createErrorAnnotation
(
declarationPsiElement
,
"Redeclaration"
);
}
}
}
catch
(
ProcessCanceledException
e
)
{
throw
e
;
...
...
idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java
浏览文件 @
fb71f839
...
...
@@ -27,7 +27,7 @@ public class AnalyzingUtils {
JavaSemanticServices
javaSemanticServices
=
new
JavaSemanticServices
(
project
,
semanticServices
,
bindingTraceContext
);
JetScope
libraryScope
=
semanticServices
.
getStandardLibrary
().
getLibraryScope
();
WritableScope
scope
=
new
WritableScope
(
libraryScope
,
new
ModuleDescriptor
(
"<module>"
));
WritableScope
scope
=
semanticServices
.
create
WritableScope
(
libraryScope
,
new
ModuleDescriptor
(
"<module>"
));
// scope.importScope(javaSemanticServices.getDescriptorResolver().resolveNamespace("").getMemberScope());
// scope.importScope(javaSemanticServices.getDescriptorResolver().resolveNamespace("java.lang").getMemberScope());
scope
.
importScope
(
new
JavaPackageScope
(
""
,
null
,
javaSemanticServices
));
...
...
idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java
浏览文件 @
fb71f839
...
...
@@ -30,7 +30,7 @@ public class ClassDescriptorResolver {
scope
.
getContainingDeclaration
(),
AttributeResolver
.
INSTANCE
.
resolveAttributes
(
classElement
.
getModifierList
()),
classElement
.
getName
());
WritableScope
parameterScope
=
new
WritableScope
(
scope
,
classDescriptor
);
WritableScope
parameterScope
=
semanticServices
.
create
WritableScope
(
scope
,
classDescriptor
);
// This call has side-effects on the parameterScope (fills it in)
List
<
TypeParameterDescriptor
>
typeParameters
...
...
@@ -100,7 +100,7 @@ public class ClassDescriptorResolver {
final
JetScope
typeParameterScope
,
final
Collection
<?
extends
JetType
>
supertypes
)
{
final
WritableScope
memberDeclarations
=
new
WritableScope
(
typeParameterScope
,
classDescriptor
);
final
WritableScope
memberDeclarations
=
semanticServices
.
create
WritableScope
(
typeParameterScope
,
classDescriptor
);
List
<
JetDeclaration
>
declarations
=
classElement
.
getDeclarations
();
for
(
JetDeclaration
declaration
:
declarations
)
{
...
...
@@ -142,7 +142,7 @@ public class ClassDescriptorResolver {
AttributeResolver
.
INSTANCE
.
resolveAttributes
(
function
.
getModifierList
()),
function
.
getName
()
);
WritableScope
parameterScope
=
new
WritableScope
(
scope
,
functionDescriptor
);
WritableScope
parameterScope
=
semanticServices
.
create
WritableScope
(
scope
,
functionDescriptor
);
// The two calls below have side-effects on parameterScope
List
<
TypeParameterDescriptor
>
typeParameterDescriptors
=
resolveTypeParameters
(
functionDescriptor
,
parameterScope
,
function
.
getTypeParameters
());
...
...
idea/src/org/jetbrains/jet/lang/resolve/JetScopeAdapter.java
浏览文件 @
fb71f839
...
...
@@ -7,9 +7,10 @@ import org.jetbrains.jet.lang.types.*;
* @author abreslav
*/
public
class
JetScopeAdapter
implements
JetScope
{
@NotNull
private
final
JetScope
scope
;
public
JetScopeAdapter
(
JetScope
scope
)
{
public
JetScopeAdapter
(
@NotNull
JetScope
scope
)
{
this
.
scope
=
scope
;
}
...
...
idea/src/org/jetbrains/jet/lang/resolve/MutableClassDescriptor.java
浏览文件 @
fb71f839
package
org.jetbrains.jet.lang.resolve
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.JetSemanticServices
;
import
org.jetbrains.jet.lang.types.*
;
import
java.util.List
;
...
...
@@ -13,9 +14,9 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
private
final
WritableScope
unsubstitutedMemberScope
;
private
TypeConstructor
typeConstructor
;
public
MutableClassDescriptor
(
@NotNull
DeclarationDescriptor
containingDeclaration
,
@NotNull
JetScope
outerScope
)
{
public
MutableClassDescriptor
(
@NotNull
JetSemanticServices
semanticServices
,
@NotNull
DeclarationDescriptor
containingDeclaration
,
@NotNull
JetScope
outerScope
)
{
super
(
containingDeclaration
);
this
.
unsubstitutedMemberScope
=
new
WritableScope
(
outerScope
,
this
);
this
.
unsubstitutedMemberScope
=
semanticServices
.
create
WritableScope
(
outerScope
,
this
);
}
@NotNull
...
...
idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
浏览文件 @
fb71f839
...
...
@@ -32,7 +32,7 @@ public class TopDownAnalyzer {
}
public
void
process
(
@NotNull
JetScope
outerScope
,
@NotNull
List
<
JetDeclaration
>
declarations
)
{
final
WritableScope
toplevelScope
=
new
WritableScope
(
outerScope
,
outerScope
.
getContainingDeclaration
());
// TODO ?!
final
WritableScope
toplevelScope
=
semanticServices
.
create
WritableScope
(
outerScope
,
outerScope
.
getContainingDeclaration
());
// TODO ?!
trace
.
setToplevelScope
(
toplevelScope
);
// TODO : this is a hack
collectTypeDeclarators
(
toplevelScope
,
declarations
);
resolveTypeDeclarations
();
...
...
@@ -69,7 +69,7 @@ public class TopDownAnalyzer {
trace
.
recordDeclarationResolution
(
namespace
,
namespaceDescriptor
);
}
WritableScope
namespaceScope
=
new
WritableScope
(
declaringScope
,
namespaceDescriptor
);
WritableScope
namespaceScope
=
semanticServices
.
create
WritableScope
(
declaringScope
,
namespaceDescriptor
);
namespaceScopes
.
put
(
namespace
,
namespaceScope
);
for
(
JetImportDirective
importDirective
:
importDirectives
)
{
...
...
@@ -104,7 +104,7 @@ public class TopDownAnalyzer {
}
private
WritableScope
processClass
(
@NotNull
WritableScope
declaringScope
,
JetClass
klass
)
{
MutableClassDescriptor
mutableClassDescriptor
=
new
MutableClassDescriptor
(
declaringScope
.
getContainingDeclaration
(),
declaringScope
);
MutableClassDescriptor
mutableClassDescriptor
=
new
MutableClassDescriptor
(
semanticServices
,
declaringScope
.
getContainingDeclaration
(),
declaringScope
);
mutableClassDescriptor
.
setName
(
klass
.
getName
());
declaringScope
.
addClassDescriptor
(
mutableClassDescriptor
);
...
...
@@ -204,7 +204,7 @@ public class TopDownAnalyzer {
WritableScope
declaringScope
=
declaringScopes
.
get
(
function
);
assert
declaringScope
!=
null
;
WritableScope
parameterScope
=
new
WritableScope
(
declaringScope
,
descriptor
);
WritableScope
parameterScope
=
semanticServices
.
create
WritableScope
(
declaringScope
,
descriptor
);
for
(
TypeParameterDescriptor
typeParameter
:
descriptor
.
getTypeParameters
())
{
parameterScope
.
addTypeParameterDescriptor
(
typeParameter
);
}
...
...
idea/src/org/jetbrains/jet/lang/resolve/WritableScope.java
浏览文件 @
fb71f839
...
...
@@ -2,6 +2,7 @@ package org.jetbrains.jet.lang.resolve;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.lang.ErrorHandler
;
import
org.jetbrains.jet.lang.types.*
;
import
java.util.ArrayList
;
...
...
@@ -13,6 +14,9 @@ import java.util.Map;
* @author abreslav
*/
public
class
WritableScope
extends
JetScopeAdapter
{
@NotNull
private
final
ErrorHandler
errorHandler
;
@Nullable
private
Map
<
String
,
PropertyDescriptor
>
propertyDescriptors
;
@Nullable
...
...
@@ -31,9 +35,10 @@ public class WritableScope extends JetScopeAdapter {
@NotNull
private
final
DeclarationDescriptor
ownerDeclarationDescriptor
;
public
WritableScope
(
JetScope
scope
,
@NotNull
DeclarationDescriptor
own
er
)
{
public
WritableScope
(
@NotNull
JetScope
scope
,
@NotNull
DeclarationDescriptor
owner
,
@NotNull
ErrorHandler
errorHandl
er
)
{
super
(
scope
);
this
.
ownerDeclarationDescriptor
=
owner
;
this
.
errorHandler
=
errorHandler
;
}
@NotNull
...
...
@@ -42,7 +47,7 @@ public class WritableScope extends JetScopeAdapter {
return
ownerDeclarationDescriptor
;
}
public
void
importScope
(
JetScope
imported
)
{
public
void
importScope
(
@NotNull
JetScope
imported
)
{
getImports
().
add
(
0
,
imported
);
}
...
...
@@ -64,9 +69,11 @@ public class WritableScope extends JetScopeAdapter {
public
void
addPropertyDescriptor
(
PropertyDescriptor
propertyDescriptor
)
{
Map
<
String
,
PropertyDescriptor
>
propertyDescriptors
=
getPropertyDescriptors
();
if
(
propertyDescriptors
.
containsKey
(
propertyDescriptor
.
getName
()))
{
throw
new
UnsupportedOperationException
(
"Property redeclared: "
+
propertyDescriptor
.
getName
());
PropertyDescriptor
existingDescriptor
=
propertyDescriptors
.
get
(
propertyDescriptor
.
getName
());
if
(
existingDescriptor
!=
null
)
{
errorHandler
.
redeclaration
(
existingDescriptor
,
propertyDescriptor
);
}
// TODO : Should this always happen?
propertyDescriptors
.
put
(
propertyDescriptor
.
getName
(),
propertyDescriptor
);
}
...
...
idea/src/org/jetbrains/jet/lang/types/JetStandardClasses.java
浏览文件 @
fb71f839
...
...
@@ -2,6 +2,7 @@ package org.jetbrains.jet.lang.types;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.lang.ErrorHandler
;
import
org.jetbrains.jet.lang.resolve.JetScope
;
import
org.jetbrains.jet.lang.resolve.WritableScope
;
...
...
@@ -160,7 +161,7 @@ public class JetStandardClasses {
/*package*/
static
final
JetScope
STANDARD_CLASSES
;
static
{
WritableScope
writableScope
=
new
WritableScope
(
JetScope
.
EMPTY
,
STANDARD_CLASSES_NAMESPACE
);
WritableScope
writableScope
=
new
WritableScope
(
JetScope
.
EMPTY
,
STANDARD_CLASSES_NAMESPACE
,
ErrorHandler
.
DO_NOTHING
);
STANDARD_CLASSES
=
writableScope
;
writableScope
.
addClassAlias
(
"Unit"
,
getTuple
(
0
));
...
...
idea/src/org/jetbrains/jet/lang/types/JetTypeChecker.java
浏览文件 @
fb71f839
...
...
@@ -2,7 +2,6 @@ package org.jetbrains.jet.lang.types;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.lang.psi.JetExpression
;
import
java.util.*
;
...
...
@@ -274,7 +273,7 @@ public class JetTypeChecker {
handler
.
afterChildren
(
current
);
}
public
boolean
isConvertibleTo
(
JetType
actual
,
JetType
expected
)
{
public
boolean
isConvertibleTo
(
@NotNull
JetType
actual
,
@NotNull
JetType
expected
)
{
if
(
isSubtypeOf
(
actual
,
expected
))
return
true
;
if
(
expected
.
getConstructor
().
equals
(
JetStandardClasses
.
getTuple
(
0
).
getTypeConstructor
()))
{
return
true
;
...
...
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
浏览文件 @
fb71f839
...
...
@@ -25,7 +25,7 @@ public class JetTypeInferrer {
this
.
trace
=
trace
;
this
.
semanticServices
=
semanticServices
;
this
.
typeResolver
=
new
TypeResolver
(
trace
,
semanticServices
);
this
.
classDescriptorResolver
=
new
ClassDescriptorResolver
(
semanticServices
,
trace
);
this
.
classDescriptorResolver
=
semanticServices
.
getClassDescriptorResolver
(
trace
);
}
@NotNull
...
...
@@ -168,7 +168,7 @@ public class JetTypeInferrer {
return
JetStandardClasses
.
getUnitType
();
}
else
{
DeclarationDescriptor
containingDescriptor
=
outerScope
.
getContainingDeclaration
();
WritableScope
scope
=
new
WritableScope
(
outerScope
,
containingDescriptor
);
WritableScope
scope
=
semanticServices
.
create
WritableScope
(
outerScope
,
containingDescriptor
);
for
(
JetElement
statement
:
block
)
{
// TODO: consider other declarations
if
(
statement
instanceof
JetProperty
)
{
...
...
@@ -181,7 +181,7 @@ public class JetTypeInferrer {
getType
(
scope
,
(
JetExpression
)
statement
,
true
);
}
else
{
throw
new
UnsupportedOperationException
();
// TODO
throw
new
UnsupportedOperationException
(
statement
.
getClass
().
getCanonicalName
()
);
// TODO
}
}
JetElement
lastElement
=
block
.
get
(
block
.
size
()
-
1
);
...
...
@@ -278,7 +278,7 @@ public class JetTypeInferrer {
if
(
returnTypeRef
!=
null
)
{
returnType
=
typeResolver
.
resolveType
(
scope
,
returnTypeRef
);
}
else
{
WritableScope
writableScope
=
new
WritableScope
(
scope
,
functionDescriptor
);
WritableScope
writableScope
=
semanticServices
.
create
WritableScope
(
scope
,
functionDescriptor
);
for
(
PropertyDescriptor
propertyDescriptor
:
parameterDescriptors
.
values
())
{
writableScope
.
addPropertyDescriptor
(
propertyDescriptor
);
}
...
...
@@ -689,8 +689,8 @@ public class JetTypeInferrer {
}
private
JetType
getTypeForBinaryCall
(
JetScope
scope
,
JetExpression
left
,
JetSimpleNameExpression
operationSign
,
@NotNull
JetExpression
right
,
String
name
,
boolean
reportUnresolved
)
{
JetType
leftType
=
g
etType
(
scope
,
left
,
false
);
JetType
rightType
=
g
etType
(
scope
,
right
,
false
);
JetType
leftType
=
safeG
etType
(
scope
,
left
,
false
);
JetType
rightType
=
safeG
etType
(
scope
,
right
,
false
);
FunctionDescriptor
functionDescriptor
=
lookupFunction
(
scope
,
operationSign
,
name
,
leftType
,
Collections
.
singletonList
(
rightType
),
reportUnresolved
);
if
(
functionDescriptor
!=
null
)
{
return
functionDescriptor
.
getUnsubstitutedReturnType
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录