Skip to content

Commit 20830a4

Browse files
committed
Fix autocompletion recursive Inheritance / Inner Class checking
1 parent 11f500d commit 20830a4

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

modules/gdscript/gdscript_editor.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,7 +1333,7 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class,
13331333
r_result.insert(option.display, option);
13341334
}
13351335

1336-
if (clss->base_type.kind == GDScriptParser::DataType::CLASS && clss->base_type.class_type) {
1336+
if (clss->base_type.is_set()) {
13371337
GDScriptCompletionIdentifier base_type;
13381338
base_type.type = clss->base_type;
13391339
base_type.type.is_meta_type = p_static && !outer;
@@ -2632,6 +2632,7 @@ static bool _guess_identifier_type_from_class(GDScriptParser::CompletionContext
26322632
ERR_FAIL_COND_V_MSG(recursion.check(), false, "Reached recursion limit while trying to guess type.");
26332633

26342634
const GDScriptParser::ClassNode *clss = p_class;
2635+
bool outer = false;
26352636
while (clss) {
26362637
if (clss->has_member(p_identifier)) {
26372638
const GDScriptParser::ClassNode::Member &member = clss->get_member(p_identifier);
@@ -2705,14 +2706,15 @@ static bool _guess_identifier_type_from_class(GDScriptParser::CompletionContext
27052706
}
27062707
return false;
27072708
}
2708-
if (clss->base_type.class_type != nullptr) {
2709+
if (clss->base_type.is_set()) {
27092710
GDScriptCompletionIdentifier base;
27102711
base.type = clss->base_type;
2711-
base.type.is_meta_type = p_static;
2712+
base.type.is_meta_type = p_static && !outer;
27122713
if (_guess_identifier_type_from_base(p_context, base, p_identifier, r_type)) {
27132714
return true;
27142715
}
27152716
}
2717+
outer = true;
27162718
clss = clss->outer;
27172719
}
27182720
return false;

0 commit comments

Comments
 (0)