Fix KT-1639: extend JFrame
#KT-1639 Fixed
This commit is contained in:
+37
-18
@@ -1081,25 +1081,12 @@ public class JavaDescriptorResolver {
|
|||||||
Map<String, NamedMembers> membersForProperties = scopeData.namedMembersMap;
|
Map<String, NamedMembers> membersForProperties = scopeData.namedMembersMap;
|
||||||
for (Map.Entry<String, NamedMembers> entry : membersForProperties.entrySet()) {
|
for (Map.Entry<String, NamedMembers> entry : membersForProperties.entrySet()) {
|
||||||
NamedMembers namedMembers = entry.getValue();
|
NamedMembers namedMembers = entry.getValue();
|
||||||
if (namedMembers.propertyAccessors == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String propertyName = entry.getKey();
|
String propertyName = entry.getKey();
|
||||||
|
|
||||||
resolveNamedGroupProperties(owner, scopeData, staticMembers, namedMembers, propertyName, "class or namespace " + psiClass.getQualifiedName());
|
resolveNamedGroupProperties(owner, scopeData, staticMembers, namedMembers, propertyName, "class or namespace " + psiClass.getQualifiedName());
|
||||||
descriptors.addAll(namedMembers.propertyDescriptors);
|
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;
|
return descriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1142,8 +1129,7 @@ public class JavaDescriptorResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (namedMembers.propertyAccessors == null) {
|
if (namedMembers.propertyAccessors == null) {
|
||||||
namedMembers.propertyDescriptors = Collections.emptySet();
|
namedMembers.propertyAccessors = Collections.emptyList();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeVariableResolver typeVariableResolver = TypeVariableResolvers.classTypeVariableResolver(owner, context);
|
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;
|
int regularProperitesCount = 0;
|
||||||
for (GroupingValue members : map.values()) {
|
for (GroupingValue members : map.values()) {
|
||||||
@@ -1324,10 +1310,33 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
trace.record(BindingContext.VARIABLE, anyMember.getMember().psiMember, propertyDescriptor);
|
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) {
|
private void resolveNamedGroupFunctions(ClassOrNamespaceDescriptor owner, PsiClass psiClass, TypeSubstitutor typeSubstitutorForGenericSuperclasses, NamedMembers namedMembers, String methodName, ResolverScopeData scopeData) {
|
||||||
@@ -1380,6 +1389,16 @@ public class JavaDescriptorResolver {
|
|||||||
return r;
|
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) {
|
private ResolverScopeData getResolverScopeData(@NotNull ClassOrNamespaceDescriptor owner, PsiClassWrapper psiClass) {
|
||||||
// TODO: store scopeData in Java*Scope
|
// TODO: store scopeData in Java*Scope
|
||||||
ResolverScopeData scopeData;
|
ResolverScopeData scopeData;
|
||||||
|
|||||||
+4
-3
@@ -81,15 +81,16 @@ class JavaDescriptorResolverHelper {
|
|||||||
|
|
||||||
private void processFields() {
|
private void processFields() {
|
||||||
if (!kotlin) {
|
if (!kotlin) {
|
||||||
for (PsiField field0 : psiClass.getPsiClass().getFields()) {
|
for (PsiField field0 : psiClass.getPsiClass().getAllFields()) {
|
||||||
PsiFieldWrapper field = new PsiFieldWrapper(field0);
|
PsiFieldWrapper field = new PsiFieldWrapper(field0);
|
||||||
|
|
||||||
|
// group must be created even for excluded field
|
||||||
|
NamedMembers namedMembers = getNamedMembers(field.getName());
|
||||||
|
|
||||||
if (!includeMember(field)) {
|
if (!includeMember(field)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
NamedMembers namedMembers = getNamedMembers(field.getName());
|
|
||||||
|
|
||||||
TypeSource type = new TypeSource("", field.getType(), field0);
|
TypeSource type = new TypeSource("", field.getType(), field0);
|
||||||
namedMembers.addPropertyAccessor(new PropertyAccessorData(field, type, null));
|
namedMembers.addPropertyAccessor(new PropertyAccessorData(field, type, null));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
import javax.swing.JFrame
|
||||||
|
|
||||||
|
class KFrame() : JFrame() {
|
||||||
|
{
|
||||||
|
val x = this.accessibleContext // make sure field is visible
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user