Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Initiate concrete execution if a wrapper method is missing#392

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
dtim merged 1 commit intomainfromdtim/missing-method-concrete-execution
Jul 4, 2022

Conversation

@dtim
Copy link
Collaborator

@dtimdtim commentedJul 4, 2022

Description

If a JVM class is overridden but a method is missing from the wrapper,
the engine will discard the path and fall back to concrete execution
instead of analysing the real JVM code graph.

This approach fixes the problem with methods that have been introduced
in newer JDKs. Now wrappers are mostly limited to Java 1.8 interfaces
and fail to analyze methods likeString::isBlank orString::lines
when the code runs under JDK 11. Building graphs from the real JDK code
fails because the wrapper does not have private fields that the original
code uses.

TODO: to allow symbolic analysis of the code, missing methods should be
actually implemented in corresponding wrappers.

Fixes#375

Type of Change

  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

How Has This Been Tested?

Existing unit tests did not break on JDK 1.8.

Tests involving JDK 11String methods missing fromUtString wrapper are correctly generated by the plugin (debug IDE).

Automated Testing

No new automated tests have been added: we use JDK 1.8 to run unit tests.

Manual Scenario

Sample code:

import org.jetbrains.annotations.NotNull;public class NewMethods {    public long countLines(@NotNull String text) {        return text.lines().count();    }    public String firstLine(@NotNull String text) {        return text.lines().findFirst().orElse(null);    }    public boolean checkBlank(@NotNull String text) {        return text.strip().isBlank();    }}

Tests for all these methods should be generated.

Checklist:

  • The change followed the style guidelines of the UTBot project
  • Self-review of the code is passed
  • The change contains enough commentaries, particularly in hard-to-understand areas
  • No new warnings
  • Tests that prove my change is effective (manual tests only).
  • All tests pass locally with my changes

If a JVM class is overridden but a method is missing from the wrapper,the engine will discard the path and fall back to concrete executioninstead of analysing the real JVM code graph.This approach fixes the problem with methods that have been introducedin newer JDKs. Now wrappers are mostly limited to Java 1.8 interfacesand fail to analyze methods like `String::isBlank` or `String::lines`when the code runs under JDK 11. Building graphs from the real JDK codefails because the wrapper does not have private fields that the originalcode uses.TODO: to allow symbolic analysis of the code, missing methods should beactually implemented in corresponding wrappers.
@dtimdtim requested a review fromCaelmBleiddJuly 4, 2022 14:01
Copy link
Member

@CaelmBleiddCaelmBleidd left a comment

Choose a reason for hiding this comment

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

LGTM

