提交 8ad5db5b 编写于 作者: S Stepan Koltsov

Fix KT-1639: extend JFrame

#KT-1639 Fixed
上级 b51805c8
......@@ -1081,25 +1081,12 @@ public class JavaDescriptorResolver {
Map<String, NamedMembers> membersForProperties = scopeData.namedMembersMap;
for (Map.Entry<String, NamedMembers> entry : membersForProperties.entrySet()) {
NamedMembers namedMembers = entry.getValue();
if (namedMembers.propertyAccessors == null) {
continue;
}
String propertyName = entry.getKey();
resolveNamedGroupProperties(owner, scopeData, staticMembers, namedMembers, propertyName, "class or namespace " + psiClass.getQualifiedName());
descriptors.addAll(namedMembers.propertyDescriptors);
}
for (JetType supertype : getSupertypes(scopeData)) {
for (DeclarationDescriptor descriptor : supertype.getMemberScope().getAllDescriptors()) {
// TODO: ugly
if (descriptor instanceof VariableDescriptor) {
descriptors.add((VariableDescriptor) descriptor);
}
}
}
return descriptors;
}
......@@ -1142,8 +1129,7 @@ public class JavaDescriptorResolver {
}
if (namedMembers.propertyAccessors == null) {
namedMembers.propertyDescriptors = Collections.emptySet();
return;
namedMembers.propertyAccessors = Collections.emptyList();
}
TypeVariableResolver typeVariableResolver = TypeVariableResolvers.classTypeVariableResolver(owner, context);
......@@ -1193,7 +1179,7 @@ public class JavaDescriptorResolver {
}
Set<VariableDescriptor> r = new HashSet<VariableDescriptor>(1);
Set<PropertyDescriptor> propertiesFromCurrent = new HashSet<PropertyDescriptor>(1);
int regularProperitesCount = 0;
for (GroupingValue members : map.values()) {
......@@ -1324,10 +1310,33 @@ public class JavaDescriptorResolver {
trace.record(BindingContext.VARIABLE, anyMember.getMember().psiMember, propertyDescriptor);
r.add(propertyDescriptor);
propertiesFromCurrent.add(propertyDescriptor);
}
namedMembers.propertyDescriptors = r;
Set<PropertyDescriptor> propertiesFromSupertypes = getPropertiesFromSupertypes(scopeData, propertyName);
final Set<VariableDescriptor> properties = Sets.newHashSet();
if (owner instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) owner;
OverrideResolver.generateOverridesInFunctionGroup(propertyName, propertiesFromSupertypes, propertiesFromCurrent, classDescriptor, new OverrideResolver.DescriptorSink() {
@Override
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
properties.add((PropertyDescriptor) fakeOverride);
}
@Override
public void conflict(@NotNull CallableMemberDescriptor fromSuper, @NotNull CallableMemberDescriptor fromCurrent) {
// nop
}
});
}
properties.addAll(propertiesFromCurrent);
namedMembers.propertyDescriptors = properties;
}
private void resolveNamedGroupFunctions(ClassOrNamespaceDescriptor owner, PsiClass psiClass, TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, String methodName, ResolverScopeData scopeData) {
......@@ -1380,6 +1389,16 @@ public class JavaDescriptorResolver {
return r;
}
private Set<PropertyDescriptor> getPropertiesFromSupertypes(ResolverScopeData scopeData, String propertyName) {
Set<PropertyDescriptor> r = new HashSet<PropertyDescriptor>();
for (JetType supertype : getSupertypes(scopeData)) {
for (VariableDescriptor property : supertype.getMemberScope().getProperties(propertyName)) {
r.add((PropertyDescriptor) property);
}
}
return r;
}
private ResolverScopeData getResolverScopeData(@NotNull ClassOrNamespaceDescriptor owner, PsiClassWrapper psiClass) {
// TODO: store scopeData in Java*Scope
ResolverScopeData scopeData;
......
......@@ -81,15 +81,16 @@ class JavaDescriptorResolverHelper {
private void processFields() {
if (!kotlin) {
for (PsiField field0 : psiClass.getPsiClass().getFields()) {
for (PsiField field0 : psiClass.getPsiClass().getAllFields()) {
PsiFieldWrapper field = new PsiFieldWrapper(field0);
// group must be created even for excluded field
NamedMembers namedMembers = getNamedMembers(field.getName());
if (!includeMember(field)) {
continue;
}
NamedMembers namedMembers = getNamedMembers(field.getName());
TypeSource type = new TypeSource("", field.getType(), field0);
namedMembers.addPropertyAccessor(new PropertyAccessorData(field, type, null));
}
......
package test
import javax.swing.JFrame
class KFrame() : JFrame() {
{
val x = this.accessibleContext // make sure field is visible
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册