From ffbd4c9ce5d754a7719f66f3a057228ec900f435 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Fri, 3 Jan 2020 21:27:30 +0100 Subject: [PATCH] fixed package check, adapted tests (please check!). test now always require (part of the) file name, ask me why! --- .../src/main/jastadd/ProgramToScopeTree.jrag | 4 ++-- .../src/test/java/org/extendj/InnerTest.java | 20 ++++++++-------- .../test/java/org/extendj/ProtectedTest.java | 24 +++++++++---------- .../java/org/extendj/ScopeAnalysisTest.java | 24 +++---------------- .../java/org/extendj/SimpleScopeTest.java | 10 ++++---- .../org/extendj/SuperclassFieldsTest.java | 6 ++--- 6 files changed, 35 insertions(+), 53 deletions(-) diff --git a/scope4j/src/main/jastadd/ProgramToScopeTree.jrag b/scope4j/src/main/jastadd/ProgramToScopeTree.jrag index 4695a2f..d472e0d 100644 --- a/scope4j/src/main/jastadd/ProgramToScopeTree.jrag +++ b/scope4j/src/main/jastadd/ProgramToScopeTree.jrag @@ -18,11 +18,11 @@ aspect ProgramToScopeTree { to ASTNode.scope() for containingScope(); ClassDecl contributes protectedScope() - when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && !accessibleFromPackage(superclass().hostPackage()) + when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && !hostPackage().equals(superclass().hostPackage()) to ClassDecl.protectedScope() for superclass(); ClassDecl contributes protectedScope() - when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && accessibleFromPackage(superclass().hostPackage()) + when !isInnerClass() && superclass().isClassDecl() && superclass().compilationUnit().fromSource() && hostPackage().equals(superclass().hostPackage()) to ClassDecl.packageScope() for superclass(); Block contributes scope() to ASTNode.scope() for containingScope(); diff --git a/scope4j/src/test/java/org/extendj/InnerTest.java b/scope4j/src/test/java/org/extendj/InnerTest.java index c5c1871..f07851f 100644 --- a/scope4j/src/test/java/org/extendj/InnerTest.java +++ b/scope4j/src/test/java/org/extendj/InnerTest.java @@ -17,24 +17,24 @@ public class InnerTest extends ScopeAnalysisTest { System.out.println(findings); // anonymous class - assertShadow(findings, "fieldA", 11, 13); - assertShadow(findings, "fieldA", 13, 3); + assertShadow(findings, "fieldA", "ClassA", 11, "ClassA", 13); + assertShadow(findings, "fieldA", "ClassA", 13, "ClassA", 3); // local inner class - assertShadow(findings, "fieldA", 27, 29); - assertShadow(findings, "fieldA", 29, 3); - assertShadow(findings, "changingVar", 25, 19); + assertShadow(findings, "fieldA", "ClassA", 27, "ClassA", 29); + assertShadow(findings, "fieldA", "ClassA", 29, "ClassA", 3); + assertShadow(findings, "changingVar", "ClassA", 25, "ClassA", 19); // static member class - assertShadow(findings, "fieldA", 37, 35); - assertShadow(findings, "fieldA", 35, 3); + assertShadow(findings, "fieldA", "ClassA", 37, "ClassA", 35); + assertShadow(findings, "fieldA", "ClassA", 35, "ClassA", 3); // member class - assertShadow(findings, "fieldA", 44, 42); - assertShadow(findings, "fieldA", 42, 3); + assertShadow(findings, "fieldA", "ClassA", 44, "ClassA", 42); + assertShadow(findings, "fieldA", "ClassA", 42, "ClassA", 3); // anonymous class defined in other class - assertShadow(findings, "fieldB", 5, 10); + assertShadow(findings, "fieldB", "ClassB", 5, "ClassB", 10); // this finding is currently not found // assertShadow(findings, "fieldB", 10, 4); diff --git a/scope4j/src/test/java/org/extendj/ProtectedTest.java b/scope4j/src/test/java/org/extendj/ProtectedTest.java index 2ed5d96..3d53bb4 100644 --- a/scope4j/src/test/java/org/extendj/ProtectedTest.java +++ b/scope4j/src/test/java/org/extendj/ProtectedTest.java @@ -78,20 +78,20 @@ public class ProtectedTest extends ScopeAnalysisTest { assertShadow(findings, "fProtected", classD, 15, classA, 11); assertShadow(findings, "fPublic", classD, 16, classA, 12); // D.D() - assertShadow(findings, "fPrivate", classD, 19, classA, 13); - assertShadow(findings, "fPackage", classD, 20, classA, 14); - assertShadow(findings, "fProtected", classD, 21, classA, 15); - assertShadow(findings, "fPublic", classD, 22, classA, 16); + assertNotShadow(findings, "fPrivate", classD, 19, classA, 9); // true, but not helpful + assertNotShadow(findings, "fPackage", classD, 20, classA, 10); // true, but not helpful + assertShadow(findings, "fProtected", classD, 21, classD, 15); + assertShadow(findings, "fPublic", classD, 22, classD, 16); // D.foo() - assertShadow(findings, "fPrivate", classD, 26, classA, 13); - assertShadow(findings, "fPackage", classD, 27, classA, 14); - assertShadow(findings, "fProtected", classD, 28, classA, 15); - assertShadow(findings, "fPublic", classD, 29, classA, 16); + assertNotShadow(findings, "fPrivate", classD, 26, classA, 9); // true, but not helpful + assertNotShadow(findings, "fPackage", classD, 27, classA, 10); // true, but not helpful + assertShadow(findings, "fProtected", classD, 28, classD, 15); + assertShadow(findings, "fPublic", classD, 29, classD, 16); // D.bar() - assertShadow(findings, "fPrivate", classD, 32, classA, 13); - assertShadow(findings, "fPackage", classD, 33, classA, 14); - assertShadow(findings, "fProtected", classD, 34, classA, 15); - assertShadow(findings, "fPublic", classD, 35, classA, 16); + assertNotShadow(findings, "fPrivate", classD, 32, classA, 9); // true, but not helpful + assertNotShadow(findings, "fPackage", classD, 33, classA, 10); // true, but not helpful + assertShadow(findings, "fProtected", classD, 34, classD, 15); + assertShadow(findings, "fPublic", classD, 35, classD, 16); // within class E // E.E() diff --git a/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java b/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java index 32936e3..f54ba0f 100644 --- a/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java +++ b/scope4j/src/test/java/org/extendj/ScopeAnalysisTest.java @@ -23,22 +23,13 @@ public abstract class ScopeAnalysisTest { Assertions.fail(failMessage.get()); } - static void assertShadow(Set<AbstractFinding> findings, String name, int shadowerLine, int shadowedLine) { - assertShadow(findings, - (shadower, shadowed) -> - shadowed.getName().equals(name) && - shadowed.lineNumber() == shadowedLine && - shadower.lineNumber() == shadowerLine, - () -> "No shadow finding found for name '" + name + "' in lines " + shadowerLine + " > " + shadowedLine); - } - static void assertShadow(Set<AbstractFinding> findings, String name, String shadowerSourceFile, int shadowerLine, String shadowedSourceFile, int shadowedLine) { assertShadow(findings, (shadower, shadowed) -> shadowed.getName().equals(name) && - shadowed.sourceFile().equals(shadowedSourceFile) && + shadowed.sourceFile().contains(shadowedSourceFile) && shadowed.lineNumber() == shadowedLine && - shadower.sourceFile().equals(shadowerSourceFile) && + shadower.sourceFile().contains(shadowerSourceFile) && shadower.lineNumber() == shadowerLine, () -> "No shadow finding found for name '" + name + "' in " +shadowerSourceFile + ":" + shadowerLine + " > " + shadowedSourceFile + ":" + shadowedLine); } @@ -55,18 +46,9 @@ public abstract class ScopeAnalysisTest { Assertions.fail("No multi-decl finding found for name '" + name + "' in line " + declLine); } - static void assertNotShadow(Set<AbstractFinding> findings, String name, int shadowerLine, int shadowedLine) { - try { - assertShadow(findings, name, shadowerLine, shadowedLine); - } catch (AssertionError e) { - return; - } - Assertions.fail("There should not be a shadow finding for name '" + name + "' in lines " + shadowerLine + " > " + shadowedLine); - } - static void assertNotShadow(Set<AbstractFinding> findings, String name, String shadowerSourceFile, int shadowerLine, String shadowedSourceFile, int shadowedLine) { try { - assertShadow(findings, name, shadowerLine, shadowedLine); + assertShadow(findings, name, shadowerSourceFile, shadowerLine, shadowedSourceFile, shadowedLine); } catch (AssertionError e) { return; } diff --git a/scope4j/src/test/java/org/extendj/SimpleScopeTest.java b/scope4j/src/test/java/org/extendj/SimpleScopeTest.java index 5c537c3..ae16c02 100644 --- a/scope4j/src/test/java/org/extendj/SimpleScopeTest.java +++ b/scope4j/src/test/java/org/extendj/SimpleScopeTest.java @@ -14,11 +14,11 @@ public class SimpleScopeTest extends ScopeAnalysisTest { ScopeAnalysis scopeAnalysis = new ScopeAnalysis(); Set<AbstractFinding> findings = scopeAnalysis.analyze("src/test/resources/simple", true, false); - assertShadow(findings, "localVarA", 19, 11); - assertShadow(findings, "localVarB", 33, 12); - assertShadow(findings, "localVarC", 24, 13); - assertShadow(findings, "fieldA", 29, 3); - assertShadow(findings, "fieldB", 36, 4); + assertShadow(findings, "localVarA", "ClassA", 19, "ClassA", 11); + assertShadow(findings, "localVarB", "ClassA", 33, "ClassA", 12); + assertShadow(findings, "localVarC", "ClassA", 24, "ClassA", 13); + assertShadow(findings, "fieldA", "ClassA", 29, "ClassA", 3); + assertShadow(findings, "fieldB", "ClassA", 36, "ClassA", 4); Assertions.assertEquals(5, findings.size()); } diff --git a/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java b/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java index db68014..6f01c7e 100644 --- a/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java +++ b/scope4j/src/test/java/org/extendj/SuperclassFieldsTest.java @@ -16,9 +16,9 @@ public class SuperclassFieldsTest extends ScopeAnalysisTest { Set<AbstractFinding> findings = scopeAnalysis.analyze("src/test/resources/superclassFields", false, false); - assertShadow(findings, "fieldC", 19, 3); - assertShadow(findings, "fieldB", 21, 2); - assertShadow(findings, "fieldB", 2, 4); + assertShadow(findings, "fieldC", "ClassB", 19, "ClassB", 3); + assertShadow(findings, "fieldB", "ClassB", 21, "ClassB", 2); + assertShadow(findings, "fieldB", "ClassB", 2, "ClassA", 4); Assertions.assertEquals(3, findings.size()); -- GitLab