@dtimdtimenabled auto-merge (squash)July 4, 2022 14:11
@dtimdtim merged commit16c13fb intomainJul 4, 2022
@dtimdtim deleted the dtim/missing-method-concrete-execution branchJuly 4, 2022 15:35
rudolf101 added a commit that referenced this pull requestJul 8, 2022
commit31fbc83Author: Andrey Tarbeev <dinis.taranov@mail.ru>Date:   Fri Jul 8 10:50:52 2022 +0300    Minimize exceptions in signature (#418)    * Minimize exceptions in test methods signaturescommit63eb9b0Author: Yury Kamenev <yurkam447@gmail.com>Date:   Thu Jul 7 15:13:45 2022 +0300    Removed always used coverage-based minimization strategy (#450)commitfe0f7f8Author: Yury Kamenev <yurkam447@gmail.com>Date:   Thu Jul 7 14:19:53 2022 +0300    Disabled NPE checks for non-public library fields by default (#353)commitd1b51feAuthor: Yury Kamenev <yurkam447@gmail.com>Date:   Thu Jul 7 13:44:46 2022 +0300    Fixed NPE for processing static field as first statement in MUT (#433)commitacc2fffAuthor: Nikita Vlaev <nikitavlaev00@gmail.com>Date:   Wed Jul 6 15:37:28 2022 +0300    Added ForceStaticMockListener to run "configure mockito-inline" action.    Refactored url listener in notifications.commit80c2328Author: Nikita Stroganov <54814796+IdeaSeeker@users.noreply.github.com>Date:   Thu Jul 7 11:21:13 2022 +0300    Support -P parameters in the utbot-gradle (#377)commita92e289Author: Sergey Pospelov <sergeypospelov59@gmail.com>Date:   Tue Jul 5 10:29:45 2022 +0300    Fix searching of modifiers field for JDK 8-17commit9a3acb6Author: Amandel Pie <105506115+amandelpie@users.noreply.github.com>Date:   Wed Jul 6 14:16:09 2022 +0300    Disabled clustering of tests generated by Fuzzer (#431)    * Disabled clustering of tests generated by Fuzzer    * Refactored the multiple callscommitc09568fAuthor: Vassiliy Kudryashov <vassiliy.kudryashov@gmail.com>Date:   Wed Jul 6 10:21:52 2022 +0300    Existing test file without test class obstruct generation#160 (#425)commit2ec8fb3Author: Denis Fokin <Denis.Fokin@gmail.com>Date:   Tue Jul 5 16:52:42 2022 +0300    Better namingcommit68c66efAuthor: Vassiliy Kudryashov <vassiliy.kudryashov@gmail.com>Date:   Tue Jul 5 19:51:55 2022 +0300    SVG logo contains 'inaccurate' holes#330 (#411)commit1d48789Author: Dmitrii Timofeev <dtim@comitative.com>Date:   Tue Jul 5 17:08:38 2022 +0300    Workaround: run concrete execution for invokedynamiccommit65d95c1Author: Vassiliy Kudryashov <vassiliy.kudryashov@gmail.com>Date:   Tue Jul 5 19:42:55 2022 +0300    Plugin fails with an exception if no SDK is configured for the test module#399 (#424)commit6f9f2d8Author: Maksim Pelevin <maks.pelevin@gmail.com>Date:   Tue Jul 5 17:49:58 2022 +0300    Fix CNFE: kotlin.collections.ArrayDeque in ContestEstimator (#419)commit67cc7d9Author: Denis Fokin <Denis.Fokin@gmail.com>Date:   Tue Jul 5 11:58:40 2022 +0300    Put concrete executor jar in resources for contest estimatorcommit63e2252Author: Alena Lisevych <37301492+alisevych@users.noreply.github.com>Date:   Tue Jul 5 15:48:29 2022 +0300    Tooltips correction for#343 (#410)    Co-authored-by: Alena Lisevych <>commit8b3defaAuthor: Vassiliy Kudryashov <vassiliy.kudryashov@gmail.com>Date:   Tue Jul 5 13:22:31 2022 +0300    Write access exception on test generating in Idea project with JDK 11#350 (#409)commitc02883cAuthor: Amandel Pie <105506115+amandelpie@users.noreply.github.com>Date:   Tue Jul 5 11:21:21 2022 +0300    Enables 40 tests for utbot-summary module (#389)    * Repair testPow    * Repaired ReturnExampleTest tests    * Restored SummaryCycleTest.kt    * Restored all the testscommit65c07f8Author: Victoria <32179813+victoriafomina@users.noreply.github.com>Date:   Tue Jul 5 09:51:44 2022 +0300    Update Dockerfile_java_cli (#396)commit3b21112Author: Alexey Menshutin <alex.menshutin99@gmail.com>Date:   Mon Jul 4 21:16:53 2022 +0300    ToString support for abstract collection using makeSymbolic#391commitc2673dfAuthor: Vassiliy Kudryashov <vassiliy.kudryashov@gmail.com>Date:   Mon Jul 4 21:56:43 2022 +0300    IDE fatal error during tests generation#68 (#379)commit43693fbAuthor: Nikita Vlaev <vlaev.nikita@huawei.com>Date:   Mon Jul 4 18:59:57 2022 +0300    Bring back test class generation (#403)commit1c01193Author: Yury Kamenev <yurkam447@gmail.com>Date:   Mon Jul 4 20:24:03 2022 +0300    Added the wrapper for static methods of java.util.List (#400)commita805f31Author: Nikita Vlaev <vlaev.nikita@huawei.com>Date:   Fri Jul 1 20:16:28 2022 +0300    Add title pane with unsupported jdk notification (#373)commit16c13fbAuthor: Dmitrii Timofeev <dtim@comitative.com>Date:   Mon Jul 4 18:35:36 2022 +0300    Initiate concrete execution if a wrapper method is missing (#392)    If a JVM class is overridden but a method is missing from the wrapper,    the engine will discard the path and fall back to concrete execution    instead of analysing the real JVM code graph.    This approach fixes the problem with methods that have been introduced    in newer JDKs. Now wrappers are mostly limited to Java 1.8 interfaces    and fail to analyze methods like `String::isBlank` or `String::lines`    when the code runs under JDK 11. Building graphs from the real JDK code    fails because the wrapper does not have private fields that the original    code uses.    TODO: to allow symbolic analysis of the code, missing methods should be    actually implemented in corresponding wrappers.
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@CaelmBleiddCaelmBleiddCaelmBleidd approved these changes

Assignees

No one assigned

Labels

None yet

Projects

Archived in project

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

String::indent method - CLI throws "No such field byte coder found in UtString"

3 participants

@dtim@CaelmBleidd

[8]ページ先頭

©2009-2025 Movatter.jp