@openzeppelin/upgrade-safe-transpiler
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.
33 lines (27 loc) • 1.07 kB
text/typescript
import { ContractDefinition } from 'solidity-ast';
import { findAll } from 'solidity-ast/utils';
import { ASTResolver } from '../../ast-resolver';
import { getConstructor } from '../../solc/ast-utils';
import { hasOverride } from '../../utils/upgrades-overrides';
import { isStorageVariable } from './is-storage-variable';
export function getInitializerItems(contract: ContractDefinition, resolver: ASTResolver) {
const constructorNode = getConstructor(contract);
const varInitNodes = [...findAll('VariableDeclaration', contract)].filter(
v =>
v.value &&
isStorageVariable(v, resolver) &&
!hasOverride(v, 'state-variable-assignment', resolver),
);
const modifiers =
constructorNode?.modifiers.filter(
call => !contract.linearizedBaseContracts?.includes(call.modifierName.referencedDeclaration!),
) ?? [];
const emptyUnchained =
!constructorNode?.body?.statements?.length && varInitNodes.length == 0 && modifiers.length == 0;
return {
constructorNode,
varInitNodes,
modifiers,
emptyUnchained,
};
}