KT-738 No kotlin type completion in extend class scope - Fixes after CR-KT-13 review
This commit is contained in:
@@ -9,8 +9,6 @@ import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
|||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores a number of semantic services. Should be created once for each kotlin project.
|
|
||||||
*
|
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class JetSemanticServices {
|
public class JetSemanticServices {
|
||||||
|
|||||||
@@ -39,15 +39,6 @@ public class JetTypeReference extends JetElement {
|
|||||||
return findChildByClass(JetTypeElement.class);
|
return findChildByClass(JetTypeElement.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Will return not null for type references with internal user type.
|
|
||||||
* There could be other JetTypeReferences, see parsing of in {@link org.jetbrains.jet.lang.parsing.JetParsing}
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public JetUserType getUserType() {
|
|
||||||
return findChildByClass(JetUserType.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<JetAnnotationEntry> getAnnotations() {
|
public List<JetAnnotationEntry> getAnnotations() {
|
||||||
List<JetAnnotationEntry> answer = null;
|
List<JetAnnotationEntry> answer = null;
|
||||||
for (JetAnnotation annotation : getAttributeAnnotations()) {
|
for (JetAnnotation annotation : getAttributeAnnotations()) {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public interface BindingContext {
|
|||||||
WritableSlice<ValueParameterDescriptor, Boolean> AUTO_CREATED_IT = Slices.createSimpleSetSlice();
|
WritableSlice<ValueParameterDescriptor, Boolean> AUTO_CREATED_IT = Slices.createSimpleSetSlice();
|
||||||
WritableSlice<JetExpression, DeclarationDescriptor> VARIABLE_ASSIGNMENT = Slices.createSimpleSlice();
|
WritableSlice<JetExpression, DeclarationDescriptor> VARIABLE_ASSIGNMENT = Slices.createSimpleSlice();
|
||||||
|
|
||||||
/** Was type of current expression has been already resolved */
|
/** Has type of current expression has been already resolved */
|
||||||
WritableSlice<JetExpression, Boolean> PROCESSED = Slices.createSimpleSetSlice();
|
WritableSlice<JetExpression, Boolean> PROCESSED = Slices.createSimpleSetSlice();
|
||||||
WritableSlice<JetElement, Boolean> STATEMENT = Slices.createRemovableSetSlice();
|
WritableSlice<JetElement, Boolean> STATEMENT = Slices.createRemovableSetSlice();
|
||||||
WritableSlice<CallableMemberDescriptor, Boolean> DELEGATED = Slices.createRemovableSetSlice();
|
WritableSlice<CallableMemberDescriptor, Boolean> DELEGATED = Slices.createRemovableSetSlice();
|
||||||
|
|||||||
@@ -50,12 +50,6 @@ public class TypeResolver {
|
|||||||
JetType type = resolveTypeElement(scope, annotations, typeElement, false);
|
JetType type = resolveTypeElement(scope, annotations, typeElement, false);
|
||||||
trace.record(BindingContext.TYPE, typeReference, type);
|
trace.record(BindingContext.TYPE, typeReference, type);
|
||||||
|
|
||||||
final JetUserType jetUserType = typeReference.getUserType();
|
|
||||||
if (jetUserType != null) {
|
|
||||||
final JetSimpleNameExpression referenceExpression = jetUserType.getReferenceExpression();
|
|
||||||
trace.record(BindingContext.RESOLUTION_SCOPE, referenceExpression, scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,6 +272,8 @@ public class TypeResolver {
|
|||||||
ClassifierDescriptor classifierDescriptor;
|
ClassifierDescriptor classifierDescriptor;
|
||||||
if (userType.isAbsoluteInRootNamespace()) {
|
if (userType.isAbsoluteInRootNamespace()) {
|
||||||
classifierDescriptor = JetModuleUtil.getRootNamespaceType(userType).getMemberScope().getClassifier(referencedName);
|
classifierDescriptor = JetModuleUtil.getRootNamespaceType(userType).getMemberScope().getClassifier(referencedName);
|
||||||
|
trace.record(BindingContext.RESOLUTION_SCOPE, userType.getReferenceExpression(),
|
||||||
|
JetModuleUtil.getRootNamespaceType(userType).getMemberScope());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
JetUserType qualifier = userType.getQualifier();
|
JetUserType qualifier = userType.getQualifier();
|
||||||
@@ -288,7 +284,9 @@ public class TypeResolver {
|
|||||||
return ErrorUtils.getErrorClass();
|
return ErrorUtils.getErrorClass();
|
||||||
}
|
}
|
||||||
classifierDescriptor = scope.getClassifier(referencedName);
|
classifierDescriptor = scope.getClassifier(referencedName);
|
||||||
|
trace.record(BindingContext.RESOLUTION_SCOPE, userType.getReferenceExpression(), scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
return classifierDescriptor;
|
return classifierDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ class JetSimpleNameReference extends JetPsiReference {
|
|||||||
private Object[] collectLookupElements(BindingContext bindingContext, JetScope scope) {
|
private Object[] collectLookupElements(BindingContext bindingContext, JetScope scope) {
|
||||||
List<LookupElement> result = Lists.newArrayList();
|
List<LookupElement> result = Lists.newArrayList();
|
||||||
for (final DeclarationDescriptor descriptor : scope.getAllDescriptors()) {
|
for (final DeclarationDescriptor descriptor : scope.getAllDescriptors()) {
|
||||||
PsiElement declaration = bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor.getOriginal());
|
|
||||||
LookupElementBuilder element = LookupElementBuilder.create(descriptor.getName());
|
LookupElementBuilder element = LookupElementBuilder.create(descriptor.getName());
|
||||||
String typeText = "";
|
String typeText = "";
|
||||||
String tailText = "";
|
String tailText = "";
|
||||||
@@ -107,9 +106,12 @@ class JetSimpleNameReference extends JetPsiReference {
|
|||||||
typeText = DescriptorRenderer.TEXT.render(descriptor);
|
typeText = DescriptorRenderer.TEXT.render(descriptor);
|
||||||
}
|
}
|
||||||
element = element.setTailText(tailText, tailTextGrayed).setTypeText(typeText);
|
element = element.setTailText(tailText, tailTextGrayed).setTypeText(typeText);
|
||||||
|
|
||||||
|
PsiElement declaration = bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor.getOriginal());
|
||||||
if (declaration != null) {
|
if (declaration != null) {
|
||||||
element = element.setIcon(declaration.getIcon(Iconable.ICON_FLAG_OPEN | Iconable.ICON_FLAG_VISIBILITY));
|
element = element.setIcon(declaration.getIcon(Iconable.ICON_FLAG_OPEN | Iconable.ICON_FLAG_VISIBILITY));
|
||||||
}
|
}
|
||||||
|
|
||||||
result.add(element);
|
result.add(element);
|
||||||
}
|
}
|
||||||
return result.toArray();
|
return result.toArray();
|
||||||
|
|||||||
Reference in New Issue
Block a user