package org.extendj; import org.extendj.ast.AbstractFinding; import org.extendj.ast.Declaration; import org.extendj.ast.MultipleDeclarationFinding; import org.extendj.ast.VariableShadowFinding; import org.junit.jupiter.api.Assertions; import java.util.Set; public abstract class ScopeAnalysisTest { static void assertShadow(Set<AbstractFinding> findings, String name, int shadowerLine, int shadowedLine) { for (AbstractFinding finding : findings) { if (finding instanceof VariableShadowFinding) { Declaration shadower = ((VariableShadowFinding)finding).getShadower(); Declaration shadowed = ((VariableShadowFinding)finding).getShadowed(); if (shadowed.getName().equals(name) && shadowed.lineNumber() == shadowedLine && shadower.lineNumber() == shadowerLine) { return; } } } Assertions.fail("No shadow finding found for name '" + name + "' in lines " + shadowerLine + " > " + shadowedLine); } static void assertRedefinition(Set<AbstractFinding> findings, String name, int declLine) { for (AbstractFinding finding : findings) { if (finding instanceof MultipleDeclarationFinding) { Declaration declaration = ((MultipleDeclarationFinding)finding).getDeclaration(); if (declaration.getName().equals(name) && declaration.lineNumber() == declLine) { return; } } } Assertions.fail("No multi-decl finding found for name '" + name + "' in line " + declLine); } }