mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-26 08:45:35 +00:00
AS3 error highligter - show multiple errors
This commit is contained in:
@@ -17,6 +17,8 @@
|
||||
package com.jpexs.decompiler.flash.simpleparser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -25,7 +27,7 @@ import java.util.Map;
|
||||
* @author JPEXS
|
||||
*/
|
||||
public interface SimpleParser {
|
||||
|
||||
|
||||
/**
|
||||
* Parses document.
|
||||
*
|
||||
@@ -43,4 +45,67 @@ public interface SimpleParser {
|
||||
Map<Integer, Integer> referenceToDefinition,
|
||||
List<SimpleParseException> errors
|
||||
) throws SimpleParseException, IOException, InterruptedException;
|
||||
|
||||
public static void parseVariablesList(
|
||||
List<VariableOrScope> privateVariables,
|
||||
List<VariableOrScope> sharedVariables,
|
||||
Map<Integer, List<Integer>> definitionPosToReferences,
|
||||
Map<Integer, Integer> referenceToDefinition,
|
||||
Map<String, Integer> parentVarNameToDefinitionPosition
|
||||
) {
|
||||
Map<String, Integer> privateVarNameToDefinitionPosition = new LinkedHashMap<>();
|
||||
privateVarNameToDefinitionPosition.putAll(parentVarNameToDefinitionPosition);
|
||||
|
||||
for (VariableOrScope vt : privateVariables) {
|
||||
if (vt instanceof Variable) {
|
||||
Variable v = (Variable) vt;
|
||||
if (v.definition) {
|
||||
privateVarNameToDefinitionPosition.put(v.name, v.position);
|
||||
definitionPosToReferences.put(v.position, new ArrayList<>());
|
||||
} else {
|
||||
if (!privateVarNameToDefinitionPosition.containsKey(v.name)) {
|
||||
parentVarNameToDefinitionPosition.put(v.name, -v.position - 1);
|
||||
privateVarNameToDefinitionPosition.put(v.name, -v.position - 1);
|
||||
definitionPosToReferences.put(-v.position - 1, new ArrayList<>());
|
||||
definitionPosToReferences.get(-v.position - 1).add(v.position);
|
||||
referenceToDefinition.put(v.position, -v.position - 1);
|
||||
} else {
|
||||
int definitionPos = privateVarNameToDefinitionPosition.get(v.name);
|
||||
definitionPosToReferences.get(definitionPos).add(v.position);
|
||||
referenceToDefinition.put(v.position, definitionPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (vt instanceof Scope) {
|
||||
Scope vs = (Scope) vt;
|
||||
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, privateVarNameToDefinitionPosition);
|
||||
}
|
||||
}
|
||||
for (VariableOrScope vt : sharedVariables) {
|
||||
if (vt instanceof Variable) {
|
||||
Variable v = (Variable) vt;
|
||||
if (v.definition) {
|
||||
parentVarNameToDefinitionPosition.put(v.name, v.position);
|
||||
privateVarNameToDefinitionPosition.put(v.name, v.position);
|
||||
definitionPosToReferences.put(v.position, new ArrayList<>());
|
||||
} else {
|
||||
if (!privateVarNameToDefinitionPosition.containsKey(v.name)) {
|
||||
parentVarNameToDefinitionPosition.put(v.name, -v.position - 1);
|
||||
privateVarNameToDefinitionPosition.put(v.name, -v.position - 1);
|
||||
definitionPosToReferences.put(-v.position - 1, new ArrayList<>());
|
||||
definitionPosToReferences.get(-v.position - 1).add(v.position);
|
||||
referenceToDefinition.put(v.position, -v.position - 1);
|
||||
} else {
|
||||
int definitionPos = privateVarNameToDefinitionPosition.get(v.name);
|
||||
definitionPosToReferences.get(definitionPos).add(v.position);
|
||||
referenceToDefinition.put(v.position, definitionPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (vt instanceof Scope) {
|
||||
Scope vs = (Scope) vt;
|
||||
parseVariablesList(vs.getPrivateItems(), vs.getSharedItems(), definitionPosToReferences, referenceToDefinition, privateVarNameToDefinitionPosition);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user