FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
hack-codegen/src/CodegenTrait.php at master · hostintruder/hack-codegen · GitHub
hostintruder
/
hack-codegen
Public
forked from
hhvm/hack-codegen
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
hack-codegen
/
src
/
CodegenTrait.php
Copy path
More file actions
More file actions
Latest commit
History
History
History
69 lines (60 loc) · 2.02 KB
Breadcrumbs
hack-codegen
/
src
/
CodegenTrait.php
Copy path
File metadata and controls
69 lines (60 loc) · 2.02 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<
?
hh
//
strict
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
namespace
Facebook\HackCodegen
;
/**
* Generate code for a trait. Please don't use this class directly; instead use
* the function codegen_trait. E.g.:
*
* codegen_trait('Foo')
* ->addMethod(codegen_method('foobar'))
* ->render();
*
*/
final
class
CodegenTrait
extends
CodegenClassBase
{
use
CodegenClassWithInterfaces
;
private
Vector
<
string
>
$requireClass
=
Vector
{};
private
Vector
<
string
>
$requireInterface
=
Vector
{};
public
function
addRequireClass
(
string
$class
):
this
{
$this
->
requireClass
[]
=
$class
;
return
$this
;
}
public
function
addRequireInterface
(
string
$interface
):
this
{
$this
->
requireInterface
[]
=
$interface
;
return
$this
;
}
protected
function
buildDeclaration
(
HackBuilder
$builder
):
void
{
$generics_dec
=
$this
->
buildGenericsDeclaration();
$builder
->
add(
'
trait
'
.
$this
->
name
.
$generics_dec
);
$this
->
renderInterfaceList(
$builder
,
'
implements
'
);
}
private
function
buildRequires
(
HackBuilder
$builder
):
void
{
if
(
$this
->
requireClass
->
isEmpty()
&&
$this
->
requireInterface
->
isEmpty()) {
return
;
}
$builder
->
ensureEmptyLine();
foreach
(
$this
->
requireClass
as
$class
) {
$builder
->
addLine(
'
require extends %s;
'
,
$class
);
}
foreach
(
$this
->
requireInterface
as
$interface
) {
$builder
->
addLine(
'
require implements %s;
'
,
$interface
);
}
}
protected
function
appendBodyToBuilder
(
HackBuilder
$builder
):
void
{
$this
->
buildRequires(
$builder
);
$this
->
buildTraits(
$builder
);
$this
->
buildConsts(
$builder
);
$this
->
buildVars(
$builder
);
$this
->
buildManualDeclarations(
$builder
);
$this
->
buildMethods(
$builder
);
}
}
function
codegen_trait
(
string
$name
):
CodegenTrait
{
return
new
CodegenTrait
(
$name
);
}
Back
|
FazBrowse Home
|
New Git URL