diff --git a/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst b/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst index 63944d25d433..436269e0b5c7 100644 --- a/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst +++ b/docs/codeql/codeql-language-guides/basic-query-for-java-code.rst @@ -42,11 +42,15 @@ Running a quick query .. code-block:: ql - from MethodAccess ma + from MethodCall ma where ma.getMethod().hasName("equals") and ma.getArgument(0).(StringLiteral).getValue() = "" - select ma, "This comparison to empty string is inefficient, use isEmpty() instead." + from MethodCall mc + where + mc.getMethod().hasName("equals") and + mc.getArgument(0).(StringLiteral).getValue() = "" + select mc, "This comparison to empty string is inefficient, use isEmpty() instead." Note that CodeQL treats Java and Kotlin as part of the same language, so even though this query starts with ``import java``, it will work for both Java and Kotlin code. @@ -55,7 +59,7 @@ Running a quick query .. image:: ../images/codeql-for-visual-studio-code/basic-java-query-results-1.png :align: center -If any matching code is found, click a link in the ``ma`` column to view the ``.equals`` expression in the code viewer. +If any matching code is found, click a link in the ``mc`` column to view the ``.equals`` expression in the code viewer. .. image:: ../images/codeql-for-visual-studio-code/basic-java-query-results-2.png :align: center @@ -72,15 +76,15 @@ After the initial ``import`` statement, this simple query comprises three parts +==================================================================================================+===================================================================================================================+===================================================================================================+ | ``import java`` | Imports the standard CodeQL libraries for Java and Kotlin. | Every query begins with one or more ``import`` statements. | +--------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------+ -| ``from MethodAccess ma`` | Defines the variables for the query. | We use: | +| ``from MethodCall mc`` | Defines the variables for the query. | We use: | | | Declarations are of the form: | | -| | `` `` | - a ``MethodAccess`` variable for call expressions | +| | `` `` | - a ``MethodCall`` variable for call expressions | +--------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------+ -| ``where ma.getMethod().hasName("equals") and ma.getArgument(0).(StringLiteral).getValue() = ""`` | Defines a condition on the variables. | ``ma.getMethod().hasName("equals")`` restricts ``ma`` to only calls to methods call ``equals``. | +| ``where mc.getMethod().hasName("equals") and mc.getArgument(0).(StringLiteral).getValue() = ""`` | Defines a condition on the variables. | ``mc.getMethod().hasName("equals")`` restricts ``mc`` to only calls to methods call ``equals``. | | | | | -| | | ``ma.getArgument(0).(StringLiteral).getValue() = ""`` says the argument must be literal ``""``. | +| | | ``mc.getArgument(0).(StringLiteral).getValue() = ""`` says the argument must be literal ``""``. | +--------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------+ -| ``select ma, "This comparison to empty string is inefficient, use isEmpty() instead."`` | Defines what to report for each match. | Reports the resulting ``.equals`` expression with a string that explains the problem. | +| ``select mc, "This comparison to empty string is inefficient, use isEmpty() instead."`` | Defines what to report for each match. | Reports the resulting ``.equals`` expression with a string that explains the problem. | | | | | | | ``select`` statements for queries that are used to find instances of poor coding practice are always in the form: | | | | ``select , ""`` | | @@ -110,7 +114,7 @@ In this case, it is not possible to simply use ``o.isEmpty()`` instead, as ``o`` .. code-block:: ql - ma.getQualifier().getType() instanceof TypeString + mc.getQualifier().getType() instanceof TypeString The ``where`` clause is now: @@ -119,7 +123,9 @@ In this case, it is not possible to simply use ``o.isEmpty()`` instead, as ``o`` where ma.getQualifier().getType() instanceof TypeString and ma.getMethod().hasName("equals") and - ma.getArgument(0).(StringLiteral).getValue() = "" + mc.getQualifier().getType() instanceof TypeString and + mc.getMethod().hasName("equals") and + mc.getArgument(0).(StringLiteral).getValue() = "" #. Re-run the query. @@ -137,8 +143,6 @@ Further reading .. |language-code| replace:: ``java`` -.. |example-url| replace:: https://github.com/apache/activemq - .. |image-quick-query| image:: ../images/codeql-for-visual-studio-code/quick-query-tab-java.png -.. |result-col-1| replace:: The first column corresponds to the expression ``ma`` and is linked to the location in the source code of the project where ``ma`` occurs. \ No newline at end of file +.. |result-col-1| replace:: The first column corresponds to the expression ``mc`` and is linked to the location in the source code of the project where ``mc`` occurs.