package org.overture.codegen.vdm2java; import org.overture.ast.definitions.AInheritedDefinition; import org.overture.ast.definitions.PDefinition; import org.overture.ast.definitions.SFunctionDefinition; import org.overture.ast.definitions.SOperationDefinition; import org.overture.ast.expressions.AFieldExp; import org.overture.ast.expressions.AVariableExp; import org.overture.ast.intf.lex.ILexNameToken; import org.overture.ast.lex.LexIdentifierToken; import org.overture.ast.statements.ACallObjectStm; import org.overture.ast.statements.ACallStm; import org.overture.codegen.analysis.violations.NamingComparison; import org.overture.codegen.ir.IRInfo; public class ObjectMethodComparison extends NamingComparison { public ObjectMethodComparison(String[] names, IRInfo irInfo, String correctionPrefix) { super(names, irInfo, correctionPrefix); } @Override public boolean mustHandleNameToken(ILexNameToken nameToken) { if (nameToken.parent() instanceof SOperationDefinition) { // Rename operation definition return names.contains(nameToken.getName()); } else if (nameToken.parent() instanceof SFunctionDefinition) { // Rename function definition return names.contains(nameToken.getName()); } else if (nameToken.parent() instanceof ACallStm) { // Rename call statement, e.g. wait() return names.contains(nameToken.getName()); } else if (nameToken.parent() instanceof ACallObjectStm) { // Rename call object statement, e.g. e.wait() return names.contains(nameToken.getName()); } else if (nameToken.parent() instanceof AFieldExp) { // Rename field expression, e.notify() return names.contains(nameToken.getName()); } else if (nameToken.parent() instanceof AVariableExp) { AVariableExp var = (AVariableExp) nameToken.parent(); PDefinition unfolded = var.getVardef(); while (unfolded instanceof AInheritedDefinition) { unfolded = ((AInheritedDefinition) unfolded).getSuperdef(); } if (unfolded instanceof SFunctionDefinition || unfolded instanceof SOperationDefinition) { if (names.contains(nameToken.getName())) { return true; } } } return false; } @Override public boolean mustHandleLexIdentifierToken(LexIdentifierToken lexId) { // Then 'lexId' must be the field if (lexId.parent() instanceof ACallObjectStm) { return names.contains(lexId.getName()); } else if (lexId.parent() instanceof AFieldExp) { return names.contains(lexId.getName()); } return false; } }