Skip to content

Issue #13672: Kill mutation for ImportControlLoader#13759

Merged
romani merged 1 commit intocheckstyle:masterfrom
Kevin222004:ImportControlLoader
Sep 28, 2023
Merged

Issue #13672: Kill mutation for ImportControlLoader#13759
romani merged 1 commit intocheckstyle:masterfrom
Kevin222004:ImportControlLoader

Conversation

@Kevin222004
Copy link
Copy Markdown
Contributor

Issue #13672: Kill mutation for ImportControlLoader


Mutation

<mutation unstable="false">
<sourceFile>ImportControlLoader.java</sourceFile>
<mutatedClass>com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader</mutatedClass>
<mutatedMethod>load</mutatedMethod>
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
<description>removed call to java/lang/Exception::getMessage</description>
<lineContent>+ &quot; - &quot; + ex.getMessage(), ex);</lineContent>
</mutation>
<mutation unstable="false">
<sourceFile>ImportControlLoader.java</sourceFile>
<mutatedClass>com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader</mutatedClass>
<mutatedMethod>startElement</mutatedMethod>
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
<description>removed call to com/puppycrawl/tools/checkstyle/checks/imports/ImportControlLoader::containsRegexAttribute</description>
<lineContent>final boolean regex = containsRegexAttribute(attributes);</lineContent>
</mutation>


Explaination

Test

@romani
Copy link
Copy Markdown
Member

romani commented Sep 21, 2023

Pitest failure , looks like more old survivals to remove from config is required.

Copy link
Copy Markdown
Member

@romani romani left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Items:

catch (ParserConfigurationException | SAXException ex) {
throw new CheckstyleException("unable to parse " + uri
+ " - " + ex.getMessage(), ex);
+ " - " + ex, ex);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please share cli output (before and after update) to reproduce this exception.

https://github.com/openjdk-mirror/jdk7u-jdk/blob/f4d80957e89a19a29bb9f9807d2a28351ed7f7df/src/share/classes/java/lang/Throwable.java#L477

This will print name of exception in addition to message.

We should have Junit test to check message on parser error.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Kevin222004 , ping. Share a reason why there is delay/problem with fix.

Copy link
Copy Markdown
Contributor Author

@Kevin222004 Kevin222004 Sep 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, I also see no point to remove the code after seeing difference becuase the message we are getting after updating code is already in stack after this cause(). I am creating an input-based test to cover this.

so the difference between this change and in current jar is

updated code jar

Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: unable to parse file:/home/kevin/Desktop/check_style/ImportControlMain/ImportControl.xml - org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 55; Document root element "import-control", must match DOCTYPE root "null".

current checkstyle version jar

Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: unable to parse file:/home/kevin/Desktop/check_style/ImportControlMain/ImportControl.xml - Document root element "import-control", must match DOCTYPE root "null".

code + config

kevin@kevin-Inspiron-15-5510:~/Desktop/check_style/ImportControlMain$ cat Test.java 
import java.util.stream.Stream; 
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Test {}

kevin@kevin-Inspiron-15-5510:~/Desktop/check_style/ImportControlMain$ cat config.xml 
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">

<module name="Checker">
    <module name="TreeWalker">
        <module name="ImportControl">
            <property name="file" value="ImportControl.xml"/>
            <property name="path" value="Test.java"/>
        </module> 
    </module>
</module>

kevin@kevin-Inspiron-15-5510:~/Desktop/check_style/ImportControlMain$ cat ImportControl.xml 
<import-control pkg=".*" strategyOnMismatch="allowed">
  <disallow class="java.awt.Image"/>
  <disallow class="java.io.File"/>
</import-control>

Cli with current version

kevin@kevin-Inspiron-15-5510:~/Desktop/check_style/ImportControlMain$ java -jar /home/kevin/Downloads/checkstyle-10.12.3-all.jar -c config.xml Test.java
com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module TreeWalker - cannot initialize module ImportControl - Cannot set property 'file' to 'ImportControl.xml'
        at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:483)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.configure(AbstractAutomaticBean.java:207)
        at com.puppycrawl.tools.checkstyle.Main.runCheckstyle(Main.java:411)
        at com.puppycrawl.tools.checkstyle.Main.runCli(Main.java:338)
        at com.puppycrawl.tools.checkstyle.Main.execute(Main.java:195)
        at com.puppycrawl.tools.checkstyle.Main.main(Main.java:130)
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module ImportControl - Cannot set property 'file' to 'ImportControl.xml'
        at com.puppycrawl.tools.checkstyle.TreeWalker.setupChild(TreeWalker.java:128)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.configure(AbstractAutomaticBean.java:207)
        at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:478)
        ... 5 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Cannot set property 'file' to 'ImportControl.xml'
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.tryCopyProperty(AbstractAutomaticBean.java:247)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.configure(AbstractAutomaticBean.java:200)
        at com.puppycrawl.tools.checkstyle.TreeWalker.setupChild(TreeWalker.java:123)
        ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2128)
        at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2109)
        at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:437)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.tryCopyProperty(AbstractAutomaticBean.java:237)
        ... 9 more
