Page MenuHomePhabricator

D13280.diff
No OneTemporary

D13280.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -485,10 +485,15 @@
'xsprintf_uri' => 'xsprintf/urisprintf.php',
),
'xmap' => array(
+ 'AASTNode' => 'Phobject',
'AASTNodeList' => array(
+ 'Phobject',
'Countable',
'Iterator',
),
+ 'AASTToken' => 'Phobject',
+ 'AASTTree' => 'Phobject',
+ 'AbstractDirectedGraph' => 'Phobject',
'AbstractDirectedGraphTestCase' => 'PhutilTestCase',
'AphrontAccessDeniedQueryException' => 'AphrontRecoverableQueryException',
'AphrontBaseMySQLDatabaseConnection' => 'AphrontDatabaseConnection',
@@ -496,7 +501,11 @@
'AphrontConnectionLostQueryException' => 'AphrontRecoverableQueryException',
'AphrontConnectionQueryException' => 'AphrontQueryException',
'AphrontCountQueryException' => 'AphrontQueryException',
- 'AphrontDatabaseConnection' => 'PhutilQsprintfInterface',
+ 'AphrontDatabaseConnection' => array(
+ 'Phobject',
+ 'PhutilQsprintfInterface',
+ ),
+ 'AphrontDatabaseTransactionState' => 'Phobject',
'AphrontDeadlockQueryException' => 'AphrontRecoverableQueryException',
'AphrontDuplicateKeyQueryException' => 'AphrontQueryException',
'AphrontIsolatedDatabaseConnection' => 'AphrontDatabaseConnection',
@@ -508,18 +517,28 @@
'AphrontQueryException' => 'Exception',
'AphrontRecoverableQueryException' => 'AphrontQueryException',
'AphrontSchemaQueryException' => 'AphrontQueryException',
+ 'AphrontScopedUnguardedWriteCapability' => 'Phobject',
+ 'AphrontWriteGuard' => 'Phobject',
'BaseHTTPFuture' => 'Future',
'CommandException' => 'Exception',
+ 'ConduitClient' => 'Phobject',
'ConduitClientException' => 'Exception',
'ConduitClientTestCase' => 'PhutilTestCase',
'ConduitFuture' => 'FutureProxy',
'ExecFuture' => 'Future',
'ExecFutureTestCase' => 'PhutilTestCase',
'ExecPassthruTestCase' => 'PhutilTestCase',
+ 'FileFinder' => 'Phobject',
'FileFinderTestCase' => 'PhutilTestCase',
+ 'FileList' => 'Phobject',
+ 'Filesystem' => 'Phobject',
'FilesystemException' => 'Exception',
'FilesystemTestCase' => 'PhutilTestCase',
- 'FutureIterator' => 'Iterator',
+ 'Future' => 'Phobject',
+ 'FutureIterator' => array(
+ 'Phobject',
+ 'Iterator',
+ ),
'FutureIteratorTestCase' => 'PhutilTestCase',
'FutureProxy' => 'Future',
'HTTPFuture' => 'BaseHTTPFuture',
@@ -531,13 +550,19 @@
'HTTPFutureTransportResponseStatus' => 'HTTPFutureResponseStatus',
'HTTPSFuture' => 'BaseHTTPFuture',
'ImmediateFuture' => 'Future',
- 'LinesOfALarge' => 'Iterator',
+ 'LinesOfALarge' => array(
+ 'Phobject',
+ 'Iterator',
+ ),
'LinesOfALargeExecFuture' => 'LinesOfALarge',
'LinesOfALargeExecFutureTestCase' => 'PhutilTestCase',
'LinesOfALargeFile' => 'LinesOfALarge',
'LinesOfALargeFileTestCase' => 'PhutilTestCase',
+ 'MFilterTestHelper' => 'Phobject',
'PHPASTParserTestCase' => 'PhutilTestCase',
+ 'PhageAgentBootloader' => 'Phobject',
'PhageAgentTestCase' => 'PhutilTestCase',
+ 'PhagePHPAgent' => 'Phobject',
'PhagePHPAgentBootloader' => 'PhageAgentBootloader',
'Phobject' => 'Iterator',
'PhutilAPCKeyValueCache' => 'PhutilKeyValueCache',
@@ -548,11 +573,14 @@
'PhutilAggregateException' => 'Exception',
'PhutilAllCapsEnglishLocale' => 'PhutilLocale',
'PhutilAmazonAuthAdapter' => 'PhutilOAuthAuthAdapter',
+ 'PhutilArgumentParser' => 'Phobject',
'PhutilArgumentParserException' => 'Exception',
'PhutilArgumentParserTestCase' => 'PhutilTestCase',
+ 'PhutilArgumentSpecification' => 'Phobject',
'PhutilArgumentSpecificationException' => 'PhutilArgumentParserException',
'PhutilArgumentSpecificationTestCase' => 'PhutilTestCase',
'PhutilArgumentUsageException' => 'PhutilArgumentParserException',
+ 'PhutilArgumentWorkflow' => 'Phobject',
'PhutilArray' => array(
'Phobject',
'Countable',
@@ -563,58 +591,93 @@
'PhutilArrayWithDefaultValue' => 'PhutilArray',
'PhutilAsanaAuthAdapter' => 'PhutilOAuthAuthAdapter',
'PhutilAsanaFuture' => 'FutureProxy',
+ 'PhutilAuthAdapter' => 'Phobject',
'PhutilAuthConfigurationException' => 'PhutilAuthException',
'PhutilAuthCredentialException' => 'PhutilAuthException',
'PhutilAuthException' => 'Exception',
'PhutilAuthUserAbortedException' => 'PhutilAuthException',
+ 'PhutilBallOfPHP' => 'Phobject',
'PhutilBitbucketAuthAdapter' => 'PhutilOAuth1AuthAdapter',
'PhutilBootloaderException' => 'Exception',
'PhutilBritishEnglishLocale' => 'PhutilLocale',
- 'PhutilBufferedIterator' => 'Iterator',
+ 'PhutilBufferedIterator' => array(
+ 'Phobject',
+ 'Iterator',
+ ),
'PhutilBufferedIteratorTestCase' => 'PhutilTestCase',
+ 'PhutilBugtraqParser' => 'Phobject',
'PhutilBugtraqParserTestCase' => 'PhutilTestCase',
'PhutilCIDRBlock' => 'Phobject',
'PhutilCIDRList' => 'Phobject',
'PhutilCLikeCodeSnippetContextFreeGrammar' => 'PhutilCodeSnippetContextFreeGrammar',
'PhutilCallbackFilterIterator' => 'FilterIterator',
+ 'PhutilChannel' => 'Phobject',
'PhutilChannelChannel' => 'PhutilChannel',
'PhutilChannelTestCase' => 'PhutilTestCase',
- 'PhutilChunkedIterator' => 'Iterator',
+ 'PhutilChunkedIterator' => array(
+ 'Phobject',
+ 'Iterator',
+ ),
'PhutilChunkedIteratorTestCase' => 'PhutilTestCase',
'PhutilCodeSnippetContextFreeGrammar' => 'PhutilContextFreeGrammar',
'PhutilCommandString' => 'Phobject',
+ 'PhutilConsole' => 'Phobject',
+ 'PhutilConsoleFormatter' => 'Phobject',
+ 'PhutilConsoleMessage' => 'Phobject',
'PhutilConsoleProgressBar' => 'Phobject',
+ 'PhutilConsoleServer' => 'Phobject',
'PhutilConsoleServerChannel' => 'PhutilChannelChannel',
'PhutilConsoleStdinNotInteractiveException' => 'Exception',
+ 'PhutilConsoleSyntaxHighlighter' => 'Phobject',
'PhutilConsoleTable' => 'Phobject',
'PhutilConsoleWrapTestCase' => 'PhutilTestCase',
+ 'PhutilContextFreeGrammar' => 'Phobject',
'PhutilCsprintfTestCase' => 'PhutilTestCase',
'PhutilCzechLocale' => 'PhutilLocale',
+ 'PhutilDaemon' => 'Phobject',
+ 'PhutilDaemonHandle' => 'Phobject',
+ 'PhutilDaemonOverseer' => 'Phobject',
+ 'PhutilDefaultSyntaxHighlighter' => 'Phobject',
'PhutilDefaultSyntaxHighlighterEngine' => 'PhutilSyntaxHighlighterEngine',
'PhutilDefaultSyntaxHighlighterEnginePygmentsFuture' => 'FutureProxy',
'PhutilDefaultSyntaxHighlighterEngineTestCase' => 'PhutilTestCase',
+ 'PhutilDeferredLog' => 'Phobject',
'PhutilDeferredLogTestCase' => 'PhutilTestCase',
'PhutilDirectedScalarGraph' => 'AbstractDirectedGraph',
+ 'PhutilDirectoryFixture' => 'Phobject',
'PhutilDirectoryKeyValueCache' => 'PhutilKeyValueCache',
'PhutilDisqusAuthAdapter' => 'PhutilOAuthAuthAdapter',
+ 'PhutilDivinerSyntaxHighlighter' => 'Phobject',
+ 'PhutilDocblockParser' => 'Phobject',
'PhutilDocblockParserTestCase' => 'PhutilTestCase',
+ 'PhutilEditDistanceMatrix' => 'Phobject',
'PhutilEditDistanceMatrixTestCase' => 'PhutilTestCase',
+ 'PhutilEditorConfig' => 'Phobject',
'PhutilEditorConfigTestCase' => 'PhutilTestCase',
+ 'PhutilEmailAddress' => 'Phobject',
'PhutilEmailAddressTestCase' => 'PhutilTestCase',
'PhutilEmptyAuthAdapter' => 'PhutilAuthAdapter',
+ 'PhutilErrorHandler' => 'Phobject',
'PhutilErrorHandlerTestCase' => 'PhutilTestCase',
'PhutilErrorTrap' => 'Phobject',
+ 'PhutilEvent' => 'Phobject',
+ 'PhutilEventConstants' => 'Phobject',
+ 'PhutilEventEngine' => 'Phobject',
+ 'PhutilEventListener' => 'Phobject',
'PhutilEventType' => 'PhutilEventConstants',
'PhutilExampleBufferedIterator' => 'PhutilBufferedIterator',
'PhutilExcessiveServiceCallsDaemon' => 'PhutilTortureTestDaemon',
'PhutilExecChannel' => 'PhutilChannel',
'PhutilExecPassthru' => 'Phobject',
+ 'PhutilExecutionEnvironment' => 'Phobject',
'PhutilExtensionsTestCase' => 'PhutilTestCase',
'PhutilFacebookAuthAdapter' => 'PhutilOAuthAuthAdapter',
'PhutilFatalDaemon' => 'PhutilTortureTestDaemon',
'PhutilFileLock' => 'PhutilLock',
'PhutilFileLockTestCase' => 'PhutilTestCase',
+ 'PhutilFileTree' => 'Phobject',
'PhutilGitHubAuthAdapter' => 'PhutilOAuthAuthAdapter',
+ 'PhutilGitURI' => 'Phobject',
'PhutilGitURITestCase' => 'PhutilTestCase',
'PhutilGoogleAuthAdapter' => 'PhutilOAuthAuthAdapter',
'PhutilHangForeverDaemon' => 'PhutilTortureTestDaemon',
@@ -625,32 +688,43 @@
'PhutilIPAddress' => 'Phobject',
'PhutilIPAddressTestCase' => 'PhutilTestCase',
'PhutilInRequestKeyValueCache' => 'PhutilKeyValueCache',
+ 'PhutilInteractiveEditor' => 'Phobject',
'PhutilInvalidRuleParserGeneratorException' => 'PhutilParserGeneratorException',
'PhutilInvalidStateException' => 'Exception',
'PhutilInvalidStateExceptionTestCase' => 'PhutilTestCase',
+ 'PhutilInvisibleSyntaxHighlighter' => 'Phobject',
'PhutilIrreducibleRuleParserGeneratorException' => 'PhutilParserGeneratorException',
'PhutilJIRAAuthAdapter' => 'PhutilOAuth1AuthAdapter',
+ 'PhutilJSON' => 'Phobject',
+ 'PhutilJSONParser' => 'Phobject',
'PhutilJSONParserException' => 'Exception',
'PhutilJSONParserTestCase' => 'PhutilTestCase',
'PhutilJSONProtocolChannel' => 'PhutilProtocolChannel',
'PhutilJSONProtocolChannelTestCase' => 'PhutilTestCase',
'PhutilJSONTestCase' => 'PhutilTestCase',
'PhutilJavaCodeSnippetContextFreeGrammar' => 'PhutilCLikeCodeSnippetContextFreeGrammar',
+ 'PhutilKeyValueCache' => 'Phobject',
'PhutilKeyValueCacheNamespace' => 'PhutilKeyValueCacheProxy',
'PhutilKeyValueCacheProfiler' => 'PhutilKeyValueCacheProxy',
'PhutilKeyValueCacheProxy' => 'PhutilKeyValueCache',
'PhutilKeyValueCacheStack' => 'PhutilKeyValueCache',
'PhutilKeyValueCacheTestCase' => 'PhutilTestCase',
'PhutilLDAPAuthAdapter' => 'PhutilAuthAdapter',
+ 'PhutilLanguageGuesser' => 'Phobject',
'PhutilLanguageGuesserTestCase' => 'PhutilTestCase',
+ 'PhutilLexer' => 'Phobject',
'PhutilLexerSyntaxHighlighter' => 'PhutilSyntaxHighlighter',
'PhutilLibraryConflictException' => 'Exception',
+ 'PhutilLibraryMapBuilder' => 'Phobject',
'PhutilLibraryTestCase' => 'PhutilTestCase',
'PhutilLipsumContextFreeGrammar' => 'PhutilContextFreeGrammar',
'PhutilLocale' => 'Phobject',
+ 'PhutilLock' => 'Phobject',
'PhutilLockException' => 'Exception',
'PhutilLogFileChannel' => 'PhutilChannelChannel',
+ 'PhutilLunarPhase' => 'Phobject',
'PhutilLunarPhaseTestCase' => 'PhutilTestCase',
+ 'PhutilMarkupEngine' => 'Phobject',
'PhutilMarkupTestCase' => 'PhutilTestCase',
'PhutilMemcacheKeyValueCache' => 'PhutilKeyValueCache',
'PhutilMethodNotImplementedException' => 'Exception',
@@ -658,11 +732,14 @@
'PhutilMissingSymbolException' => 'Exception',
'PhutilModuleUtilsTestCase' => 'PhutilTestCase',
'PhutilNiceDaemon' => 'PhutilTortureTestDaemon',
+ 'PhutilNumber' => 'Phobject',
'PhutilOAuth1AuthAdapter' => 'PhutilAuthAdapter',
'PhutilOAuth1Future' => 'FutureProxy',
'PhutilOAuth1FutureTestCase' => 'PhutilTestCase',
'PhutilOAuthAuthAdapter' => 'PhutilAuthAdapter',
'PhutilOnDiskKeyValueCache' => 'PhutilKeyValueCache',
+ 'PhutilOpaqueEnvelope' => 'Phobject',
+ 'PhutilOpaqueEnvelopeKey' => 'Phobject',
'PhutilOpaqueEnvelopeTestCase' => 'PhutilTestCase',
'PhutilPHPCodeSnippetContextFreeGrammar' => 'PhutilCLikeCodeSnippetContextFreeGrammar',
'PhutilPHPFragmentLexer' => 'PhutilLexer',
@@ -670,10 +747,14 @@
'PhutilPHPFragmentLexerTestCase' => 'PhutilTestCase',
'PhutilPHPObjectProtocolChannel' => 'PhutilProtocolChannel',
'PhutilPHPObjectProtocolChannelTestCase' => 'PhutilTestCase',
+ 'PhutilParserGenerator' => 'Phobject',
'PhutilParserGeneratorException' => 'Exception',
'PhutilParserGeneratorTestCase' => 'PhutilTestCase',
'PhutilPayPalAPIFuture' => 'FutureProxy',
- 'PhutilPersonTest' => 'PhutilPerson',
+ 'PhutilPersonTest' => array(
+ 'Phobject',
+ 'PhutilPerson',
+ ),
'PhutilPersonaAuthAdapter' => 'PhutilAuthAdapter',
'PhutilPhabricatorAuthAdapter' => 'PhutilOAuthAuthAdapter',
'PhutilPhobjectTestCase' => 'PhutilTestCase',
@@ -681,11 +762,18 @@
'PhutilProcessGroupDaemon' => 'PhutilTortureTestDaemon',
'PhutilProtocolChannel' => 'PhutilChannelChannel',
'PhutilProxyException' => 'Exception',
+ 'PhutilPygmentsSyntaxHighlighter' => 'Phobject',
'PhutilPythonFragmentLexer' => 'PhutilLexer',
+ 'PhutilQueryStringParser' => 'Phobject',
'PhutilQueryStringParserTestCase' => 'PhutilTestCase',
+ 'PhutilRainbowSyntaxHighlighter' => 'Phobject',
'PhutilRawEnglishLocale' => 'PhutilLocale',
+ 'PhutilReadableSerializer' => 'Phobject',
'PhutilReadableSerializerTestCase' => 'PhutilTestCase',
'PhutilRealNameContextFreeGrammar' => 'PhutilContextFreeGrammar',
+ 'PhutilRemarkupBlockInterpreter' => 'Phobject',
+ 'PhutilRemarkupBlockRule' => 'Phobject',
+ 'PhutilRemarkupBlockStorage' => 'Phobject',
'PhutilRemarkupBoldRule' => 'PhutilRemarkupRule',
'PhutilRemarkupCodeBlockRule' => 'PhutilRemarkupBlockRule',
'PhutilRemarkupDefaultBlockRule' => 'PhutilRemarkupBlockRule',
@@ -707,20 +795,28 @@
'PhutilRemarkupNoteBlockRule' => 'PhutilRemarkupBlockRule',
'PhutilRemarkupQuotesBlockRule' => 'PhutilRemarkupBlockRule',
'PhutilRemarkupReplyBlockRule' => 'PhutilRemarkupBlockRule',
+ 'PhutilRemarkupRule' => 'Phobject',
'PhutilRemarkupSimpleTableBlockRule' => 'PhutilRemarkupBlockRule',
'PhutilRemarkupTableBlockRule' => 'PhutilRemarkupBlockRule',
'PhutilRemarkupTestInterpreterRule' => 'PhutilRemarkupBlockInterpreter',
'PhutilRemarkupUnderlineRule' => 'PhutilRemarkupRule',
'PhutilRope' => 'Phobject',
'PhutilRopeTestCase' => 'PhutilTestCase',
+ 'PhutilSafeHTML' => 'Phobject',
'PhutilSafeHTMLTestCase' => 'PhutilTestCase',
'PhutilSaturateStdoutDaemon' => 'PhutilTortureTestDaemon',
+ 'PhutilServiceProfiler' => 'Phobject',
'PhutilShellLexer' => 'PhutilLexer',
'PhutilShellLexerTestCase' => 'PhutilTestCase',
+ 'PhutilSimpleOptions' => 'Phobject',
'PhutilSimpleOptionsLexer' => 'PhutilLexer',
'PhutilSimpleOptionsLexerTestCase' => 'PhutilTestCase',
'PhutilSimpleOptionsTestCase' => 'PhutilTestCase',
'PhutilSocketChannel' => 'PhutilChannel',
+ 'PhutilSprite' => 'Phobject',
+ 'PhutilSpriteSheet' => 'Phobject',
+ 'PhutilSyntaxHighlighter' => 'Phobject',
+ 'PhutilSyntaxHighlighterEngine' => 'Phobject',
'PhutilSyntaxHighlighterException' => 'Exception',
'PhutilSystem' => 'Phobject',
'PhutilSystemTestCase' => 'PhutilTestCase',
@@ -728,6 +824,7 @@
'PhutilTestPhobject' => 'Phobject',
'PhutilTortureTestDaemon' => 'PhutilDaemon',
'PhutilTranslation' => 'Phobject',
+ 'PhutilTranslator' => 'Phobject',
'PhutilTranslatorTestCase' => 'PhutilTestCase',
'PhutilTsprintfTestCase' => 'PhutilTestCase',
'PhutilTwitchAuthAdapter' => 'PhutilOAuthAuthAdapter',
@@ -737,7 +834,9 @@
'PhutilTypeExtraParametersException' => 'Exception',
'PhutilTypeLexer' => 'PhutilLexer',
'PhutilTypeMissingParametersException' => 'Exception',
+ 'PhutilTypeSpec' => 'Phobject',
'PhutilTypeSpecTestCase' => 'PhutilTestCase',
+ 'PhutilURI' => 'Phobject',
'PhutilURITestCase' => 'PhutilTestCase',
'PhutilUSEnglishLocale' => 'PhutilLocale',
'PhutilUTF8StringTruncator' => 'Phobject',
@@ -750,9 +849,12 @@
'PhutilVeryWowEnglishLocale' => 'PhutilLocale',
'PhutilWordPressAuthAdapter' => 'PhutilOAuthAuthAdapter',
'PhutilWordPressFuture' => 'FutureProxy',
+ 'PhutilXHPASTBinary' => 'Phobject',
+ 'PhutilXHPASTSyntaxHighlighter' => 'Phobject',
'PhutilXHPASTSyntaxHighlighterFuture' => 'FutureProxy',
'PhutilXHPASTSyntaxHighlighterTestCase' => 'PhutilTestCase',
'QueryFuture' => 'Future',
+ 'TempFile' => 'Phobject',
'TestAbstractDirectedGraph' => 'AbstractDirectedGraph',
'XHPASTNode' => 'AASTNode',
'XHPASTNodeTestCase' => 'PhutilTestCase',
diff --git a/src/aphront/storage/connection/AphrontDatabaseConnection.php b/src/aphront/storage/connection/AphrontDatabaseConnection.php
--- a/src/aphront/storage/connection/AphrontDatabaseConnection.php
+++ b/src/aphront/storage/connection/AphrontDatabaseConnection.php
@@ -3,7 +3,9 @@
/**
* @task xaction Transaction Management
*/
-abstract class AphrontDatabaseConnection implements PhutilQsprintfInterface {
+abstract class AphrontDatabaseConnection
+ extends Phobject
+ implements PhutilQsprintfInterface {
private $transactionState;
diff --git a/src/aphront/storage/connection/AphrontDatabaseTransactionState.php b/src/aphront/storage/connection/AphrontDatabaseTransactionState.php
--- a/src/aphront/storage/connection/AphrontDatabaseTransactionState.php
+++ b/src/aphront/storage/connection/AphrontDatabaseTransactionState.php
@@ -3,7 +3,7 @@
/**
* Represents current transaction state of a connection.
*/
-final class AphrontDatabaseTransactionState {
+final class AphrontDatabaseTransactionState extends Phobject {
private $depth = 0;
private $readLockLevel = 0;
diff --git a/src/aphront/writeguard/AphrontScopedUnguardedWriteCapability.php b/src/aphront/writeguard/AphrontScopedUnguardedWriteCapability.php
--- a/src/aphront/writeguard/AphrontScopedUnguardedWriteCapability.php
+++ b/src/aphront/writeguard/AphrontScopedUnguardedWriteCapability.php
@@ -1,6 +1,6 @@
<?php
-final class AphrontScopedUnguardedWriteCapability {
+final class AphrontScopedUnguardedWriteCapability extends Phobject {
public function __destruct() {
AphrontWriteGuard::endUnguardedWrites();
diff --git a/src/aphront/writeguard/AphrontWriteGuard.php b/src/aphront/writeguard/AphrontWriteGuard.php
--- a/src/aphront/writeguard/AphrontWriteGuard.php
+++ b/src/aphront/writeguard/AphrontWriteGuard.php
@@ -28,7 +28,7 @@
* @task manage Managing Write Guards
* @task internal Internals
*/
-final class AphrontWriteGuard {
+final class AphrontWriteGuard extends Phobject {
private static $instance;
private static $allowUnguardedWrites = false;
diff --git a/src/auth/PhutilAuthAdapter.php b/src/auth/PhutilAuthAdapter.php
--- a/src/auth/PhutilAuthAdapter.php
+++ b/src/auth/PhutilAuthAdapter.php
@@ -15,7 +15,7 @@
* configured -- only what information it is expected to be able to provide once
* properly configured.
*/
-abstract class PhutilAuthAdapter {
+abstract class PhutilAuthAdapter extends Phobject {
/**
* Get a unique identifier associated with the identity. For most providers,
diff --git a/src/cache/PhutilKeyValueCache.php b/src/cache/PhutilKeyValueCache.php
--- a/src/cache/PhutilKeyValueCache.php
+++ b/src/cache/PhutilKeyValueCache.php
@@ -7,7 +7,7 @@
*
* @task kvimpl Key-Value Cache Implementation
*/
-abstract class PhutilKeyValueCache {
+abstract class PhutilKeyValueCache extends Phobject {
/* -( Key-Value Cache Implementation )------------------------------------- */
diff --git a/src/channel/PhutilChannel.php b/src/channel/PhutilChannel.php
--- a/src/channel/PhutilChannel.php
+++ b/src/channel/PhutilChannel.php
@@ -27,7 +27,7 @@
* @task update Responding to Activity
* @task impl Channel Implementation
*/
-abstract class PhutilChannel {
+abstract class PhutilChannel extends Phobject {
private $ibuf = '';
private $obuf;
diff --git a/src/conduit/ConduitClient.php b/src/conduit/ConduitClient.php
--- a/src/conduit/ConduitClient.php
+++ b/src/conduit/ConduitClient.php
@@ -1,6 +1,6 @@
<?php
-final class ConduitClient {
+final class ConduitClient extends Phobject {
private $uri;
private $host;
diff --git a/src/console/PhutilConsole.php b/src/console/PhutilConsole.php
--- a/src/console/PhutilConsole.php
+++ b/src/console/PhutilConsole.php
@@ -11,7 +11,7 @@
* @task interface Interfacing with the User
* @task internal Internals
*/
-final class PhutilConsole {
+final class PhutilConsole extends Phobject {
private static $console;
diff --git a/src/console/PhutilConsoleFormatter.php b/src/console/PhutilConsoleFormatter.php
--- a/src/console/PhutilConsoleFormatter.php
+++ b/src/console/PhutilConsoleFormatter.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilConsoleFormatter {
+final class PhutilConsoleFormatter extends Phobject {
private static $colorCodes = array(
'black' => 0,
diff --git a/src/console/PhutilConsoleMessage.php b/src/console/PhutilConsoleMessage.php
--- a/src/console/PhutilConsoleMessage.php
+++ b/src/console/PhutilConsoleMessage.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilConsoleMessage {
+final class PhutilConsoleMessage extends Phobject {
const TYPE_CONFIRM = 'phutil:confirm';
const TYPE_PROMPT = 'phutil:prompt';
diff --git a/src/console/PhutilConsoleServer.php b/src/console/PhutilConsoleServer.php
--- a/src/console/PhutilConsoleServer.php
+++ b/src/console/PhutilConsoleServer.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilConsoleServer {
+final class PhutilConsoleServer extends Phobject {
private $clients = array();
private $handler;
diff --git a/src/console/PhutilInteractiveEditor.php b/src/console/PhutilInteractiveEditor.php
--- a/src/console/PhutilInteractiveEditor.php
+++ b/src/console/PhutilInteractiveEditor.php
@@ -15,7 +15,7 @@
* @task edit Editing Interactively
* @task config Configuring Options
*/
-final class PhutilInteractiveEditor {
+final class PhutilInteractiveEditor extends Phobject {
private $name = '';
private $content = '';
diff --git a/src/daemon/PhutilDaemon.php b/src/daemon/PhutilDaemon.php
--- a/src/daemon/PhutilDaemon.php
+++ b/src/daemon/PhutilDaemon.php
@@ -40,7 +40,7 @@
* @task overseer Communicating With the Overseer
* @task autoscale Autoscaling Daemon Pools
*/
-abstract class PhutilDaemon {
+abstract class PhutilDaemon extends Phobject {
const MESSAGETYPE_STDOUT = 'stdout';
const MESSAGETYPE_HEARTBEAT = 'heartbeat';
diff --git a/src/daemon/PhutilDaemonHandle.php b/src/daemon/PhutilDaemonHandle.php
--- a/src/daemon/PhutilDaemonHandle.php
+++ b/src/daemon/PhutilDaemonHandle.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilDaemonHandle {
+final class PhutilDaemonHandle extends Phobject {
const EVENT_DID_LAUNCH = 'daemon.didLaunch';
const EVENT_DID_LOG = 'daemon.didLogMessage';
diff --git a/src/daemon/PhutilDaemonOverseer.php b/src/daemon/PhutilDaemonOverseer.php
--- a/src/daemon/PhutilDaemonOverseer.php
+++ b/src/daemon/PhutilDaemonOverseer.php
@@ -3,7 +3,7 @@
/**
* Oversees a daemon and restarts it if it fails.
*/
-final class PhutilDaemonOverseer {
+final class PhutilDaemonOverseer extends Phobject {
private $argv;
private $moreArgs;
diff --git a/src/error/PhutilErrorHandler.php b/src/error/PhutilErrorHandler.php
--- a/src/error/PhutilErrorHandler.php
+++ b/src/error/PhutilErrorHandler.php
@@ -29,7 +29,7 @@
* @task trap Error Traps
* @task internal Internals
*/
-final class PhutilErrorHandler {
+final class PhutilErrorHandler extends Phobject {
private static $errorListener = null;
private static $initialized = false;
diff --git a/src/error/PhutilOpaqueEnvelope.php b/src/error/PhutilOpaqueEnvelope.php
--- a/src/error/PhutilOpaqueEnvelope.php
+++ b/src/error/PhutilOpaqueEnvelope.php
@@ -20,7 +20,7 @@
* @task envelope Using Opaque Envelopes
* @task internal Internals
*/
-final class PhutilOpaqueEnvelope {
+final class PhutilOpaqueEnvelope extends Phobject {
private $value;
diff --git a/src/error/PhutilOpaqueEnvelopeKey.php b/src/error/PhutilOpaqueEnvelopeKey.php
--- a/src/error/PhutilOpaqueEnvelopeKey.php
+++ b/src/error/PhutilOpaqueEnvelopeKey.php
@@ -8,7 +8,7 @@
*
* @task internal Internals
*/
-final class PhutilOpaqueEnvelopeKey {
+final class PhutilOpaqueEnvelopeKey extends Phobject {
private static $key;
diff --git a/src/events/PhutilEvent.php b/src/events/PhutilEvent.php
--- a/src/events/PhutilEvent.php
+++ b/src/events/PhutilEvent.php
@@ -3,7 +3,7 @@
/**
* @concrete-extensible
*/
-class PhutilEvent {
+class PhutilEvent extends Phobject {
private $type;
private $data;
diff --git a/src/events/PhutilEventEngine.php b/src/events/PhutilEventEngine.php
--- a/src/events/PhutilEventEngine.php
+++ b/src/events/PhutilEventEngine.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilEventEngine {
+final class PhutilEventEngine extends Phobject {
private static $instance;
diff --git a/src/events/PhutilEventListener.php b/src/events/PhutilEventListener.php
--- a/src/events/PhutilEventListener.php
+++ b/src/events/PhutilEventListener.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilEventListener {
+abstract class PhutilEventListener extends Phobject {
private $listenerID;
private static $nextListenerID = 1;
diff --git a/src/events/constant/PhutilEventConstants.php b/src/events/constant/PhutilEventConstants.php
--- a/src/events/constant/PhutilEventConstants.php
+++ b/src/events/constant/PhutilEventConstants.php
@@ -1,3 +1,3 @@
<?php
-abstract class PhutilEventConstants {}
+abstract class PhutilEventConstants extends Phobject {}
diff --git a/src/filesystem/FileFinder.php b/src/filesystem/FileFinder.php
--- a/src/filesystem/FileFinder.php
+++ b/src/filesystem/FileFinder.php
@@ -15,7 +15,7 @@
* @task exec Executing the File Query
* @task internal Internal
*/
-final class FileFinder {
+final class FileFinder extends Phobject {
private $root;
private $exclude = array();
diff --git a/src/filesystem/FileList.php b/src/filesystem/FileList.php
--- a/src/filesystem/FileList.php
+++ b/src/filesystem/FileList.php
@@ -18,7 +18,7 @@
* @task create Creating a File List
* @task test Testing File Lists
*/
-final class FileList {
+final class FileList extends Phobject {
private $files = array();
private $dirs = array();
diff --git a/src/filesystem/Filesystem.php b/src/filesystem/Filesystem.php
--- a/src/filesystem/Filesystem.php
+++ b/src/filesystem/Filesystem.php
@@ -15,7 +15,7 @@
* @task exec Executables
* @task assert Assertions
*/
-final class Filesystem {
+final class Filesystem extends Phobject {
/* -( Files )-------------------------------------------------------------- */
diff --git a/src/filesystem/PhutilDeferredLog.php b/src/filesystem/PhutilDeferredLog.php
--- a/src/filesystem/PhutilDeferredLog.php
+++ b/src/filesystem/PhutilDeferredLog.php
@@ -36,7 +36,7 @@
* @task write Writing the Log
* @task internal Internals
*/
-final class PhutilDeferredLog {
+final class PhutilDeferredLog extends Phobject {
private $file;
private $format;
diff --git a/src/filesystem/PhutilDirectoryFixture.php b/src/filesystem/PhutilDirectoryFixture.php
--- a/src/filesystem/PhutilDirectoryFixture.php
+++ b/src/filesystem/PhutilDirectoryFixture.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilDirectoryFixture {
+final class PhutilDirectoryFixture extends Phobject {
protected $path;
diff --git a/src/filesystem/PhutilFileTree.php b/src/filesystem/PhutilFileTree.php
--- a/src/filesystem/PhutilFileTree.php
+++ b/src/filesystem/PhutilFileTree.php
@@ -3,7 +3,7 @@
/**
* Data structure for representing filesystem directory trees.
*/
-final class PhutilFileTree {
+final class PhutilFileTree extends Phobject {
private $name;
private $fullPath;
diff --git a/src/filesystem/PhutilLock.php b/src/filesystem/PhutilLock.php
--- a/src/filesystem/PhutilLock.php
+++ b/src/filesystem/PhutilLock.php
@@ -25,7 +25,7 @@
* @task lock Locking
* @task internal Internals
*/
-abstract class PhutilLock {
+abstract class PhutilLock extends Phobject {
private static $registeredShutdownFunction = false;
private static $locks = array();
diff --git a/src/filesystem/TempFile.php b/src/filesystem/TempFile.php
--- a/src/filesystem/TempFile.php
+++ b/src/filesystem/TempFile.php
@@ -14,7 +14,7 @@
* @task config Configuration
* @task internal Internals
*/
-final class TempFile {
+final class TempFile extends Phobject {
private $dir;
private $file;
diff --git a/src/filesystem/linesofalarge/LinesOfALarge.php b/src/filesystem/linesofalarge/LinesOfALarge.php
--- a/src/filesystem/linesofalarge/LinesOfALarge.php
+++ b/src/filesystem/linesofalarge/LinesOfALarge.php
@@ -33,7 +33,7 @@
* @task internals Internals
* @task iterator Iterator Interface
*/
-abstract class LinesOfALarge implements Iterator {
+abstract class LinesOfALarge extends Phobject implements Iterator {
private $pos;
private $buf;
diff --git a/src/future/Future.php b/src/future/Future.php
--- a/src/future/Future.php
+++ b/src/future/Future.php
@@ -5,7 +5,7 @@
* pending computation. For a more complete overview of futures, see
* @{article:Using Futures}.
*/
-abstract class Future {
+abstract class Future extends Phobject {
protected static $handlerInstalled = null;
diff --git a/src/future/FutureIterator.php b/src/future/FutureIterator.php
--- a/src/future/FutureIterator.php
+++ b/src/future/FutureIterator.php
@@ -28,7 +28,7 @@
* @task iterator Iterator Interface
* @task internal Internals
*/
-final class FutureIterator implements Iterator {
+final class FutureIterator extends Phobject implements Iterator {
protected $wait = array();
protected $work = array();
diff --git a/src/grammar/PhutilContextFreeGrammar.php b/src/grammar/PhutilContextFreeGrammar.php
--- a/src/grammar/PhutilContextFreeGrammar.php
+++ b/src/grammar/PhutilContextFreeGrammar.php
@@ -3,7 +3,7 @@
/**
* Generate nonsense test data according to a context-free grammar definition.
*/
-abstract class PhutilContextFreeGrammar {
+abstract class PhutilContextFreeGrammar extends Phobject {
private $limit = 65535;
diff --git a/src/internationalization/PhutilNumber.php b/src/internationalization/PhutilNumber.php
--- a/src/internationalization/PhutilNumber.php
+++ b/src/internationalization/PhutilNumber.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilNumber {
+final class PhutilNumber extends Phobject {
private $value;
private $decimals = 0;
diff --git a/src/internationalization/PhutilTranslator.php b/src/internationalization/PhutilTranslator.php
--- a/src/internationalization/PhutilTranslator.php
+++ b/src/internationalization/PhutilTranslator.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilTranslator {
+final class PhutilTranslator extends Phobject {
private static $instance;
diff --git a/src/internationalization/__tests__/PhutilPersonTest.php b/src/internationalization/__tests__/PhutilPersonTest.php
--- a/src/internationalization/__tests__/PhutilPersonTest.php
+++ b/src/internationalization/__tests__/PhutilPersonTest.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilPersonTest implements PhutilPerson {
+final class PhutilPersonTest extends Phobject implements PhutilPerson {
private $sex = PhutilPerson::SEX_UNKNOWN;
diff --git a/src/lexer/PhutilLexer.php b/src/lexer/PhutilLexer.php
--- a/src/lexer/PhutilLexer.php
+++ b/src/lexer/PhutilLexer.php
@@ -74,7 +74,7 @@
* @task rule Lexer Rules
* @task tokens Lexer Tokens
*/
-abstract class PhutilLexer {
+abstract class PhutilLexer extends Phobject {
private $processedRules;
private $lastState;
diff --git a/src/markup/PhutilMarkupEngine.php b/src/markup/PhutilMarkupEngine.php
--- a/src/markup/PhutilMarkupEngine.php
+++ b/src/markup/PhutilMarkupEngine.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilMarkupEngine {
+abstract class PhutilMarkupEngine extends Phobject {
/**
* Set a configuration parameter which the engine can read to customize how
diff --git a/src/markup/PhutilSafeHTML.php b/src/markup/PhutilSafeHTML.php
--- a/src/markup/PhutilSafeHTML.php
+++ b/src/markup/PhutilSafeHTML.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilSafeHTML {
+final class PhutilSafeHTML extends Phobject {
private $content;
diff --git a/src/markup/engine/PhutilRemarkupEngine.php b/src/markup/engine/PhutilRemarkupEngine.php
--- a/src/markup/engine/PhutilRemarkupEngine.php
+++ b/src/markup/engine/PhutilRemarkupEngine.php
@@ -14,6 +14,7 @@
private $metadata = array();
private $states = array();
private $postprocessRules = array();
+ private $storage;
public function setConfig($key, $value) {
$this->config[$key] = $value;
@@ -129,7 +130,7 @@
$output = $this->flattenOutput($output);
$map = $this->storage->getMap();
- unset($this->storage);
+ $this->storage = null;
$metadata = $this->metadata;
diff --git a/src/markup/engine/remarkup/PhutilRemarkupBlockStorage.php b/src/markup/engine/remarkup/PhutilRemarkupBlockStorage.php
--- a/src/markup/engine/remarkup/PhutilRemarkupBlockStorage.php
+++ b/src/markup/engine/remarkup/PhutilRemarkupBlockStorage.php
@@ -30,7 +30,7 @@
*
* This class generates keys, and stores the map of keys to replacement text.
*/
-final class PhutilRemarkupBlockStorage {
+final class PhutilRemarkupBlockStorage extends Phobject {
const MAGIC_BYTE = "\1";
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilRemarkupBlockInterpreter {
+abstract class PhutilRemarkupBlockInterpreter extends Phobject {
private $engine;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilRemarkupBlockRule {
+abstract class PhutilRemarkupBlockRule extends Phobject {
private $engine;
private $rules = array();
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRule.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRule.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupRule.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilRemarkupRule {
+abstract class PhutilRemarkupRule extends Phobject {
private $engine;
private $replaceCallback;
diff --git a/src/markup/syntax/engine/PhutilSyntaxHighlighterEngine.php b/src/markup/syntax/engine/PhutilSyntaxHighlighterEngine.php
--- a/src/markup/syntax/engine/PhutilSyntaxHighlighterEngine.php
+++ b/src/markup/syntax/engine/PhutilSyntaxHighlighterEngine.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilSyntaxHighlighterEngine {
+abstract class PhutilSyntaxHighlighterEngine extends Phobject {
abstract public function setConfig($key, $value);
abstract public function getHighlightFuture($language, $source);
diff --git a/src/markup/syntax/highlighter/PhutilConsoleSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilConsoleSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilConsoleSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilConsoleSyntaxHighlighter.php
@@ -4,7 +4,7 @@
* Simple syntax highlighter for console output. We just try to highlight the
* commands so it's easier to follow transcripts.
*/
-final class PhutilConsoleSyntaxHighlighter {
+final class PhutilConsoleSyntaxHighlighter extends Phobject {
private $config = array();
private $replaceClass;
diff --git a/src/markup/syntax/highlighter/PhutilDefaultSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilDefaultSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilDefaultSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilDefaultSyntaxHighlighter.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilDefaultSyntaxHighlighter {
+final class PhutilDefaultSyntaxHighlighter extends Phobject {
public function setConfig($key, $value) {
return $this;
diff --git a/src/markup/syntax/highlighter/PhutilDivinerSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilDivinerSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilDivinerSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilDivinerSyntaxHighlighter.php
@@ -4,7 +4,7 @@
* Simple syntax highlighter for the ".diviner" format, which is just Remarkup
* with a specific ruleset. This should also work alright for Remarkup.
*/
-final class PhutilDivinerSyntaxHighlighter {
+final class PhutilDivinerSyntaxHighlighter extends Phobject {
private $config = array();
private $replaceClass;
diff --git a/src/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilInvisibleSyntaxHighlighter {
+final class PhutilInvisibleSyntaxHighlighter extends Phobject {
private $config = array();
diff --git a/src/markup/syntax/highlighter/PhutilPygmentsSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilPygmentsSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilPygmentsSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilPygmentsSyntaxHighlighter.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilPygmentsSyntaxHighlighter {
+final class PhutilPygmentsSyntaxHighlighter extends Phobject {
private $config = array();
diff --git a/src/markup/syntax/highlighter/PhutilRainbowSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilRainbowSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilRainbowSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilRainbowSyntaxHighlighter.php
@@ -4,7 +4,7 @@
* Highlights source code with a rainbow of colors, regardless of the language.
* This highlighter is useless, absurd, and extremely slow.
*/
-final class PhutilRainbowSyntaxHighlighter {
+final class PhutilRainbowSyntaxHighlighter extends Phobject {
private $config = array();
diff --git a/src/markup/syntax/highlighter/PhutilSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilSyntaxHighlighter.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhutilSyntaxHighlighter {
+abstract class PhutilSyntaxHighlighter extends Phobject {
abstract public function setConfig($key, $value);
abstract public function getHighlightFuture($source);
}
diff --git a/src/markup/syntax/highlighter/PhutilXHPASTSyntaxHighlighter.php b/src/markup/syntax/highlighter/PhutilXHPASTSyntaxHighlighter.php
--- a/src/markup/syntax/highlighter/PhutilXHPASTSyntaxHighlighter.php
+++ b/src/markup/syntax/highlighter/PhutilXHPASTSyntaxHighlighter.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilXHPASTSyntaxHighlighter {
+final class PhutilXHPASTSyntaxHighlighter extends Phobject {
public function getHighlightFuture($source) {
$scrub = false;
diff --git a/src/moduleutils/PhutilLibraryMapBuilder.php b/src/moduleutils/PhutilLibraryMapBuilder.php
--- a/src/moduleutils/PhutilLibraryMapBuilder.php
+++ b/src/moduleutils/PhutilLibraryMapBuilder.php
@@ -9,7 +9,7 @@
* @task symbol Symbol Analysis and Caching
* @task source Source Management
*/
-final class PhutilLibraryMapBuilder {
+final class PhutilLibraryMapBuilder extends Phobject {
private $root;
private $quiet = true;
diff --git a/src/parser/PhutilBugtraqParser.php b/src/parser/PhutilBugtraqParser.php
--- a/src/parser/PhutilBugtraqParser.php
+++ b/src/parser/PhutilBugtraqParser.php
@@ -23,7 +23,7 @@
* Issues: http://bugs.com/123, http://bugs.com/345
*
*/
-final class PhutilBugtraqParser {
+final class PhutilBugtraqParser extends Phobject {
private $bugtraqPattern;
private $bugtraqCaptureExpression;
diff --git a/src/parser/PhutilDocblockParser.php b/src/parser/PhutilDocblockParser.php
--- a/src/parser/PhutilDocblockParser.php
+++ b/src/parser/PhutilDocblockParser.php
@@ -4,7 +4,7 @@
* Parse a docblock comment from source code into raw text documentation and
* metadata (like "@author" and "@return").
*/
-final class PhutilDocblockParser {
+final class PhutilDocblockParser extends Phobject {
public function extractDocblocks($text) {
$blocks = array();
diff --git a/src/parser/PhutilEditorConfig.php b/src/parser/PhutilEditorConfig.php
--- a/src/parser/PhutilEditorConfig.php
+++ b/src/parser/PhutilEditorConfig.php
@@ -3,7 +3,7 @@
/**
* Parser for [[http://editorconfig.org/ | EditorConfig]] files.
*/
-final class PhutilEditorConfig {
+final class PhutilEditorConfig extends Phobject {
const CHARSET = 'charset';
const END_OF_LINE = 'end_of_line';
diff --git a/src/parser/PhutilEmailAddress.php b/src/parser/PhutilEmailAddress.php
--- a/src/parser/PhutilEmailAddress.php
+++ b/src/parser/PhutilEmailAddress.php
@@ -6,7 +6,7 @@
* it should parse all reasonable addresses which are actually in use on the
* internet today.
*/
-final class PhutilEmailAddress {
+final class PhutilEmailAddress extends Phobject {
private $displayName;
private $localPart;
diff --git a/src/parser/PhutilGitURI.php b/src/parser/PhutilGitURI.php
--- a/src/parser/PhutilGitURI.php
+++ b/src/parser/PhutilGitURI.php
@@ -14,7 +14,7 @@
* path is interpreted as relative on the remote, rather than absolute (as with
* normal URIs).
*/
-final class PhutilGitURI {
+final class PhutilGitURI extends Phobject {
private $user;
private $domain;
diff --git a/src/parser/PhutilJSON.php b/src/parser/PhutilJSON.php
--- a/src/parser/PhutilJSON.php
+++ b/src/parser/PhutilJSON.php
@@ -6,7 +6,7 @@
* @task pretty Formatting JSON Objects
* @task internal Internals
*/
-final class PhutilJSON {
+final class PhutilJSON extends Phobject {
/* -( Formatting JSON Objects )-------------------------------------------- */
diff --git a/src/parser/PhutilJSONParser.php b/src/parser/PhutilJSONParser.php
--- a/src/parser/PhutilJSONParser.php
+++ b/src/parser/PhutilJSONParser.php
@@ -6,7 +6,7 @@
* @phutil-external-symbol class JsonLintJsonParser
* @phutil-external-symbol class JsonLintParsingException
*/
-final class PhutilJSONParser {
+final class PhutilJSONParser extends Phobject {
private $allowDuplicateKeys = false;
diff --git a/src/parser/PhutilLanguageGuesser.php b/src/parser/PhutilLanguageGuesser.php
--- a/src/parser/PhutilLanguageGuesser.php
+++ b/src/parser/PhutilLanguageGuesser.php
@@ -4,7 +4,7 @@
* Very simple class to guess the languages of source files which we failed to
* determine by examining file name/extension rules.
*/
-final class PhutilLanguageGuesser {
+final class PhutilLanguageGuesser extends Phobject {
/**
* Guess which computer programming language a file is written in.
diff --git a/src/parser/PhutilParserGenerator.php b/src/parser/PhutilParserGenerator.php
--- a/src/parser/PhutilParserGenerator.php
+++ b/src/parser/PhutilParserGenerator.php
@@ -52,7 +52,7 @@
* @task tables Computing Action and Goto Tables
* @task inspect Inspecting Generator State
*/
-final class PhutilParserGenerator {
+final class PhutilParserGenerator extends Phobject {
private $terminals;
private $rules;
diff --git a/src/parser/PhutilQueryStringParser.php b/src/parser/PhutilQueryStringParser.php
--- a/src/parser/PhutilQueryStringParser.php
+++ b/src/parser/PhutilQueryStringParser.php
@@ -24,7 +24,7 @@
* we'd like to be able to parse all valid query strings without destroying any
* data, this class implements a less-encumbered parser.
*/
-final class PhutilQueryStringParser {
+final class PhutilQueryStringParser extends Phobject {
/**
diff --git a/src/parser/PhutilSimpleOptions.php b/src/parser/PhutilSimpleOptions.php
--- a/src/parser/PhutilSimpleOptions.php
+++ b/src/parser/PhutilSimpleOptions.php
@@ -11,7 +11,7 @@
* @task config Parser Configuration
* @task internal Internals
*/
-final class PhutilSimpleOptions {
+final class PhutilSimpleOptions extends Phobject {
private $caseSensitive;
diff --git a/src/parser/PhutilTypeSpec.php b/src/parser/PhutilTypeSpec.php
--- a/src/parser/PhutilTypeSpec.php
+++ b/src/parser/PhutilTypeSpec.php
@@ -39,7 +39,7 @@
* string (uppercase)
*
*/
-final class PhutilTypeSpec {
+final class PhutilTypeSpec extends Phobject {
private $type;
private $subtypes = array();
diff --git a/src/parser/PhutilURI.php b/src/parser/PhutilURI.php
--- a/src/parser/PhutilURI.php
+++ b/src/parser/PhutilURI.php
@@ -3,7 +3,7 @@
/**
* Basic URI parser object.
*/
-final class PhutilURI {
+final class PhutilURI extends Phobject {
private $protocol;
private $user;
diff --git a/src/parser/aast/api/AASTNode.php b/src/parser/aast/api/AASTNode.php
--- a/src/parser/aast/api/AASTNode.php
+++ b/src/parser/aast/api/AASTNode.php
@@ -1,11 +1,12 @@
<?php
-abstract class AASTNode {
+abstract class AASTNode extends Phobject {
protected $id;
protected $l;
protected $r;
protected $typeID;
+ protected $typeName;
protected $tree;
// These are public only as a microoptimization to make tree construction
@@ -13,6 +14,8 @@
public $children = array();
public $parentNode;
+ private $selectCache;
+
abstract public function isStaticScalar();
abstract public function getDocblockToken();
abstract public function evalStatic();
diff --git a/src/parser/aast/api/AASTNodeList.php b/src/parser/aast/api/AASTNodeList.php
--- a/src/parser/aast/api/AASTNodeList.php
+++ b/src/parser/aast/api/AASTNodeList.php
@@ -1,6 +1,8 @@
<?php
-final class AASTNodeList implements Countable, Iterator {
+final class AASTNodeList
+ extends Phobject
+ implements Countable, Iterator {
protected $list;
protected $tree;
diff --git a/src/parser/aast/api/AASTToken.php b/src/parser/aast/api/AASTToken.php
--- a/src/parser/aast/api/AASTToken.php
+++ b/src/parser/aast/api/AASTToken.php
@@ -1,6 +1,6 @@
<?php
-abstract class AASTToken {
+abstract class AASTToken extends Phobject {
protected $id;
protected $typeID;
diff --git a/src/parser/aast/api/AASTTree.php b/src/parser/aast/api/AASTTree.php
--- a/src/parser/aast/api/AASTTree.php
+++ b/src/parser/aast/api/AASTTree.php
@@ -3,7 +3,7 @@
/**
* An abstract abstract syntax tree.
*/
-abstract class AASTTree {
+abstract class AASTTree extends Phobject {
protected $tree = array();
protected $stream = array();
diff --git a/src/parser/argument/PhutilArgumentParser.php b/src/parser/argument/PhutilArgumentParser.php
--- a/src/parser/argument/PhutilArgumentParser.php
+++ b/src/parser/argument/PhutilArgumentParser.php
@@ -66,7 +66,7 @@
* @task help Command Help
* @task internal Internals
*/
-final class PhutilArgumentParser {
+final class PhutilArgumentParser extends Phobject {
private $bin;
private $argv;
diff --git a/src/parser/argument/PhutilArgumentSpecification.php b/src/parser/argument/PhutilArgumentSpecification.php
--- a/src/parser/argument/PhutilArgumentSpecification.php
+++ b/src/parser/argument/PhutilArgumentSpecification.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilArgumentSpecification {
+final class PhutilArgumentSpecification extends Phobject {
private $name;
private $help;
diff --git a/src/parser/argument/workflow/PhutilArgumentWorkflow.php b/src/parser/argument/workflow/PhutilArgumentWorkflow.php
--- a/src/parser/argument/workflow/PhutilArgumentWorkflow.php
+++ b/src/parser/argument/workflow/PhutilArgumentWorkflow.php
@@ -73,7 +73,7 @@
*
* @concrete-extensible
*/
-class PhutilArgumentWorkflow {
+class PhutilArgumentWorkflow extends Phobject {
private $name;
private $synopsis;
diff --git a/src/parser/xhpast/bin/PhutilXHPASTBinary.php b/src/parser/xhpast/bin/PhutilXHPASTBinary.php
--- a/src/parser/xhpast/bin/PhutilXHPASTBinary.php
+++ b/src/parser/xhpast/bin/PhutilXHPASTBinary.php
@@ -1,6 +1,6 @@
<?php
-final class PhutilXHPASTBinary {
+final class PhutilXHPASTBinary extends Phobject {
/**
* The expected XHPAST version.
diff --git a/src/phage/agent/PhagePHPAgent.php b/src/phage/agent/PhagePHPAgent.php
--- a/src/phage/agent/PhagePHPAgent.php
+++ b/src/phage/agent/PhagePHPAgent.php
@@ -1,6 +1,6 @@
<?php
-final class PhagePHPAgent {
+final class PhagePHPAgent extends Phobject {
private $stdin;
private $master;
diff --git a/src/phage/bootloader/PhageAgentBootloader.php b/src/phage/bootloader/PhageAgentBootloader.php
--- a/src/phage/bootloader/PhageAgentBootloader.php
+++ b/src/phage/bootloader/PhageAgentBootloader.php
@@ -1,6 +1,6 @@
<?php
-abstract class PhageAgentBootloader {
+abstract class PhageAgentBootloader extends Phobject {
abstract public function getName();
abstract public function getBootCommand();
diff --git a/src/phage/util/PhutilBallOfPHP.php b/src/phage/util/PhutilBallOfPHP.php
--- a/src/phage/util/PhutilBallOfPHP.php
+++ b/src/phage/util/PhutilBallOfPHP.php
@@ -4,7 +4,7 @@
* Concatenates PHP files together into a single stream. Used by Phage to
* transmit bootloading code.
*/
-final class PhutilBallOfPHP {
+final class PhutilBallOfPHP extends Phobject {
private $parts = array();
diff --git a/src/readableserializer/PhutilReadableSerializer.php b/src/readableserializer/PhutilReadableSerializer.php
--- a/src/readableserializer/PhutilReadableSerializer.php
+++ b/src/readableserializer/PhutilReadableSerializer.php
@@ -7,7 +7,7 @@
* @task print Printing PHP Values
* @task internal Internals
*/
-final class PhutilReadableSerializer {
+final class PhutilReadableSerializer extends Phobject {
/* -( Printing PHP Values )------------------------------------------------ */
diff --git a/src/serviceprofiler/PhutilServiceProfiler.php b/src/serviceprofiler/PhutilServiceProfiler.php
--- a/src/serviceprofiler/PhutilServiceProfiler.php
+++ b/src/serviceprofiler/PhutilServiceProfiler.php
@@ -4,7 +4,7 @@
* Simple event store for service calls, so they can be printed to stdout or
* displayed in a debug console.
*/
-final class PhutilServiceProfiler {
+final class PhutilServiceProfiler extends Phobject {
private static $instance;
private $listeners = array();
diff --git a/src/sprites/PhutilSprite.php b/src/sprites/PhutilSprite.php
--- a/src/sprites/PhutilSprite.php
+++ b/src/sprites/PhutilSprite.php
@@ -3,7 +3,7 @@
/**
* NOTE: This is very new and unstable.
*/
-final class PhutilSprite {
+final class PhutilSprite extends Phobject {
private $sourceFiles = array();
private $sourceX;
diff --git a/src/sprites/PhutilSpriteSheet.php b/src/sprites/PhutilSpriteSheet.php
--- a/src/sprites/PhutilSpriteSheet.php
+++ b/src/sprites/PhutilSpriteSheet.php
@@ -3,7 +3,7 @@
/**
* NOTE: This is very new and unstable.
*/
-final class PhutilSpriteSheet {
+final class PhutilSpriteSheet extends Phobject {
const MANIFEST_VERSION = 1;
diff --git a/src/utils/AbstractDirectedGraph.php b/src/utils/AbstractDirectedGraph.php
--- a/src/utils/AbstractDirectedGraph.php
+++ b/src/utils/AbstractDirectedGraph.php
@@ -28,7 +28,7 @@
* @task cycle Cycle Detection
* @task explore Graph Exploration
*/
-abstract class AbstractDirectedGraph {
+abstract class AbstractDirectedGraph extends Phobject {
private $knownNodes = array();
diff --git a/src/utils/PhutilBufferedIterator.php b/src/utils/PhutilBufferedIterator.php
--- a/src/utils/PhutilBufferedIterator.php
+++ b/src/utils/PhutilBufferedIterator.php
@@ -12,7 +12,7 @@
* @task config Configuration
* @task iterator Iterator Implementation
*/
-abstract class PhutilBufferedIterator implements Iterator {
+abstract class PhutilBufferedIterator extends Phobject implements Iterator {
private $data;
private $pageSize = 100;
diff --git a/src/utils/PhutilChunkedIterator.php b/src/utils/PhutilChunkedIterator.php
--- a/src/utils/PhutilChunkedIterator.php
+++ b/src/utils/PhutilChunkedIterator.php
@@ -1,9 +1,10 @@
<?php
/**
- * This is an iterator version of array_chunk().
+ * This is an iterator version of `array_chunk()`.
*/
-final class PhutilChunkedIterator implements Iterator {
+final class PhutilChunkedIterator extends Phobject implements Iterator {
+
private $iterator;
private $size;
diff --git a/src/utils/PhutilEditDistanceMatrix.php b/src/utils/PhutilEditDistanceMatrix.php
--- a/src/utils/PhutilEditDistanceMatrix.php
+++ b/src/utils/PhutilEditDistanceMatrix.php
@@ -45,7 +45,7 @@
* delete = 1, replace = 1) and computing edit distances for strings of fewer
* than 1,000 characters, you might set the alter cost to 0.001.
*/
-final class PhutilEditDistanceMatrix {
+final class PhutilEditDistanceMatrix extends Phobject {
private $insertCost = 1;
private $deleteCost = 1;
diff --git a/src/utils/PhutilExecutionEnvironment.php b/src/utils/PhutilExecutionEnvironment.php
--- a/src/utils/PhutilExecutionEnvironment.php
+++ b/src/utils/PhutilExecutionEnvironment.php
@@ -3,7 +3,7 @@
/**
* Get information about the current execution environment.
*/
-final class PhutilExecutionEnvironment {
+final class PhutilExecutionEnvironment extends Phobject {
public static function getOSXVersion() {
if (php_uname('s') != 'Darwin') {
diff --git a/src/utils/PhutilLunarPhase.php b/src/utils/PhutilLunarPhase.php
--- a/src/utils/PhutilLunarPhase.php
+++ b/src/utils/PhutilLunarPhase.php
@@ -6,7 +6,7 @@
* $moon = new PhutilLunarPhase(time());
* $moon->isFull();
*/
-final class PhutilLunarPhase {
+final class PhutilLunarPhase extends Phobject {
private $epoch;
diff --git a/src/utils/__tests__/MFilterTestHelper.php b/src/utils/__tests__/MFilterTestHelper.php
--- a/src/utils/__tests__/MFilterTestHelper.php
+++ b/src/utils/__tests__/MFilterTestHelper.php
@@ -1,6 +1,6 @@
<?php
-final class MFilterTestHelper {
+final class MFilterTestHelper extends Phobject {
private $h;
private $i;

File Metadata

Mime Type
text/plain
Expires
Thu, Dec 19, 12:57 AM (17 h, 55 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6905275
Default Alt Text
D13280.diff (53 KB)

Event Timeline