17.11.2020, 17:38 | #1 |
Участник
|
SysObsoleteAttribute для методов ядра
Привет всем.
Есть атрибут [SysObsoleteAttribute("@SYS343216", true)] Если его поставить у метода methodA, то не будут компилироваться вызывающие его методы. Т.е. запрещается использование methodA. А возможно как-то проставить этот атрибут для static kernel метода, чтобы запретить его использование программистом? Best practice проверку написали, но ее могут проигнорировать. Хочется больше жести. Только хардкор. Последний раз редактировалось Logger; 17.11.2020 в 17:46. |
|
18.11.2020, 02:56 | #2 |
Участник
|
Даже интерестно, что за страшный метод
|
|
18.11.2020, 09:37 | #3 |
Участник
|
А как людей заставляют вообще компилировать? Если есть ci, то туда, наверное, можно добавить любые проверки. Если нет ci то можно вообще не компилировать или ломать компилируемость существующего кода.
|
|
18.11.2020, 10:55 | #4 |
Участник
|
|
|
18.11.2020, 11:28 | #5 |
Участник
|
Классы коллекций (инициализация, сериализация): List, Set, Map.
Кривой Json на входе валит АОС. Неприятно. BP проверку написали. X++: // pkoz, 21.05.2018 // JEV003427 "Устранение блокировок. Вычистка некорректного кода", PKoz 10.04.2019 // JEV004482 "АХ2012 - Тестирование_Расчеты с клиентами - Договоры_JEV003679", PKoz 01.03.2020 /* This method checks the source text for Mercury rules */ protected boolean checkSource_MRC() { xRefTmpReferences thisRefererences; DictTable dictTable; boolean ret = true; ; if (sysBPCheck && sysBPCheck.mustCheckTreeNodeCurLayer_MRC()) // только для кода, написанного на usr слое { // check if things are used, that mustn't be used directly this.initTmpxRefReferences(); thisRefererences.setTmpData(tmpxRefReferences); while select thisRefererences where thisRefererences.Kind == xRefKind::ClassStaticMethod && thisRefererences.name == staticMethodStr(Global, str2con) && thisRefererences.ParentName == classstr(Global) && thisRefererences.Reference == XRefReference::Call { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt("Метод %1%2%3 нужно заменить на Global::%4", // "@SYS55400", thisRefererences.ParentName, (thisRefererences.Kind == xRefKind::ClassInstanceMethod || thisRefererences.Kind == xRefKind::TableInstanceMethod || thisRefererences.Kind == xRefKind::MapInstanceMethod) ? '.' : '::', thisRefererences.Name, staticMethodStr(Global, str2con_ru) )); } while select thisRefererences where thisRefererences.Kind == xRefKind::ClassInstanceMethod && thisRefererences.name == MethodStr(DialogBox, new) && thisRefererences.ParentName == classstr(DialogBox) && thisRefererences.Reference == XRefReference::Call { if (!strStartsWith(thisRefererences.Path, '\\Classes\\Box\\')) // чтобы не ругалась на сам класс Box { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt("Метод %1%2%3 нужно заменить на вызов соответствующего метода класса %4", // "@SYS55400", thisRefererences.ParentName, (thisRefererences.Kind == xRefKind::ClassInstanceMethod || thisRefererences.Kind == xRefKind::TableInstanceMethod || thisRefererences.Kind == xRefKind::MapInstanceMethod) ? '.' : '::', thisRefererences.Name, ClassStr(Box) )); } } // JEV004482 "АХ2012 - Тестирование_Расчеты с клиентами - Договоры_JEV003679", PKoz 01.03.2020 --> while select thisRefererences where thisRefererences.Kind == xRefKind::TableField && thisRefererences.name == "RelationType" && thisRefererences.Reference == XRefReference::Read { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt(@"Обращение к полю RelationType нужно заменить на вызов SysDictTable::getConcreteTable(). См. https://dax.axforum.info/forums/showpost.php?p=412653&postcount=11" )); } while select thisRefererences where thisRefererences.Kind == xRefKind::TableField && thisRefererences.name == "TableId" && thisRefererences.Reference == XRefReference::Read { if (thisRefererences.ParentName == "Common" || (thisRefererences.ParentName && tableName2id(thisRefererences.ParentName) ) ) { dictTable = new DictTable(tableName2id(thisRefererences.ParentName)); if (dictTable && dictTable.supportInheritance()) { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt(@"Обращение к полю TableId для таблиц поддерживающих наследование, нужно заменить на вызов SysDictTable::getConcreteTable(). См. https://dax.axforum.info/forums/showpost.php?p=412653&postcount=11" )); } } } // JEV004482 "АХ2012 - Тестирование_Расчеты с клиентами - Договоры_JEV003679", PKoz 01.03.2020 <-- // JEV005646 "Улучшить стабильность работы тестовой аксапты.", PKoz 16.11.2020 --> while select thisRefererences where thisRefererences.Kind == xRefKind::ClassStaticMethod && thisRefererences.name == staticMethodStr(Map, create) && thisRefererences.ParentName == classstr(Map) && thisRefererences.Reference == XRefReference::Call { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt(@"Метод %1%2%3 нужно заменить на Collections_MRC::createMap или Collections_MRC::createMap4Json. См. http://axforum.info/forums/showthread.php?t=27738", thisRefererences.ParentName, (thisRefererences.Kind == xRefKind::ClassInstanceMethod || thisRefererences.Kind == xRefKind::TableInstanceMethod || thisRefererences.Kind == xRefKind::MapInstanceMethod) ? '.' : '::', thisRefererences.Name )); } while select thisRefererences where thisRefererences.Kind == xRefKind::ClassStaticMethod && thisRefererences.name == staticMethodStr(List, create) && thisRefererences.ParentName == classstr(List) && thisRefererences.Reference == XRefReference::Call { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt(@"Метод %1%2%3 нужно заменить на Collections_MRC::createList или Collections_MRC::createList4Json. См. http://axforum.info/forums/showthread.php?t=27738", thisRefererences.ParentName, (thisRefererences.Kind == xRefKind::ClassInstanceMethod || thisRefererences.Kind == xRefKind::TableInstanceMethod || thisRefererences.Kind == xRefKind::MapInstanceMethod) ? '.' : '::', thisRefererences.Name )); } while select thisRefererences where thisRefererences.Kind == xRefKind::ClassStaticMethod && thisRefererences.name == staticMethodStr(Set, create) && thisRefererences.ParentName == classstr(Set) && thisRefererences.Reference == XRefReference::Call { this.addSuppressableError(#BPErrorMethodIllegalConstructionUsed, thisRefererences.Line, thisRefererences.Column, strfmt(@"Метод %1%2%3 нужно заменить на Collections_MRC::createSet. См. http://axforum.info/forums/showthread.php?t=27738", thisRefererences.ParentName, (thisRefererences.Kind == xRefKind::ClassInstanceMethod || thisRefererences.Kind == xRefKind::TableInstanceMethod || thisRefererences.Kind == xRefKind::MapInstanceMethod) ? '.' : '::', thisRefererences.Name )); } // JEV005646 "Улучшить стабильность работы тестовой аксапты.", PKoz 16.11.2020 <-- } return ret; } \Classes\SysBPCheckMemberFunction\checkSource |
|
18.11.2020, 11:31 | #6 |
Участник
|
Можно написать. Например, при помощи текстового редактора. Или замерджить при помощи контроля версий. Скомпилировать нельзя.
|
|
Теги |
sysobsoleteattribute |
|
|