Caused by: java.lang.IllegalArgumentException: Unable to load file:/home/kevin/Desktop/check_style/ImportControlMain/ImportControl.xml
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlCheck.setFile(ImportControlCheck.java:306)
        ... 17 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: unable to parse file:/home/kevin/Desktop/check_style/ImportControlMain/ImportControl.xml - Document root element "import-control", must match DOCTYPE root "null".
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.load(ImportControlLoader.java:275)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.loadUri(ImportControlLoader.java:292)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.load(ImportControlLoader.java:255)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlCheck.setFile(ImportControlCheck.java:302)
        ... 17 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 55; Document root element "import-control", must match DOCTYPE root "null".
        at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
        at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1539)
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1806)
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:728)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1407)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1292)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3079)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:836)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
        at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637)
        at com.puppycrawl.tools.checkstyle.XmlLoader.parseInputSource(XmlLoader.java:81)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.load(ImportControlLoader.java:270)
        ... 20 more
Checkstyle ends with 1 errors.
kevin@kevin-Inspiron-15-5510:~/Desktop/check_style/ImportControlMain$ 

See 2nd cause by from bottom

CLI with updated code

kevin@kevin-Inspiron-15-5510:~/Desktop/check_style/ImportControlMain$ java -jar /home/kevin/Desktop/check_style/checkstyle/checkstyle/target/checkstyle-10.12.4-SNAPSHOT-all.jar -c config.xml Test.java
com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module TreeWalker - cannot initialize module ImportControl - Cannot set property 'file' to 'ImportControl.xml'
        at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:483)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.configure(AbstractAutomaticBean.java:207)
        at com.puppycrawl.tools.checkstyle.Main.runCheckstyle(Main.java:411)
        at com.puppycrawl.tools.checkstyle.Main.runCli(Main.java:338)
        at com.puppycrawl.tools.checkstyle.Main.execute(Main.java:195)
        at com.puppycrawl.tools.checkstyle.Main.main(Main.java:130)
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: cannot initialize module ImportControl - Cannot set property 'file' to 'ImportControl.xml'
        at com.puppycrawl.tools.checkstyle.TreeWalker.setupChild(TreeWalker.java:128)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.configure(AbstractAutomaticBean.java:207)
        at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:478)
        ... 5 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Cannot set property 'file' to 'ImportControl.xml'
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.tryCopyProperty(AbstractAutomaticBean.java:247)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.configure(AbstractAutomaticBean.java:200)
        at com.puppycrawl.tools.checkstyle.TreeWalker.setupChild(TreeWalker.java:123)
        ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2128)
        at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2109)
        at org.apache.commons.beanutils.BeanUtilsBean.copyProperty(BeanUtilsBean.java:437)
        at com.puppycrawl.tools.checkstyle.AbstractAutomaticBean.tryCopyProperty(AbstractAutomaticBean.java:237)
        ... 9 more
Caused by: java.lang.IllegalArgumentException: Unable to load file:/home/kevin/Desktop/check_style/ImportControlMain/ImportControl.xml
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlCheck.setFile(ImportControlCheck.java:306)
        ... 17 more
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: unable to parse file:/home/kevin/Desktop/check_style/ImportControlMain/ImportControl.xml - org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 55; Document root element "import-control", must match DOCTYPE root "null".
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.load(ImportControlLoader.java:274)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.loadUri(ImportControlLoader.java:292)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.load(ImportControlLoader.java:255)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlCheck.setFile(ImportControlCheck.java:302)
        ... 17 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 55; Document root element "import-control", must match DOCTYPE root "null".
        at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
        at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1539)
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1806)
        at java.xml/com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:728)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1407)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1292)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3079)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:836)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
        at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637)
        at com.puppycrawl.tools.checkstyle.XmlLoader.parseInputSource(XmlLoader.java:81)
        at com.puppycrawl.tools.checkstyle.checks.imports.ImportControlLoader.load(ImportControlLoader.java:270)
        ... 20 more
Checkstyle ends with 1 errors.

@romani romani self-assigned this Sep 27, 2023
@romani
Copy link
Copy Markdown
Member

romani commented Sep 28, 2023

Copy link
Copy Markdown
Member

@romani romani left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

item

});

assertThat(ex.getCause().getCause().getCause().getCause().getCause().getMessage())
.isEqualTo("unable to parse file:" + filePathOfImportControlXml
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in Windows message duet path is different, like unable to parse file:C:\projects\checkstyle\
to avoid this problem you need to split messages validation in two statements
.startsWith("unable to parse file:") and .endsWith(" - Documen root ........")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@romani romani merged commit ee804d0 into checkstyle:master Sep 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants