Skip to content

Commit 3b9c486

Browse files
committed
[BC BREAK] Refactor SourceTransformer return constants into Enum
1 parent f2a7b2c commit 3b9c486

9 files changed

+62
-59
lines changed

src/Instrument/ClassLoading/SourceTransformingLoader.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use Go\Instrument\Transformer\SourceTransformer;
1616
use Go\Instrument\Transformer\StreamMetaData;
17+
use Go\Instrument\Transformer\TransformerResultEnum;
1718
use php_user_filter as PhpStreamFilter;
1819
use RuntimeException;
1920

@@ -123,7 +124,7 @@ public static function transformCode(StreamMetaData $metadata): void
123124
{
124125
foreach (self::$transformers as $transformer) {
125126
$result = $transformer->transform($metadata);
126-
if ($result === SourceTransformer::RESULT_ABORTED) {
127+
if ($result === TransformerResultEnum::RESULT_ABORTED) {
127128
break;
128129
}
129130
}

src/Instrument/Transformer/CachingTransformer.php

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,15 @@ public function __construct(AspectKernel $kernel, $transformers, CachePathManage
5555

5656
/**
5757
* This method may transform the supplied source and return a new replacement for it
58-
*
59-
* @return string See RESULT_XXX constants in the interface
6058
*/
61-
public function transform(StreamMetaData $metadata): string
59+
public function transform(StreamMetaData $metadata): TransformerResultEnum
6260
{
6361
$originalUri = $metadata->uri;
64-
$processingResult = self::RESULT_ABSTAIN;
62+
$processingResult = TransformerResultEnum::RESULT_ABSTAIN;
6563
$cacheUri = $this->cacheManager->getCachePathForResource($originalUri);
6664
// Guard to disable overwriting of original files
6765
if ($cacheUri === $originalUri) {
68-
return self::RESULT_ABORTED;
66+
return TransformerResultEnum::RESULT_ABORTED;
6967
}
7068

7169
$lastModified = filemtime($originalUri);
@@ -77,7 +75,7 @@ public function transform(StreamMetaData $metadata): string
7775
|| !$this->container->hasAnyResourceChangedSince($cacheModified)
7876
) {
7977
$processingResult = $this->processTransformers($metadata);
80-
if ($processingResult === self::RESULT_TRANSFORMED) {
78+
if ($processingResult === TransformerResultEnum::RESULT_TRANSFORMED) {
8179
$parentCacheDir = dirname($cacheUri);
8280
if (!is_dir($parentCacheDir)) {
8381
mkdir($parentCacheDir, $this->cacheFileMode, true);
@@ -90,17 +88,17 @@ public function transform(StreamMetaData $metadata): string
9088
$originalUri,
9189
[
9290
'filemtime' => $_SERVER['REQUEST_TIME'] ?? time(),
93-
'cacheUri' => ($processingResult === self::RESULT_TRANSFORMED) ? $cacheUri : null
91+
'cacheUri' => ($processingResult === TransformerResultEnum::RESULT_TRANSFORMED) ? $cacheUri : null
9492
]
9593
);
9694

9795
return $processingResult;
9896
}
9997

10098
if ($cacheState) {
101-
$processingResult = isset($cacheState['cacheUri']) ? self::RESULT_TRANSFORMED : self::RESULT_ABORTED;
99+
$processingResult = isset($cacheState['cacheUri']) ? TransformerResultEnum::RESULT_TRANSFORMED : TransformerResultEnum::RESULT_ABORTED;
102100
}
103-
if ($processingResult === self::RESULT_TRANSFORMED) {
101+
if ($processingResult === TransformerResultEnum::RESULT_TRANSFORMED) {
104102
// Just replace all tokens in the stream
105103
ReflectionEngine::parseFile($cacheUri);
106104
$metadata->setTokenStreamFromRawTokens(
@@ -113,24 +111,22 @@ public function transform(StreamMetaData $metadata): string
113111

114112
/**
115113
* Iterates over transformers
116-
*
117-
* @return string See RESULT_XXX constants in the interface
118114
*/
119-
private function processTransformers(StreamMetaData $metadata): string
115+
private function processTransformers(StreamMetaData $metadata): TransformerResultEnum
120116
{
121-
$overallResult = self::RESULT_ABSTAIN;
117+
$overallResult = TransformerResultEnum::RESULT_ABSTAIN;
122118
if ($this->transformers instanceof Closure) {
123119
$delayedTransformers = $this->transformers;
124120
$this->transformers = $delayedTransformers();
125121
}
126122
foreach ($this->transformers as $transformer) {
127123
$transformationResult = $transformer->transform($metadata);
128-
if ($overallResult === self::RESULT_ABSTAIN && $transformationResult === self::RESULT_TRANSFORMED) {
129-
$overallResult = self::RESULT_TRANSFORMED;
124+
if ($overallResult === TransformerResultEnum::RESULT_ABSTAIN && $transformationResult === TransformerResultEnum::RESULT_TRANSFORMED) {
125+
$overallResult = TransformerResultEnum::RESULT_TRANSFORMED;
130126
}
131127
// transformer reported about termination, next transformers will be skipped
132-
if ($transformationResult === self::RESULT_ABORTED) {
133-
$overallResult = self::RESULT_ABORTED;
128+
if ($transformationResult === TransformerResultEnum::RESULT_ABORTED) {
129+
$overallResult = TransformerResultEnum::RESULT_ABORTED;
134130
break;
135131
}
136132
}

src/Instrument/Transformer/ConstructorExecutionTransformer.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,8 @@ public static function getInstance(): self
5050

5151
/**
5252
* Rewrites all "new" expressions with our implementation
53-
*
54-
* @return string See RESULT_XXX constants in the interface
5553
*/
56-
public function transform(StreamMetaData $metadata): string
54+
public function transform(StreamMetaData $metadata): TransformerResultEnum
5755
{
5856
$newExpressionFinder = new FindingVisitor(fn(Node $node) => $node instanceof New_);
5957

@@ -66,7 +64,7 @@ public function transform(StreamMetaData $metadata): string
6664
$newExpressions = $newExpressionFinder->getFoundNodes();
6765

6866
if (empty($newExpressions)) {
69-
return self::RESULT_ABSTAIN;
67+
return TransformerResultEnum::RESULT_ABSTAIN;
7068
}
7169

7270
foreach ($newExpressions as $newExpressionNode) {
@@ -82,7 +80,7 @@ public function transform(StreamMetaData $metadata): string
8280
$metadata->tokenStream[$endClassNamePos]->text .= $expressionSuffix;
8381
}
8482

85-
return self::RESULT_TRANSFORMED;
83+
return TransformerResultEnum::RESULT_TRANSFORMED;
8684
}
8785

8886
/**

src/Instrument/Transformer/FilterInjectorTransformer.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,8 @@ public static function rewrite(string $originalResource, string $originalDir = '
101101

102102
/**
103103
* Wrap all includes into rewrite filter
104-
*
105-
* @return string See RESULT_XXX constants in the interface
106104
*/
107-
public function transform(StreamMetaData $metadata): string
105+
public function transform(StreamMetaData $metadata): TransformerResultEnum
108106
{
109107
$includeExpressionFinder = new FindingVisitor(fn(Node $node) => $node instanceof Include_);
110108

@@ -117,7 +115,7 @@ public function transform(StreamMetaData $metadata): string
117115
$includeExpressions = $includeExpressionFinder->getFoundNodes();
118116

119117
if (empty($includeExpressions)) {
120-
return self::RESULT_ABSTAIN;
118+
return TransformerResultEnum::RESULT_ABSTAIN;
121119
}
122120

123121
foreach ($includeExpressions as $includeExpression) {
@@ -132,6 +130,6 @@ public function transform(StreamMetaData $metadata): string
132130
$metadata->tokenStream[$endPosition]->text .= ', __DIR__)';
133131
}
134132

135-
return self::RESULT_TRANSFORMED;
133+
return TransformerResultEnum::RESULT_TRANSFORMED;
136134
}
137135
}

src/Instrument/Transformer/MagicConstantTransformer.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,14 @@ public function __construct(AspectKernel $kernel)
5151

5252
/**
5353
* This method may transform the supplied source and return a new replacement for it
54-
*
55-
* @return string See RESULT_XXX constants in the interface
5654
*/
57-
public function transform(StreamMetaData $metadata): string
55+
public function transform(StreamMetaData $metadata): TransformerResultEnum
5856
{
5957
$this->replaceMagicDirFileConstants($metadata);
6058
$this->wrapReflectionGetFileName($metadata);
6159

6260
// We should always vote abstain, because if there is only changes for magic constants, we can drop them
63-
return self::RESULT_ABSTAIN;
61+
return TransformerResultEnum::RESULT_ABSTAIN;
6462
}
6563

6664
/**

src/Instrument/Transformer/SelfValueTransformer.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ class SelfValueTransformer extends BaseSourceTransformer
2222
{
2323
/**
2424
* This method may transform the supplied source and return a new replacement for it
25-
*
26-
* @return string See RESULT_XXX constants in the interface
2725
*/
28-
public function transform(StreamMetaData $metadata): string
26+
public function transform(StreamMetaData $metadata): TransformerResultEnum
2927
{
3028
$selfValueVisitor = new SelfValueVisitor();
3129
$traverser = new NodeTraverser();
@@ -35,7 +33,7 @@ public function transform(StreamMetaData $metadata): string
3533
$this->adjustSelfTokens($metadata, $selfValueVisitor->getReplacedNodes());
3634

3735
// We should always vote abstain, because if there are only changes for self we can drop them
38-
return self::RESULT_ABSTAIN;
36+
return TransformerResultEnum::RESULT_ABSTAIN;
3937
}
4038

4139
/**

src/Instrument/Transformer/SourceTransformer.php

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,8 @@
1717
*/
1818
interface SourceTransformer
1919
{
20-
/**
21-
* Transformer decided to stop whole transformation process, all changes should be reverted
22-
*/
23-
public const RESULT_ABORTED = 'aborted';
24-
25-
/**
26-
* Transformer voted to abstain transformation, need to process following transformers to get result
27-
*/
28-
public const RESULT_ABSTAIN = 'abstain';
29-
30-
/**
31-
* Source code was transformed, can process next transformers if needed
32-
*/
33-
public const RESULT_TRANSFORMED = 'transformed';
34-
3520
/**
3621
* This method may transform the supplied source and return a new replacement for it
37-
*
38-
* @return string See RESULT_XXX constants in the interface
3922
*/
40-
public function transform(StreamMetaData $metadata): string;
23+
public function transform(StreamMetaData $metadata): TransformerResultEnum;
4124
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types = 1);
4+
/*
5+
* Go! AOP framework
6+
*
7+
* @copyright Copyright 2025, Lisachenko Alexander <[email protected]>
8+
*
9+
* This source file is subject to the license that is bundled
10+
* with this source code in the file LICENSE.
11+
*/
12+
13+
namespace Go\Instrument\Transformer;
14+
15+
/**
16+
* Transformer result determines the status of applied transformation
17+
*/
18+
enum TransformerResultEnum: string
19+
{
20+
/**
21+
* Transformer decided to stop whole transformation process, all changes should be reverted
22+
*/
23+
case RESULT_ABORTED = 'aborted';
24+
25+
/**
26+
* Transformer voted to abstain transformation, need to process following transformers to get result
27+
*/
28+
case RESULT_ABSTAIN = 'abstain';
29+
30+
/**
31+
* Source code was transformed, can process next transformers if needed
32+
*/
33+
case RESULT_TRANSFORMED = 'transformed';
34+
}

src/Instrument/Transformer/WeavingTransformer.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,8 @@ public function __construct(
7474

7575
/**
7676
* This method may transform the supplied source and return a new replacement for it
77-
*
78-
* @param StreamMetaData $metadata
79-
* @return string See RESULT_XXX constants in the interface
8077
*/
81-
public function transform(StreamMetaData $metadata): string
78+
public function transform(StreamMetaData $metadata): TransformerResultEnum
8279
{
8380
$totalTransformations = 0;
8481
$parsedSource = new ReflectionFile($metadata->uri, $metadata->syntaxTree);
@@ -111,7 +108,7 @@ public function transform(StreamMetaData $metadata): string
111108
$totalTransformations += (integer) $wasFunctionsProcessed;
112109
}
113110

114-
$result = ($totalTransformations > 0) ? self::RESULT_TRANSFORMED : self::RESULT_ABSTAIN;
111+
$result = ($totalTransformations > 0) ? TransformerResultEnum::RESULT_TRANSFORMED : TransformerResultEnum::RESULT_ABSTAIN;
115112

116113
return $result;
117114
}

0 commit comments

Comments
 (0)