Skip to content

Commit

Permalink
Fix issue with can assign to anonymousType where inherited members in…
Browse files Browse the repository at this point in the history
… classes where not included when checking class members.
  • Loading branch information
m0rkeulv committed Aug 18, 2024
1 parent 969322c commit fc745d7
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.intellij.plugins.haxe.metadata.psi.impl.HaxeMetadataTypeName;
import com.intellij.plugins.haxe.metadata.util.HaxeMetadataUtils;
import com.intellij.plugins.haxe.model.HaxeClassModel;
import com.intellij.plugins.haxe.model.HaxeFieldModel;
import com.intellij.plugins.haxe.model.HaxeModelTarget;
import com.intellij.plugins.haxe.model.type.HaxeGenericResolver;
import com.intellij.plugins.haxe.model.type.SpecificTypeReference;
Expand Down Expand Up @@ -136,6 +137,8 @@ public String getName() {
@NotNull
List<HaxeNamedComponent> getHaxeFieldAll(HaxeComponentType... fromTypesFilter);

List<HaxePsiField> getHaxeFieldsAncestor(boolean unique);

@Nullable
HaxeNamedComponent findHaxeFieldByName(@NotNull final String name, @Nullable HaxeGenericResolver resolver);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,15 @@ public List<HaxeMethod> getHaxeMethodsAncestor(boolean unique) {
}
return result;
}
@NotNull
public List<HaxePsiField> getHaxeFieldsAncestor(boolean unique) {
List<HaxeNamedComponent> fields = getAncestorHaxeNamedComponents(HaxeComponentType.FIELD, unique);
final List<HaxePsiField> result = new ArrayList<>();
for (HaxeNamedComponent field : fields) {
result.add((HaxePsiField)field);
}
return result;
}

@NotNull
public List<HaxeNamedComponent> getHaxeFieldAll(HaxeComponentType... fromTypesFilter) {
Expand Down
17 changes: 15 additions & 2 deletions src/main/java/com/intellij/plugins/haxe/model/HaxeClassModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -563,10 +563,17 @@ public List<HaxeBaseMemberModel> getMembers(@Nullable HaxeGenericResolver resolv
public List<HaxeBaseMemberModel> getAllMembers(@Nullable HaxeGenericResolver resolver) {
final List<HaxeBaseMemberModel> members = new ArrayList<>();
members.addAll(getAllMethods(resolver));
members.addAll(getFields());// TODO add get all ?
members.addAll(getAllFields(resolver));
return members;
}

private List<HaxeFieldModel> getAllFields(@Nullable HaxeGenericResolver resolver) {
List<HaxeFieldModel> models = getAncestorFields(resolver);
models.addAll( getFields());

return models;
}

@NotNull
public List<HaxeBaseMemberModel> getMembersSelf() {
final List<HaxeBaseMemberModel> members = new ArrayList<>();
Expand Down Expand Up @@ -633,8 +640,14 @@ public List<HaxeMethodModel> getAncestorMethods(@Nullable HaxeGenericResolver re
}
return models;
}
public List<HaxeFieldModel> getAncestorFields(@Nullable HaxeGenericResolver resolver) {
List<HaxeFieldModel> models = new ArrayList<>();
for (HaxePsiField field : haxeClass.getHaxeFieldsAncestor(true)) {
models.add((HaxeFieldModel)field.getModel());
}
return models;
}
public HaxeMethodModel getAncestorMethod(String name, @Nullable HaxeGenericResolver resolver) {
List<HaxeMethodModel> models = new ArrayList<HaxeMethodModel>();
for (HaxeMethod method : haxeClass.getHaxeMethodsAncestor(true)) {
HaxeMethodModel methodModel = method.getModel();
if (name.equals(methodModel.getName())) return methodModel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ private static boolean containsAllMembers(SpecificHaxeClassReference to, Specifi
optional = fieldModel.isOptional() || fieldModel.hasInitializer();
ignored = fieldModel.isStatic();

Optional<HaxeBaseMemberModel> first = fromMembers.stream().filter(model -> model.getNamePsi().textMatches(name)).findFirst();
Optional<HaxeBaseMemberModel> first = fromMembers.stream().filter(model -> model.getNamePsi().getIdentifier().textMatches(name)).findFirst();
if (first.isPresent()) {
memberExists = true;
if (checkAnonymousMemberTypes) {
Expand All @@ -601,7 +601,7 @@ else if (!canAssign) {
}
}
}else {
memberExists = fromMembers.stream().anyMatch(model -> model.getNamePsi().textMatches(name));
memberExists = fromMembers.stream().anyMatch(model -> model.getNamePsi().getIdentifier().textMatches(name));
}

if (!ignored && !memberExists && !optional){
Expand All @@ -614,7 +614,7 @@ else if (!canAssign) {
// check object literals for too many fields
if (isStruct && fromClassModel.isObjectLiteral()) {
for (HaxeBaseMemberModel member : fromMembers) {
if(toMembers.stream().noneMatch(model -> model.getNamePsi().textMatches(member.getName()))) {
if(toMembers.stream().noneMatch(model -> model.getNamePsi().getIdentifier().textMatches(member.getName()))) {
// too many fields
return false;
}
Expand Down

0 comments on commit fc745d7

Please sign in to comment.