diff options
author | Dinesh Bolkensteyn <dinesh@dinsoft.net> | 2011-10-25 23:34:25 +0200 |
---|---|---|
committer | Dinesh Bolkensteyn <dinesh@dinsoft.net> | 2011-10-25 23:34:48 +0200 |
commit | 95dfe333644a75628ac2e47b62470a0a789f622e (patch) | |
tree | 8b42756ef039c5ac8813fd41b1acba064817efea /plugins | |
parent | d5de5a55cb0d6959ae098c4cd6a38c55e3558c5b (diff) | |
download | sonarqube-95dfe333644a75628ac2e47b62470a0a789f622e.tar.gz sonarqube-95dfe333644a75628ac2e47b62470a0a789f622e.zip |
SONAR-2934 Transitive accessor computation now supports recursive methods
Diffstat (limited to 'plugins')
4 files changed, 54 insertions, 1 deletions
diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/bytecode/asm/AsmMethod.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/bytecode/asm/AsmMethod.java index 51e27b1d7ee..c37d54a9706 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/bytecode/asm/AsmMethod.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/bytecode/asm/AsmMethod.java @@ -142,8 +142,8 @@ public class AsmMethod extends AsmResource { private void ensureAccessorComputed() { if (accessFieldComputed) return; + accessFieldComputed = true; // Set accessFieldComputed to true before calling setAccessedField() to prevent infinite recursion on recursive methods. setAccessedField(); - accessFieldComputed = true; } private void setAccessedField() { diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/asm/AsmMethodTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/asm/AsmMethodTest.java index 631f0078b0a..6a2f4abb0a5 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/asm/AsmMethodTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/asm/AsmMethodTest.java @@ -73,6 +73,11 @@ public class AsmMethodTest { assertTrue(javaBean.getMethod("accessorWithABunchOfCalls()V").isAccessor()); assertFalse(javaBean.getMethod("iShouldBeAStaticSetter()V").isAccessor()); assertTrue(javaBean.getMethod("getFirstName()Ljava/lang/String;").isAccessor()); + assertTrue(javaBean.getMethod("getFirstNameAndOneArgument(Ljava/lang/String;)Ljava/lang/String;").isAccessor()); + assertTrue(javaBean.getMethod("recursiveAbs(I)I").isAccessor()); + assertFalse(javaBean.getMethod("recursiveAbsNotAccessor(I)I").isAccessor()); + assertTrue(javaBean.getMethod("recursiveAbsSameIncrementA(I)I").isAccessor()); + assertFalse(javaBean.getMethod("recursiveAbsDifferentIncrementA(I)I").isAccessor()); } @Test @@ -89,6 +94,9 @@ public class AsmMethodTest { assertThat(javaBean.getMethod("accessorWithABunchOfCalls()V").getAccessedField().getName(), is("firstNames")); assertNull(javaBean.getMethod("iShouldBeAStaticSetter()V").getAccessedField()); assertThat(javaBean.getMethod("getFirstName()Ljava/lang/String;").getAccessedField().getName(), is("FirstName")); + assertThat(javaBean.getMethod("getFirstNameAndOneArgument(Ljava/lang/String;)Ljava/lang/String;").getAccessedField().getName(), is("FirstName")); + assertThat(javaBean.getMethod("recursiveAbs(I)I").getAccessedField().getName(), is("myIncrement")); + assertNull(javaBean.getMethod("recursiveAbsNotAccessor(I)I").getAccessedField()); } } diff --git a/plugins/sonar-squid-java-plugin/test-resources/bytecode/bin/properties/JavaBean.class b/plugins/sonar-squid-java-plugin/test-resources/bytecode/bin/properties/JavaBean.class Binary files differindex 6c6d60868f0..1724b051e65 100644 --- a/plugins/sonar-squid-java-plugin/test-resources/bytecode/bin/properties/JavaBean.class +++ b/plugins/sonar-squid-java-plugin/test-resources/bytecode/bin/properties/JavaBean.class diff --git a/plugins/sonar-squid-java-plugin/test-resources/bytecode/src/properties/JavaBean.java b/plugins/sonar-squid-java-plugin/test-resources/bytecode/src/properties/JavaBean.java index 4750fde8e08..ca2374734ed 100644 --- a/plugins/sonar-squid-java-plugin/test-resources/bytecode/src/properties/JavaBean.java +++ b/plugins/sonar-squid-java-plugin/test-resources/bytecode/src/properties/JavaBean.java @@ -9,6 +9,8 @@ public class JavaBean { ArrayList<String> firstNames = new ArrayList<String>(); private static String staticMember; private String FirstName; + private int myIncrement = 1; + private int myDifferentIncrement = 2; public String getName() { return name; @@ -68,4 +70,47 @@ public class JavaBean { return FirstName; } + public String getFirstNameAndOneArgument(String argument) { + return FirstName + " " + argument; + } + + public int recursiveAbs(int value) { + if (value < 0) { + return recursiveAbs(value + myIncrement); + } else return value; + } + + public int recursiveAbsNotAccessor(int value) { + if (value < 0) { + return recursiveAbs(value + myIncrement); + } else { + iShouldBeAStaticSetter(); + return value; + } + } + + public int recursiveAbsSameIncrementA(int value) { + if (value < 0) { + return recursiveAbsSameIncrementB(value + myIncrement); + } else return value; + } + + public int recursiveAbsSameIncrementB(int value) { + if (value < 0) { + return recursiveAbsSameIncrementA(value + myIncrement); + } else return value; + } + + public int recursiveAbsDifferentIncrementA(int value) { + if (value < 0) { + return recursiveAbsDifferentIncrementB(value + myIncrement); + } else return value; + } + + public int recursiveAbsDifferentIncrementB(int value) { + if (value < 0) { + return recursiveAbsSameIncrementA(value + myDifferentIncrement); + } else return value; + } + } |