-
Notifications
You must be signed in to change notification settings - Fork 51
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#1224 Проверяет отсутствие кода после асинхронного вызова #1234
Conversation
dd5e714
to
4249441
Compare
4249441
to
642868e
Compare
…code-after-async-call
…code-after-async-call
bundles/com.e1c.v8codestyle.bsl/markdown/ru/code-after-async-call.md
Outdated
Show resolved
Hide resolved
|
||
// @formatter:off | ||
private static final String[] ASYNCHRONOUS_METHODS = { | ||
"ShowMessageBox", "ПоказатьПредупреждение", //$NON-NLS-1$ //$NON-NLS-2$ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я тут совсем не уверен, но как-то из наших платформенных артефактов этот список программно нельзя получать? Появятся новые асинхронные метода в платформе, мы их забудем сюда добавить.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вроде нет
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно по контексту платформы собрать все методы у которых есть ОписаниеОповещения, или которые заканчиваются на Async - вынести это в отдельный Кэш-провайдер который по-требованию будут собирать из контекста по версии проверка и кэшировать на время вызова.
Не следует так же забывать про существование асинхронных методов у объектов платформы.
interface AsyncInvocationProvider
{
// Методы глобального контекста
Collection<String> getAsyncInvocationNames(Version version);
// Методы со списком типов в которых они используются
Map<String, Collection<String>> getAsyncTypeMethodNames(Version version);
}
Согласен с @AlmazNasibullin что асинхронные методы появляются в каждой новой версии платформы.
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
} | ||
} | ||
|
||
private Statement getStatementFromInvoc(Invocation invocation) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно вместо этого метода использовать метод EcoreUtil2.getContainerOfType(EObject, Class<T>)
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да, только в данном случае получается что неизвестно какой там тип будет
tests/com.e1c.v8codestyle.bsl.itests/resources/async-call-back-descr.bsl
Show resolved
Hide resolved
tests/com.e1c.v8codestyle.bsl.itests/resources/code-after-async-call-existence.bsl
Outdated
Show resolved
Hide resolved
Kudos, SonarCloud Quality Gate passed! |
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
|
||
// @formatter:off | ||
private static final String[] ASYNCHRONOUS_METHODS = { | ||
"ShowMessageBox", "ПоказатьПредупреждение", //$NON-NLS-1$ //$NON-NLS-2$ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно по контексту платформы собрать все методы у которых есть ОписаниеОповещения, или которые заканчиваются на Async - вынести это в отдельный Кэш-провайдер который по-требованию будут собирать из контекста по версии проверка и кэшировать на время вызова.
Не следует так же забывать про существование асинхронных методов у объектов платформы.
interface AsyncInvocationProvider
{
// Методы глобального контекста
Collection<String> getAsyncInvocationNames(Version version);
// Методы со списком типов в которых они используются
Map<String, Collection<String>> getAsyncTypeMethodNames(Version version);
}
Согласен с @AlmazNasibullin что асинхронные методы появляются в каждой новой версии платформы.
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/IAsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
feature/issue-1224-code-after-async-call
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/IAsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/IAsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
for (Expression param : inv.getParams()) | ||
{ | ||
List<TypeItem> sourceTypes = computeTypes(param); | ||
for (TypeItem typeItem : sourceTypes) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Подозрительный код.
Зачем на вычислять типы значений передаваемых в параметр, если можно взять сразу тип параметра из контекста платформы? Если код нетипизированный в части передаваемых параметров - то тут не сработает, но как бы ожидалось что сработает...
Может быть ситуация что в параметр передали "неопределено" - тогда параметр указан, но "описание оповещения" отсутствует.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Здесь проверяется условие соответствия опции, что в параметр фактически передан ОписаниеОповвещения, если тип отличный, не задан парамер или задан Неопределено - то под условие опции не попадает.
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/CodeAfterAsyncCallCheck.java
Outdated
Show resolved
Hide resolved
tests/com.e1c.v8codestyle.bsl.itests/resources/async-call-promise.bsl
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
...es/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/internal/bsl/AsyncInvocationProvider.java
Outdated
Show resolved
Hide resolved
feature/issue-1224-code-after-async-call
Kudos, SonarCloud Quality Gate passed! |
Что сделано
Методы глобального контекста
Методы различных объектов
Чек-лист
Общее:
master
и нет конфликтовЕсли применимо:
Закрываемые задачи
Closes #1224