diff --git a/src/infrastructure/customfield/field/PhabricatorCustomField.php b/src/infrastructure/customfield/field/PhabricatorCustomField.php index f9f5979029..64639ed34f 100644 --- a/src/infrastructure/customfield/field/PhabricatorCustomField.php +++ b/src/infrastructure/customfield/field/PhabricatorCustomField.php @@ -540,9 +540,7 @@ abstract class PhabricatorCustomField extends Phobject { * @task storage */ public function newStorageObject() { - if ($this->proxy) { - return $this->proxy->newStorageObject(); - } + // NOTE: This intentionally isn't proxied, to avoid call cycles. throw new PhabricatorCustomFieldImplementationIncompleteException($this); } diff --git a/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php b/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php index 76a1de9989..ac3e163f6a 100644 --- a/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php +++ b/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php @@ -186,7 +186,12 @@ abstract class PhabricatorStandardCustomField } public function shouldUseStorage() { - return true; + try { + $object = $this->newStorageObject(); + return true; + } catch (PhabricatorCustomFieldImplementationIncompleteException $ex) { + return false; + } } public function getValueForStorage() {