Static vs non static suggestions

This commit is contained in:
Jindra Petřík
2025-06-15 01:24:18 +02:00
parent 24e34ca272
commit 53b8279ce5
5 changed files with 71 additions and 15 deletions

View File

@@ -662,7 +662,7 @@ public final class AbcIndexing {
continue;
}
if (Objects.equals(def.parent, ciName)) {
ret.add(def.propName);
ret.add("static::" + def.propName);
}
}
}

View File

@@ -2297,6 +2297,7 @@ public class ActionScript3SimpleParser implements SimpleParser {
Map<Integer, Path> referenceToExternalTraitKey,
Map<Path, List<Integer>> externalTraitKeyToReference,
Map<Integer, Path> separatorPosToType,
Map<Integer, Boolean> separatorIsStatic,
Map<Path, List<String>> localTypeTraitNames,
Map<Integer, Path> definitionToType,
Map<Integer, Path> definitionToCallType
@@ -2319,7 +2320,7 @@ public class ActionScript3SimpleParser implements SimpleParser {
//Logger.getLogger(ActionScript3SimpleParser.class.getName()).log(Level.SEVERE, null, ex);
throw new SimpleParseException(str, ex.line);
}
SimpleParser.parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, errors, true, externalTypes, referenceToExternalTypeIndex, externalTypeIndexToReference, linkHandler, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, localTypeTraitNames, definitionToType, definitionToCallType);
SimpleParser.parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, errors, true, externalTypes, referenceToExternalTypeIndex, externalTypeIndexToReference, linkHandler, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, separatorIsStatic, localTypeTraitNames, definitionToType, definitionToCallType);
}
/**

View File

@@ -1582,6 +1582,7 @@ public class ActionScript2SimpleParser implements SimpleParser {
Map<Integer, Path> referenceToExternalTraitKey,
Map<Path, List<Integer>> externalTraitKeyToReference,
Map<Integer, Path> separatorPosToType,
Map<Integer, Boolean> separatorIsStatic,
Map<Path, List<String>> localTypeTraitNames,
Map<Integer, Path> definitionToType,
Map<Integer, Path> definitionToCallType
@@ -1675,7 +1676,7 @@ public class ActionScript2SimpleParser implements SimpleParser {
} catch (ActionParseException ex) {
errors.add(new SimpleParseException(ex.getMessage(), ex.line, ex.position));
}
SimpleParser.parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, errors, false, externalTypes, referenceToExternalTypeIndex, externalTypeIndexToReference, linkHandler, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, localTypeTraitNames, definitionToType, definitionToCallType);
SimpleParser.parseVariablesList(new ArrayList<>(), vars, definitionPosToReferences, referenceToDefinition, errors, false, externalTypes, referenceToExternalTypeIndex, externalTypeIndexToReference, linkHandler, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, separatorIsStatic, localTypeTraitNames, definitionToType, definitionToCallType);
}
private void versionRequired(List<SimpleParseException> errors, ParsedSymbol s, int min) throws SimpleParseException {

View File

@@ -60,6 +60,7 @@ public interface SimpleParser {
Map<Integer, Path> referenceToExternalTraitKey,
Map<Path, List<Integer>> externalTraitKeyToReference,
Map<Integer, Path> separatorPosToType,
Map<Integer, Boolean> separatorIsStatic,
Map<Path, List<String>> localTypeTraitNames,
Map<Integer, Path> definitionToType,
Map<Integer, Path> definitionToCallType
@@ -79,7 +80,8 @@ public interface SimpleParser {
Map<Integer, Path> referenceToExternalTraitKey,
Map<Path, List<Integer>> externalTraitKeyToReference,
Map<Integer, Path> separatorPosToType,
Map<Path, List<String>> localTypeTraitNames,
Map<Integer, Boolean> separatorIsStatic,
Map<Path, List<String>> localTypeTraitNames,
Map<Integer, Path> definitionToType,
Map<Integer, Path> definitionToCallType
) {
@@ -101,15 +103,20 @@ public interface SimpleParser {
findClassTraits(sharedVariables, traitFullNameToDefinition, definitionPosToReferences, positionToStatic, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType);
for (Path p : traitFullNameToDefinition.keySet()) {
int definition = traitFullNameToDefinition.get(p);
boolean isStatic = false;
if (positionToStatic.containsKey(definition) && positionToStatic.get(definition)) {
isStatic = true;
}
Path cls = p.getParent();
String traitName = p.getLast().toString();
if (!localTypeTraitNames.containsKey(cls)) {
localTypeTraitNames.put(cls, new ArrayList<>());
}
localTypeTraitNames.get(cls).add(traitName);
localTypeTraitNames.get(cls).add((isStatic ? "static::" : "") + traitName);
}
parseVariablesList(privateVariables, sharedVariables, definitionPosToReferences, referenceToDefinition, new LinkedHashMap<>(), new LinkedHashMap<>(), positionToStatic, true, errors, null, innerFunctionCanUseTraits, externalSimpleTypes, externalTypes, referenceToExternalTypeIndex, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType);
parseVariablesList(privateVariables, sharedVariables, definitionPosToReferences, referenceToDefinition, new LinkedHashMap<>(), new LinkedHashMap<>(), positionToStatic, true, errors, null, innerFunctionCanUseTraits, externalSimpleTypes, externalTypes, referenceToExternalTypeIndex, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, separatorIsStatic);
for (Map.Entry<Integer, Integer> entry : referenceToExternalTypeIndex.entrySet()) {
if (!externalTypeIndexToReference.containsKey(entry.getValue())) {
externalTypeIndexToReference.put(entry.getValue(), new ArrayList<>());
@@ -142,7 +149,8 @@ public interface SimpleParser {
Map<Path, Path> simpleExternalClassNameToFullClassName,
Map<Integer, Path> referenceToExternalTraitKey,
Map<Path, List<Integer>> externalTraitKeyToReference,
Map<Integer, Path> separatorPosToType
Map<Integer, Path> separatorPosToType,
Map<Integer, Boolean> separatorIsStatic
) {
Map<Path, Integer> privateVarNameToDefinitionPosition = new LinkedHashMap<>();
privateVarNameToDefinitionPosition.putAll(parentVarNameToDefinitionPosition);
@@ -153,7 +161,7 @@ public interface SimpleParser {
for (VariableOrScope vt : privateVariables) {
if (vt instanceof Separator) {
Separator s = (Separator) vt;
searchTrait(s.parentName, s.position, true, separatorPosToType, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
searchTrait(s.parentName, s.position, true, separatorPosToType, separatorIsStatic, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
}
if (vt instanceof Variable) {
Variable v = (Variable) vt;
@@ -179,7 +187,7 @@ public interface SimpleParser {
} else if (externalSimpleTypes.contains(v.name)) {
referenceToExternalTypeIndex.put(v.position, externalSimpleTypes.indexOf(v.name));
} else {
boolean traitFound = searchTrait(v.name, v.position, false, separatorPosToType, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
boolean traitFound = searchTrait(v.name, v.position, false, separatorPosToType, separatorIsStatic, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
if (!traitFound) {
parentVarFullNameToDefinitionPosition.put(v.name, -v.position - 1);
parentVarNameToDefinitionPosition.put(v.getLastName(), -v.position - 1);
@@ -242,13 +250,13 @@ public interface SimpleParser {
}
}
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, subPrivateVarFullNameToDefinitionPosition, subPrivateVarNameToDefinitionPosition, positionToStatic, subStatic, errors, vs, innerFunctionCanUseTraits, externalSimpleTypes, externalFullTypes, referenceToExternalTypeIndex, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType);
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, subPrivateVarFullNameToDefinitionPosition, subPrivateVarNameToDefinitionPosition, positionToStatic, subStatic, errors, vs, innerFunctionCanUseTraits, externalSimpleTypes, externalFullTypes, referenceToExternalTypeIndex, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, separatorIsStatic);
}
}
for (VariableOrScope vt : sharedVariables) {
if (vt instanceof Separator) {
Separator s = (Separator) vt;
searchTrait(s.parentName, s.position, true, separatorPosToType, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
searchTrait(s.parentName, s.position, true, separatorPosToType, separatorIsStatic, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
}
if (vt instanceof Variable) {
Variable v = (Variable) vt;
@@ -276,7 +284,7 @@ public interface SimpleParser {
} else if (externalSimpleTypes.contains(v.name)) {
referenceToExternalTypeIndex.put(v.position, externalSimpleTypes.indexOf(v.name));
} else {
boolean traitFound = searchTrait(v.name, v.position, false, separatorPosToType, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
boolean traitFound = searchTrait(v.name, v.position, false, separatorPosToType, separatorIsStatic, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, definitionPosToReferences, referenceToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference);
if (!traitFound) {
parentVarFullNameToDefinitionPosition.put(v.name, -v.position - 1);
parentVarNameToDefinitionPosition.put(v.getFirstName(), -v.position - 1);
@@ -339,7 +347,7 @@ public interface SimpleParser {
}
}
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, positionToStatic, subStatic, errors, vs, innerFunctionCanUseTraits, externalSimpleTypes, externalFullTypes, referenceToExternalTypeIndex, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType);
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, privateVarFullNameToDefinitionPosition, privateVarNameToDefinitionPosition, positionToStatic, subStatic, errors, vs, innerFunctionCanUseTraits, externalSimpleTypes, externalFullTypes, referenceToExternalTypeIndex, definitionToType, definitionToCallType, definitionToSubType, definitionToCallSubType, traitFullNameToDefinition, linkHandler, simpleExternalClassNameToFullClassName, referenceToExternalTraitKey, externalTraitKeyToReference, separatorPosToType, separatorIsStatic);
}
}
}
@@ -355,6 +363,12 @@ public interface SimpleParser {
Map<Integer, Variable> definitionToCallSubType
) {
for (VariableOrScope v : variables) {
if (v instanceof Type) {
Type t = (Type) v;
if (t.definition) {
definitionToType.put(t.position, t.name);
}
}
if (v instanceof ClassTrait) {
ClassTrait ct = (ClassTrait) v;
definitionPosToReferences.put(ct.position, new ArrayList<>());
@@ -386,6 +400,7 @@ public interface SimpleParser {
int vPosition,
boolean separator,
Map<Integer, Path> separatorPosToType,
Map<Integer, Boolean> separatorIsStatic,
Map<Path, Integer> privateVarFullNameToDefinitionPosition,
Map<Path, Integer> privateVarNameToDefinitionPosition,
Map<Integer, Path> definitionToType,
@@ -413,12 +428,17 @@ public interface SimpleParser {
definitionPos = privateVarNameToDefinitionPosition.get(firstName);
}
Path type = null;
boolean isStatic = false;
if (definitionPos != null) {
if (definitionToType.containsKey(definitionPos)) {
type = definitionToType.get(definitionPos);
if (type.getLast().equals(firstName)) {
isStatic = true;
}
}
} else if (simpleExternalClassNameToFullClassName.containsKey(firstName)) {
type = simpleExternalClassNameToFullClassName.get(firstName);
isStatic = true;
}
if (type != null) {
traitFound = true;
@@ -527,6 +547,7 @@ public interface SimpleParser {
}
if (separator) {
separatorPosToType.put(vPosition, type);
separatorIsStatic.put(vPosition, isStatic);
}
}
}
@@ -539,12 +560,17 @@ public interface SimpleParser {
definitionPos = privateVarNameToDefinitionPosition.get(firstName);
}
Path type = null;
boolean isStatic = false;
if (definitionPos != null) {
if (definitionToType.containsKey(definitionPos)) {
type = definitionToType.get(definitionPos);
if (type.getLast().equals(firstName)) {
isStatic = true;
}
}
} else if (simpleExternalClassNameToFullClassName.containsKey(firstName)) {
type = simpleExternalClassNameToFullClassName.get(firstName);
isStatic = true;
}
if (type != null) {
if (definitionPos != null) {
@@ -559,6 +585,7 @@ public interface SimpleParser {
referenceToExternalTraitKey.put(vPosition, traitKey);
}*/
separatorPosToType.put(vPosition, type);
separatorIsStatic.put(vPosition, isStatic);
}
}
return traitFound;