Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
c10c19b8
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,发现更多精彩内容 >>
提交
c10c19b8
编写于
6月 15, 2011
作者:
A
Andrey Breslav
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Services for completion
上级
c2fbbff7
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
232 addition
and
58 deletion
+232
-58
.idea/compiler.xml
.idea/compiler.xml
+1
-1
idea/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java
...etbrains/jet/lang/descriptors/MutableClassDescriptor.java
+4
-1
idea/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java
...c/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java
+23
-8
idea/src/org/jetbrains/jet/lang/resolve/AbstractScopeAdapter.java
.../org/jetbrains/jet/lang/resolve/AbstractScopeAdapter.java
+5
-0
idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java
idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java
+3
-0
idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java
idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java
+2
-0
idea/src/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java
...c/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java
+5
-0
idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java
...c/org/jetbrains/jet/lang/resolve/BindingTraceContext.java
+11
-0
idea/src/org/jetbrains/jet/lang/resolve/ChainedScope.java
idea/src/org/jetbrains/jet/lang/resolve/ChainedScope.java
+13
-0
idea/src/org/jetbrains/jet/lang/resolve/JetScope.java
idea/src/org/jetbrains/jet/lang/resolve/JetScope.java
+2
-0
idea/src/org/jetbrains/jet/lang/resolve/JetScopeImpl.java
idea/src/org/jetbrains/jet/lang/resolve/JetScopeImpl.java
+5
-0
idea/src/org/jetbrains/jet/lang/resolve/SubstitutingScope.java
...src/org/jetbrains/jet/lang/resolve/SubstitutingScope.java
+13
-0
idea/src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java
...src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java
+24
-0
idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassMembersScope.java
...etbrains/jet/lang/resolve/java/JavaClassMembersScope.java
+36
-15
idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
...tbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
+69
-33
idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java
idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java
+5
-0
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
+1
-0
idea/tests/org/jetbrains/jet/JetTestUtils.java
idea/tests/org/jetbrains/jet/JetTestUtils.java
+10
-0
未找到文件。
.idea/compiler.xml
浏览文件 @
c10c19b8
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"CompilerConfiguration"
>
<option
name=
"DEFAULT_COMPILER"
value=
"
Javac
"
/>
<option
name=
"DEFAULT_COMPILER"
value=
"
Eclipse
"
/>
<resourceExtensions
/>
<wildcardResourcePatterns>
<entry
name=
"?*.properties"
/>
...
...
idea/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java
浏览文件 @
c10c19b8
...
...
@@ -213,7 +213,10 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
@NotNull
@Override
public
ClassDescriptor
substitute
(
TypeSubstitutor
substitutor
)
{
throw
new
UnsupportedOperationException
();
// TODO
if
(
substitutor
.
isEmpty
())
{
return
this
;
}
return
new
LazySubstitutingClassDescriptor
(
this
,
substitutor
);
}
@Override
...
...
idea/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java
浏览文件 @
c10c19b8
package
org.jetbrains.jet.lang.psi
;
import
com.google.common.collect.Lists
;
import
com.intellij.codeInsight.lookup.LookupElement
;
import
com.intellij.codeInsight.lookup.LookupElementPresentation
;
import
com.intellij.lang.ASTNode
;
import
com.intellij.openapi.util.TextRange
;
import
com.intellij.psi.PsiElement
;
...
...
@@ -15,6 +17,9 @@ import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.types.JetType
;
import
org.jetbrains.jet.lexer.JetTokens
;
import
org.jetbrains.jet.resolve.DescriptorRenderer
;
import
java.util.List
;
/**
* @author max
...
...
@@ -84,15 +89,25 @@ public class JetSimpleNameExpression extends JetReferenceExpression {
BindingContext
bindingContext
=
AnalyzingUtils
.
analyzeFileWithCache
(
file
);
final
JetType
expressionType
=
bindingContext
.
getExpressionType
(
receiverExpression
);
if
(
expressionType
!=
null
)
{
return
new
Object
[]
{
new
LookupElement
()
{
@NotNull
@Override
public
String
getLookupString
()
{
return
expressionType
.
toString
();
List
<
LookupElement
>
result
=
Lists
.
newArrayList
();
for
(
final
DeclarationDescriptor
descriptor
:
expressionType
.
getMemberScope
().
getAllDescriptors
())
{
result
.
add
(
new
LookupElement
()
{
@NotNull
@Override
public
String
getLookupString
()
{
return
descriptor
.
getName
();
}
@Override
public
void
renderElement
(
LookupElementPresentation
presentation
)
{
presentation
.
setItemText
(
descriptor
.
getName
());
presentation
.
setTypeText
(
DescriptorRenderer
.
TEXT
.
render
(
descriptor
));
}
}
}
};
);
}
return
result
.
toArray
();
}
}
...
...
idea/src/org/jetbrains/jet/lang/resolve/AbstractScopeAdapter.java
浏览文件 @
c10c19b8
...
...
@@ -61,4 +61,9 @@ public abstract class AbstractScopeAdapter implements JetScope {
public
DeclarationDescriptor
getDeclarationDescriptorForUnqualifiedThis
()
{
return
getWorkerScope
().
getDeclarationDescriptorForUnqualifiedThis
();
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
return
getWorkerScope
().
getAllDescriptors
();
}
}
idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java
浏览文件 @
c10c19b8
...
...
@@ -46,5 +46,8 @@ public interface BindingContext {
@Nullable
JetType
getAutoCastType
(
@NotNull
JetExpression
expression
);
@Nullable
JetScope
getResolutionScope
(
@NotNull
JetExpression
expression
);
Collection
<
JetDiagnostic
>
getDiagnostics
();
}
idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java
浏览文件 @
c10c19b8
...
...
@@ -29,6 +29,8 @@ public interface BindingTrace {
void
recordStatement
(
@NotNull
JetElement
statement
);
void
recordResolutionScope
(
@NotNull
JetExpression
expression
,
@NotNull
JetScope
scope
);
void
removeStatementRecord
(
@NotNull
JetElement
statement
);
void
removeReferenceResolution
(
@NotNull
JetReferenceExpression
referenceExpression
);
...
...
idea/src/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java
浏览文件 @
c10c19b8
...
...
@@ -91,4 +91,9 @@ public class BindingTraceAdapter implements BindingTrace {
public
BindingContext
getBindingContext
()
{
return
originalTrace
.
getBindingContext
();
}
@Override
public
void
recordResolutionScope
(
@NotNull
JetExpression
expression
,
@NotNull
JetScope
scope
)
{
originalTrace
.
recordResolutionScope
(
expression
,
scope
);
}
}
idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java
浏览文件 @
c10c19b8
...
...
@@ -36,6 +36,7 @@ public class BindingTraceContext implements BindingContext, BindingTrace {
private
final
List
<
JetDiagnostic
>
diagnostics
=
Lists
.
newArrayList
();
private
final
ErrorHandlerWithRegions
errorHandler
=
new
ErrorHandlerWithRegions
(
new
CollectingErrorHandler
(
diagnostics
));
private
Map
<
JetExpression
,
JetScope
>
resolutionScopes
=
Maps
.
newHashMap
();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -124,6 +125,11 @@ public class BindingTraceContext implements BindingContext, BindingTrace {
statements
.
add
(
statement
);
}
@Override
public
void
recordResolutionScope
(
@NotNull
JetExpression
expression
,
@NotNull
JetScope
scope
)
{
safePut
(
resolutionScopes
,
expression
,
scope
);
}
@Override
public
void
removeStatementRecord
(
@NotNull
JetElement
statement
)
{
statements
.
remove
(
statement
);
...
...
@@ -267,6 +273,11 @@ public class BindingTraceContext implements BindingContext, BindingTrace {
return
autoCasts
.
get
(
expression
);
}
@Override
public
JetScope
getResolutionScope
(
@NotNull
JetExpression
expression
)
{
return
resolutionScopes
.
get
(
expression
);
}
@Override
public
Collection
<
JetDiagnostic
>
getDiagnostics
()
{
return
diagnostics
;
...
...
idea/src/org/jetbrains/jet/lang/resolve/ChainedScope.java
浏览文件 @
c10c19b8
package
org.jetbrains.jet.lang.resolve
;
import
com.google.common.collect.Sets
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.descriptors.*
;
import
org.jetbrains.jet.lang.types.JetType
;
...
...
@@ -13,6 +14,7 @@ import java.util.Collections;
public
class
ChainedScope
implements
JetScope
{
private
final
DeclarationDescriptor
containingDeclaration
;
private
final
JetScope
[]
scopeChain
;
private
Collection
<
DeclarationDescriptor
>
allDescriptors
;
public
ChainedScope
(
DeclarationDescriptor
containingDeclaration
,
JetScope
...
scopes
)
{
this
.
containingDeclaration
=
containingDeclaration
;
...
...
@@ -107,4 +109,15 @@ public class ChainedScope implements JetScope {
}
return
null
;
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
if
(
allDescriptors
==
null
)
{
allDescriptors
=
Sets
.
newHashSet
();
for
(
JetScope
scope
:
scopeChain
)
{
allDescriptors
.
addAll
(
scope
.
getAllDescriptors
());
}
}
return
allDescriptors
;
}
}
idea/src/org/jetbrains/jet/lang/resolve/JetScope.java
浏览文件 @
c10c19b8
...
...
@@ -54,4 +54,6 @@ public interface JetScope {
@Nullable
DeclarationDescriptor
getDeclarationDescriptorForUnqualifiedThis
();
Collection
<
DeclarationDescriptor
>
getAllDescriptors
();
}
\ No newline at end of file
idea/src/org/jetbrains/jet/lang/resolve/JetScopeImpl.java
浏览文件 @
c10c19b8
...
...
@@ -53,4 +53,9 @@ public abstract class JetScopeImpl implements JetScope {
public
DeclarationDescriptor
getDeclarationDescriptorForUnqualifiedThis
()
{
return
null
;
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
return
Collections
.
emptyList
();
}
}
idea/src/org/jetbrains/jet/lang/resolve/SubstitutingScope.java
浏览文件 @
c10c19b8
package
org.jetbrains.jet.lang.resolve
;
import
com.google.common.collect.Sets
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.lang.descriptors.*
;
...
...
@@ -15,6 +16,7 @@ public class SubstitutingScope implements JetScope {
private
final
JetScope
workerScope
;
// private final Map<TypeConstructor, TypeProjection> substitutionContext;
private
final
TypeSubstitutor
substitutor
;
private
Collection
<
DeclarationDescriptor
>
allDescriptors
;
public
SubstitutingScope
(
JetScope
workerScope
,
@NotNull
TypeSubstitutor
substitutor
)
{
this
.
workerScope
=
workerScope
;
...
...
@@ -86,4 +88,15 @@ public class SubstitutingScope implements JetScope {
public
DeclarationDescriptor
getDeclarationDescriptorForUnqualifiedThis
()
{
return
workerScope
.
getDeclarationDescriptorForUnqualifiedThis
();
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
if
(
allDescriptors
==
null
)
{
allDescriptors
=
Sets
.
newHashSet
();
for
(
DeclarationDescriptor
descriptor
:
workerScope
.
getAllDescriptors
())
{
allDescriptors
.
add
(
descriptor
.
substitute
(
substitutor
));
}
}
return
allDescriptors
;
}
}
idea/src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java
浏览文件 @
c10c19b8
...
...
@@ -2,6 +2,7 @@ package org.jetbrains.jet.lang.resolve;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Sets
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.lang.ErrorHandler
;
...
...
@@ -15,6 +16,8 @@ import java.util.*;
*/
public
class
WritableScopeImpl
extends
WritableScopeWithImports
{
private
final
Collection
<
DeclarationDescriptor
>
allDescriptors
=
Sets
.
newHashSet
();
@NotNull
private
final
DeclarationDescriptor
ownerDeclarationDescriptor
;
...
...
@@ -51,6 +54,23 @@ public class WritableScopeImpl extends WritableScopeWithImports {
return
super
.
getDeclarationDescriptorForUnqualifiedThis
();
}
@Override
public
void
importScope
(
@NotNull
JetScope
imported
)
{
allDescriptors
.
addAll
(
imported
.
getAllDescriptors
());
super
.
importScope
(
imported
);
}
@Override
public
void
importClassifierAlias
(
@NotNull
String
importedClassifierName
,
@NotNull
ClassifierDescriptor
classifierDescriptor
)
{
allDescriptors
.
add
(
classifierDescriptor
);
super
.
importClassifierAlias
(
importedClassifierName
,
classifierDescriptor
);
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
return
allDescriptors
;
}
@NotNull
private
Map
<
String
,
List
<
DeclarationDescriptor
>>
getLabelsToDescriptors
()
{
if
(
labelsToDescriptors
==
null
)
{
...
...
@@ -104,6 +124,7 @@ public class WritableScopeImpl extends WritableScopeWithImports {
}
// TODO : Should this always happen?
variableClassOrNamespaceDescriptors
.
put
(
variableDescriptor
.
getName
(),
variableDescriptor
);
allDescriptors
.
add
(
variableDescriptor
);
}
@Override
...
...
@@ -140,6 +161,7 @@ public class WritableScopeImpl extends WritableScopeWithImports {
functionGroups
.
put
(
name
,
functionGroup
);
}
functionGroup
.
addFunction
(
functionDescriptor
);
allDescriptors
.
add
(
functionDescriptor
);
}
@Override
...
...
@@ -202,6 +224,7 @@ public class WritableScopeImpl extends WritableScopeWithImports {
errorHandler
.
redeclaration
(
originalDescriptor
,
classifierDescriptor
);
}
variableClassOrNamespaceDescriptors
.
put
(
name
,
classifierDescriptor
);
allDescriptors
.
add
(
classifierDescriptor
);
}
@Override
...
...
@@ -232,6 +255,7 @@ public class WritableScopeImpl extends WritableScopeWithImports {
if
(
oldValue
!=
null
)
{
errorHandler
.
redeclaration
(
oldValue
,
namespaceDescriptor
);
}
allDescriptors
.
add
(
namespaceDescriptor
);
}
@Override
...
...
idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassMembersScope.java
浏览文件 @
c10c19b8
package
org.jetbrains.jet.lang.resolve.java
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Sets
;
import
com.intellij.psi.*
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.jet.lang.descriptors.*
;
import
org.jetbrains.jet.lang.resolve.JetScope
;
import
org.jetbrains.jet.lang.types.*
;
import
org.jetbrains.jet.lang.types.JetType
;
import
org.jetbrains.jet.lang.types.TypeSubstitutor
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.Map
;
/**
...
...
@@ -22,6 +23,7 @@ public class JavaClassMembersScope implements JetScope {
private
final
Map
<
String
,
FunctionGroup
>
functionGroups
=
Maps
.
newHashMap
();
private
final
Map
<
String
,
VariableDescriptor
>
variables
=
Maps
.
newHashMap
();
private
final
Map
<
String
,
ClassifierDescriptor
>
classifiers
=
Maps
.
newHashMap
();
private
Collection
<
DeclarationDescriptor
>
allDescriptors
;
public
JavaClassMembersScope
(
@NotNull
DeclarationDescriptor
classDescriptor
,
PsiClass
psiClass
,
JavaSemanticServices
semanticServices
,
boolean
staticMembers
)
{
this
.
containingDeclaration
=
classDescriptor
;
...
...
@@ -62,6 +64,37 @@ public class JavaClassMembersScope implements JetScope {
return
classifierDescriptor
;
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
if
(
allDescriptors
==
null
)
{
allDescriptors
=
Sets
.
newHashSet
();
TypeSubstitutor
substitutorForGenericSupertypes
;
if
(
containingDeclaration
instanceof
ClassDescriptor
)
{
substitutorForGenericSupertypes
=
semanticServices
.
getDescriptorResolver
().
createSubstitutorForGenericSupertypes
((
ClassDescriptor
)
containingDeclaration
);
}
else
{
substitutorForGenericSupertypes
=
TypeSubstitutor
.
EMPTY
;
}
for
(
HierarchicalMethodSignature
signature
:
psiClass
.
getVisibleSignatures
())
{
PsiMethod
method
=
signature
.
getMethod
();
if
(
method
.
hasModifierProperty
(
PsiModifier
.
STATIC
)
!=
staticMembers
)
{
continue
;
}
FunctionDescriptor
functionDescriptor
=
semanticServices
.
getDescriptorResolver
().
resolveMethodToFunctionDescriptor
(
psiClass
,
substitutorForGenericSupertypes
,
method
);
if
(
functionDescriptor
!=
null
)
{
allDescriptors
.
add
(
functionDescriptor
);
}
}
for
(
PsiField
field
:
psiClass
.
getAllFields
())
{
VariableDescriptor
variableDescriptor
=
semanticServices
.
getDescriptorResolver
().
resolveFieldToVariableDescriptor
(
containingDeclaration
,
field
);
allDescriptors
.
add
(
variableDescriptor
);
}
}
return
allDescriptors
;
}
private
ClassifierDescriptor
doGetClassifierDescriptor
(
String
name
)
{
// TODO : suboptimal, walk the list only once
for
(
PsiClass
innerClass
:
psiClass
.
getAllInnerClasses
())
{
...
...
@@ -90,19 +123,7 @@ public class JavaClassMembersScope implements JetScope {
return
null
;
}
JetType
type
=
semanticServices
.
getTypeTransformer
().
transformToType
(
field
.
getType
());
boolean
isFinal
=
field
.
hasModifierProperty
(
PsiModifier
.
FINAL
);
PropertyDescriptor
propertyDescriptor
=
new
PropertyDescriptor
(
containingDeclaration
,
Collections
.<
Annotation
>
emptyList
(),
new
MemberModifiers
(
false
,
false
,
false
),
!
isFinal
,
null
,
field
.
getName
(),
isFinal
?
null
:
type
,
type
);
semanticServices
.
getTrace
().
recordDeclarationResolution
(
field
,
propertyDescriptor
);
return
propertyDescriptor
;
return
semanticServices
.
getDescriptorResolver
().
resolveFieldToVariableDescriptor
((
ClassDescriptor
)
containingDeclaration
,
field
);
}
@NotNull
...
...
idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
浏览文件 @
c10c19b8
...
...
@@ -46,6 +46,7 @@ public class JavaDescriptorResolver {
protected
final
Map
<
String
,
ClassDescriptor
>
classDescriptorCache
=
new
HashMap
<
String
,
ClassDescriptor
>();
protected
final
Map
<
PsiTypeParameter
,
TypeParameterDescriptor
>
typeParameterDescriptorCache
=
Maps
.
newHashMap
();
protected
final
Map
<
PsiMethod
,
FunctionDescriptor
>
methodDescriptorCache
=
Maps
.
newHashMap
();
protected
final
Map
<
PsiField
,
VariableDescriptor
>
fieldDescriptorCache
=
Maps
.
newHashMap
();
protected
final
Map
<
String
,
NamespaceDescriptor
>
namespaceDescriptorCache
=
new
HashMap
<
String
,
NamespaceDescriptor
>();
protected
final
JavaPsiFacade
javaFacade
;
protected
final
GlobalSearchScope
javaSearchScope
;
...
...
@@ -262,17 +263,32 @@ public class JavaDescriptorResolver {
return
result
;
}
public
VariableDescriptor
resolveFieldToVariableDescriptor
(
DeclarationDescriptor
containingDeclaration
,
PsiField
field
)
{
VariableDescriptor
variableDescriptor
=
fieldDescriptorCache
.
get
(
field
);
if
(
variableDescriptor
!=
null
)
{
return
variableDescriptor
;
}
JetType
type
=
semanticServices
.
getTypeTransformer
().
transformToType
(
field
.
getType
());
boolean
isFinal
=
field
.
hasModifierProperty
(
PsiModifier
.
FINAL
);
PropertyDescriptor
propertyDescriptor
=
new
PropertyDescriptor
(
containingDeclaration
,
Collections
.<
Annotation
>
emptyList
(),
new
MemberModifiers
(
false
,
false
,
false
),
!
isFinal
,
null
,
field
.
getName
(),
isFinal
?
null
:
type
,
type
);
semanticServices
.
getTrace
().
recordDeclarationResolution
(
field
,
propertyDescriptor
);
fieldDescriptorCache
.
put
(
field
,
propertyDescriptor
);
return
propertyDescriptor
;
}
@NotNull
public
FunctionGroup
resolveFunctionGroup
(
@NotNull
PsiClass
psiClass
,
@Nullable
ClassDescriptor
classDescriptor
,
@NotNull
String
methodName
,
boolean
staticMembers
)
{
WritableFunctionGroup
writableFunctionGroup
=
new
WritableFunctionGroup
(
methodName
);
final
Collection
<
HierarchicalMethodSignature
>
signatures
=
psiClass
.
getVisibleSignatures
();
TypeSubstitutor
typeSubstitutor
;
if
(
classDescriptor
!=
null
)
{
typeSubstitutor
=
TypeUtils
.
buildDeepSubstitutor
(
classDescriptor
.
getDefaultType
());
}
else
{
typeSubstitutor
=
TypeSubstitutor
.
EMPTY
;
}
TypeSubstitutor
typeSubstitutor
=
createSubstitutorForGenericSupertypes
(
classDescriptor
);
for
(
HierarchicalMethodSignature
signature:
signatures
)
{
PsiMethod
method
=
signature
.
getMethod
();
if
(
method
.
hasModifierProperty
(
PsiModifier
.
STATIC
)
!=
staticMembers
)
{
...
...
@@ -281,37 +297,57 @@ public class JavaDescriptorResolver {
if
(!
methodName
.
equals
(
method
.
getName
()))
{
continue
;
}
FunctionDescriptor
functionDescriptor
=
methodDescriptorCache
.
get
(
method
);
if
(
functionDescriptor
!=
null
)
{
if
(
method
.
getContainingClass
()
!=
psiClass
)
{
functionDescriptor
=
functionDescriptor
.
substitute
(
typeSubstitutor
);
}
writableFunctionGroup
.
addFunction
(
functionDescriptor
);
continue
;
}
PsiParameter
[]
parameters
=
method
.
getParameterList
().
getParameters
();
FunctionDescriptorImpl
functionDescriptorImpl
=
new
FunctionDescriptorImpl
(
JavaDescriptorResolver
.
JAVA_ROOT
,
Collections
.<
Annotation
>
emptyList
(),
// TODO
methodName
);
functionDescriptorImpl
.
initialize
(
null
,
resolveTypeParameters
(
functionDescriptorImpl
,
method
.
getTypeParameters
()),
semanticServices
.
getDescriptorResolver
().
resolveParameterDescriptors
(
functionDescriptorImpl
,
parameters
),
semanticServices
.
getTypeTransformer
().
transformToType
(
method
.
getReturnType
())
);
semanticServices
.
getTrace
().
recordDeclarationResolution
(
method
,
functionDescriptorImpl
);
FunctionDescriptor
substitutedFunctionDescriptor
=
functionDescriptorImpl
;
if
(
method
.
getContainingClass
()
!=
psiClass
)
{
substitutedFunctionDescriptor
=
functionDescriptorImpl
.
substitute
(
typeSubstitutor
);
}
FunctionDescriptor
substitutedFunctionDescriptor
=
resolveMethodToFunctionDescriptor
(
psiClass
,
typeSubstitutor
,
method
);
if
(
substitutedFunctionDescriptor
!=
null
)
{
writableFunctionGroup
.
addFunction
(
substitutedFunctionDescriptor
);
}
methodDescriptorCache
.
put
(
method
,
functionDescriptorImpl
);
}
return
writableFunctionGroup
;
}
public
TypeSubstitutor
createSubstitutorForGenericSupertypes
(
ClassDescriptor
classDescriptor
)
{
TypeSubstitutor
typeSubstitutor
;
if
(
classDescriptor
!=
null
)
{
typeSubstitutor
=
TypeUtils
.
buildDeepSubstitutor
(
classDescriptor
.
getDefaultType
());
}
else
{
typeSubstitutor
=
TypeSubstitutor
.
EMPTY
;
}
return
typeSubstitutor
;
}
@Nullable
public
FunctionDescriptor
resolveMethodToFunctionDescriptor
(
PsiClass
psiClass
,
TypeSubstitutor
typeSubstitutorForGenericSuperclasses
,
PsiMethod
method
)
{
PsiType
returnType
=
method
.
getReturnType
();
if
(
returnType
==
null
)
{
return
null
;
}
FunctionDescriptor
functionDescriptor
=
methodDescriptorCache
.
get
(
method
);
if
(
functionDescriptor
!=
null
)
{
if
(
method
.
getContainingClass
()
!=
psiClass
)
{
functionDescriptor
=
functionDescriptor
.
substitute
(
typeSubstitutorForGenericSuperclasses
);
}
return
functionDescriptor
;
}
PsiParameter
[]
parameters
=
method
.
getParameterList
().
getParameters
();
FunctionDescriptorImpl
functionDescriptorImpl
=
new
FunctionDescriptorImpl
(
JavaDescriptorResolver
.
JAVA_ROOT
,
Collections
.<
Annotation
>
emptyList
(),
// TODO
method
.
getName
()
);
methodDescriptorCache
.
put
(
method
,
functionDescriptorImpl
);
functionDescriptorImpl
.
initialize
(
null
,
resolveTypeParameters
(
functionDescriptorImpl
,
method
.
getTypeParameters
()),
semanticServices
.
getDescriptorResolver
().
resolveParameterDescriptors
(
functionDescriptorImpl
,
parameters
),
semanticServices
.
getTypeTransformer
().
transformToType
(
returnType
)
);
semanticServices
.
getTrace
().
recordDeclarationResolution
(
method
,
functionDescriptorImpl
);
FunctionDescriptor
substitutedFunctionDescriptor
=
functionDescriptorImpl
;
if
(
method
.
getContainingClass
()
!=
psiClass
)
{
substitutedFunctionDescriptor
=
functionDescriptorImpl
.
substitute
(
typeSubstitutorForGenericSuperclasses
);
}
return
substitutedFunctionDescriptor
;
}
}
idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java
浏览文件 @
c10c19b8
...
...
@@ -64,6 +64,11 @@ public class ErrorUtils {
return
ERROR_CLASS
;
// TODO : review
}
@Override
public
Collection
<
DeclarationDescriptor
>
getAllDescriptors
()
{
return
Collections
.
emptyList
();
}
};
private
static
final
FunctionGroup
ERROR_FUNCTION_GROUP
=
new
FunctionGroup
()
{
...
...
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
浏览文件 @
c10c19b8
...
...
@@ -667,6 +667,7 @@ public class JetTypeInferrer {
}
trace
.
markAsProcessed
(
expression
);
trace
.
recordResolutionScope
(
expression
,
scope
);
return
result
;
}
...
...
idea/tests/org/jetbrains/jet/JetTestUtils.java
浏览文件 @
c10c19b8
...
...
@@ -9,6 +9,7 @@ import org.jetbrains.jet.lang.descriptors.*;
import
org.jetbrains.jet.lang.psi.*
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.resolve.BindingTrace
;
import
org.jetbrains.jet.lang.resolve.JetScope
;
import
org.jetbrains.jet.lang.types.JetType
;
import
java.util.Collection
;
...
...
@@ -52,6 +53,10 @@ public class JetTestUtils {
public
void
recordStatement
(
@NotNull
JetElement
statement
)
{
}
@Override
public
void
recordResolutionScope
(
@NotNull
JetExpression
expression
,
@NotNull
JetScope
scope
)
{
}
@Override
public
void
removeStatementRecord
(
@NotNull
JetElement
statement
)
{
}
...
...
@@ -189,6 +194,11 @@ public class JetTestUtils {
throw
new
UnsupportedOperationException
();
// TODO
}
@Override
public
JetScope
getResolutionScope
(
@NotNull
JetExpression
expression
)
{
throw
new
UnsupportedOperationException
();
// TODO
}
@Override
public
Collection
<
JetDiagnostic
>
getDiagnostics
()
{
throw
new
UnsupportedOperationException
();
// TODO
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录