Merge branch 'pr/3658' into 7.0.x

This commit is contained in:
Clément Fournier committed 2021-12-31 16:10:01 +01:00
commit 4bc9df12be
6 files changed
+100 -40

No files matched your search

+2 -2
View File
@@ -190,8 +190,8 @@
<rule ref="category/java/errorprone.xml/AvoidUsingOctalValues"/>
<!-- <rule ref="category/java/errorprone.xml/BeanMembersShouldSerialize"/> -->
<rule ref="category/java/errorprone.xml/BrokenNullCheck"/>
<!-- <rule ref="category/java/errorprone.xml/CallSuperFirst"/> -->
<!-- <rule ref="category/java/errorprone.xml/CallSuperLast"/> -->
<rule ref="category/java/errorprone.xml/CallSuperFirst"/>
<rule ref="category/java/errorprone.xml/CallSuperLast"/>
<rule ref="category/java/errorprone.xml/CheckSkipResult"/>
<rule ref="category/java/errorprone.xml/ClassCastExceptionWithToArray"/>
<rule ref="category/java/errorprone.xml/CloneMethodMustBePublic"/>
@@ -702,29 +702,27 @@ public String bar(String string) {
<property name="xpath">
<value>
<![CDATA[
//MethodDeclaration[
@Name='onCreate' or
@Name='onConfigurationChanged' or
@Name='onPostCreate' or
@Name='onPostResume' or
@Name='onRestart' or
@Name='onRestoreInstanceState' or
@Name='onResume' or
@Name='onStart'
]
/Block[not(
(BlockStatement[1]/Statement/StatementExpression/PrimaryExpression[./PrimaryPrefix[@SuperModifier= true()]]/PrimarySuffix[@Image= ancestor::MethodDeclaration/@Name]))]
[ancestor::ClassOrInterfaceDeclaration[ExtendsList/ClassOrInterfaceType[
pmd-java:typeIs('android.app.Activity') or
pmd-java:typeIs('android.app.Application') or
pmd-java:typeIs('android.app.Service')
]]]
//ClassOrInterfaceDeclaration
[
pmd-java:typeIs('android.app.Activity') or
pmd-java:typeIs('android.app.Application') or
pmd-java:typeIs('android.app.Service')
]
//MethodDeclaration
[
@Name=('onCreate', 'onConfigurationChanged', 'onPostCreate', 'onPostResume', 'onRestart',
'onRestoreInstanceState', 'onResume', 'onStart')
]
[not(Block/*[1]/MethodCall[SuperExpression][@MethodName = ancestor::MethodDeclaration/@Name])]
]]>
</value>
</property>
</properties>
<example>
<![CDATA[
import android.app.Activity;
import android.os.Bundle;
public class DummyActivity extends Activity {
public void onCreate(Bundle bundle) {
// missing call to super.onCreate(bundle)
@@ -749,27 +747,25 @@ Super should be called at the end of the method
<property name="xpath">
<value>
<![CDATA[
//MethodDeclaration[
@Name='finish' or
@Name='onDestroy' or
@Name='onPause' or
@Name='onSaveInstanceState' or
@Name='onStop' or
@Name='onTerminate'
]
/Block/BlockStatement[last()]
[not(Statement/StatementExpression/PrimaryExpression[./PrimaryPrefix[@SuperModifier= true()]]/PrimarySuffix[@Image= ancestor::MethodDeclaration/@Name])]
[ancestor::ClassOrInterfaceDeclaration[ExtendsList/ClassOrInterfaceType[
pmd-java:typeIs('android.app.Activity') or
pmd-java:typeIs('android.app.Application') or
pmd-java:typeIs('android.app.Service')
]]]
//ClassOrInterfaceDeclaration
[
pmd-java:typeIs('android.app.Activity') or
pmd-java:typeIs('android.app.Application') or
pmd-java:typeIs('android.app.Service')
]
//MethodDeclaration
[
@Name=('finish', 'onDestroy', 'onPause', 'onSaveInstanceState', 'onStop', 'onTerminate')
]
[not(Block/*[last()]/MethodCall[SuperExpression][@MethodName = ancestor::MethodDeclaration/@Name])]
]]>
</value>
</property>
</properties>
<example>
<![CDATA[
import android.app.Activity;
public class DummyActivity extends Activity {
public void onPause() {
foo();
@@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.errorprone;
import net.sourceforge.pmd.testframework.PmdRuleTst;
@org.junit.Ignore("Rule has not been updated yet")
public class CallSuperFirstTest extends PmdRuleTst {
// no additional unit tests
}
@@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.java.rule.errorprone;
import net.sourceforge.pmd.testframework.PmdRuleTst;
@org.junit.Ignore("Rule has not been updated yet")
public class CallSuperLastTest extends PmdRuleTst {
// no additional unit tests
}
@@ -8,12 +8,17 @@
<description>Success</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
@Override
protected void onCreate(final Bundle state) {
super.onCreate(state);
foo();
}
private void foo() { }
}
]]></code>
</test-code>
@@ -22,6 +27,9 @@ public class MyActivity extends Activity {
<description>Success</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
@Override
protected void onCreate(final Bundle state) {
@@ -38,19 +46,44 @@ public class MyActivity extends Activity {
super.onStart();
foo();
}
private void foo() {}
}
]]></code>
</test-code>
<test-code>
<description>Failure</description>
<description>Failure - missing super</description>
<expected-problems>1</expected-problems>
<expected-linenumbers>6</expected-linenumbers>
<code><![CDATA[
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
@Override
protected void onCreate(final Bundle state) {
foo();
}
private void foo() {}
}
]]></code>
</test-code>
<test-code>
<description>Failure - super not as first</description>
<expected-problems>1</expected-problems>
<expected-linenumbers>6</expected-linenumbers>
<code><![CDATA[
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
@Override
protected void onCreate(final Bundle state) {
foo();
super.onCreate(state);
}
private void foo() {}
}
]]></code>
</test-code>
@@ -59,11 +92,15 @@ public class MyActivity extends Activity {
<description>#1154 Call super onPause when there is no super</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import android.app.Activity;
public class NotAnActivity {
Activity a = myActivity;
Activity a = getActivity();
protected void onResume() {
doSomething();
}
private Activity getActivity() { return null; }
private void doSomething() {}
}
]]></code>
</test-code>
@@ -8,25 +8,50 @@
<description>Success</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import android.app.Activity;
public class MyActivity extends Activity {
@Override
protected void onPause() {
foo();
super.onPause();
}
private void foo() {}
}
]]></code>
</test-code>
<test-code>
<description>Failure</description>
<description>Failure - missing super</description>
<expected-problems>1</expected-problems>
<expected-linenumbers>5</expected-linenumbers>
<code><![CDATA[
import android.app.Activity;
public class MyActivity extends Activity {
@Override
protected void onPause() {
foo();
}
private void foo() {}
}
]]></code>
</test-code>
<test-code>
<description>Failure - super not as last</description>
<expected-problems>1</expected-problems>
<expected-linenumbers>5</expected-linenumbers>
<code><![CDATA[
import android.app.Activity;
public class MyActivity extends Activity {
@Override
protected void onPause() {
super.onPause();
foo();
}
private void foo() {}
}
]]></code>
</test-code>
@@ -35,11 +60,15 @@ public class MyActivity extends Activity {
<description>#1154 Call super onPause when there is no super</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import android.app.Activity;
public class NotAnActivity {
Activity a = myActivity;
Activity a = getActivity();
protected void onPause() {
doSomething();
}
private Activity getActivity() { return null; }
private void doSomething() {}
}
]]></code>
</test-code>