Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Fastjson
Commits
f3734e15
Commit
f3734e15
authored
10 years ago
by
wenshao
Browse files
Options
Download
Email Patches
Plain Diff
refactor
parent
bf0772a1
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/main/java/com/alibaba/fastjson/JSON.java
+8
-38
src/main/java/com/alibaba/fastjson/JSON.java
src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java
+30
-0
...n/java/com/alibaba/fastjson/parser/DefaultJSONParser.java
with
38 additions
and
38 deletions
+38
-38
src/main/java/com/alibaba/fastjson/JSON.java
+
8
-
38
View file @
f3734e15
...
...
@@ -29,14 +29,12 @@ import java.util.List;
import
java.util.Map
;
import
com.alibaba.fastjson.parser.DefaultJSONParser
;
import
com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask
;
import
com.alibaba.fastjson.parser.Feature
;
import
com.alibaba.fastjson.parser.JSONLexer
;
import
com.alibaba.fastjson.parser.JSONToken
;
import
com.alibaba.fastjson.parser.ParserConfig
;
import
com.alibaba.fastjson.parser.deserializer.ExtraProcessor
;
import
com.alibaba.fastjson.parser.deserializer.ExtraTypeProvider
;
import
com.alibaba.fastjson.parser.deserializer.FieldDeserializer
;
import
com.alibaba.fastjson.parser.deserializer.ParseProcess
;
import
com.alibaba.fastjson.serializer.AfterFilter
;
import
com.alibaba.fastjson.serializer.BeforeFilter
;
...
...
@@ -106,7 +104,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
DefaultJSONParser
parser
=
new
DefaultJSONParser
(
text
,
ParserConfig
.
getGlobalInstance
(),
features
);
Object
value
=
parser
.
parse
();
handleResovleTask
(
parser
,
value
);
parser
.
handleResovleTask
(
value
);
parser
.
close
();
...
...
@@ -145,7 +143,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
DefaultJSONParser
parser
=
new
DefaultJSONParser
(
chars
,
position
,
ParserConfig
.
getGlobalInstance
(),
features
);
Object
value
=
parser
.
parse
();
handleResovleTask
(
parser
,
value
);
parser
.
handleResovleTask
(
value
);
parser
.
close
();
...
...
@@ -213,7 +211,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
DefaultJSONParser
parser
=
new
DefaultJSONParser
(
input
,
ParserConfig
.
getGlobalInstance
(),
featureValues
);
T
value
=
(
T
)
parser
.
parseObject
(
clazz
);
handleResovleTask
(
parser
,
value
);
parser
.
handleResovleTask
(
value
);
parser
.
close
();
...
...
@@ -248,42 +246,14 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
T
value
=
(
T
)
parser
.
parseObject
(
clazz
);
handleResovleTask
(
parser
,
value
);
parser
.
handleResovleTask
(
value
);
parser
.
close
();
return
(
T
)
value
;
}
public
static
void
handleResovleTask
(
DefaultJSONParser
parser
,
Object
value
)
{
List
<
ResolveTask
>
resolveTaskList
=
parser
.
getResolveTaskListDirect
();
if
(
resolveTaskList
==
null
)
{
return
;
}
int
size
=
resolveTaskList
.
size
();
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
ResolveTask
task
=
resolveTaskList
.
get
(
i
);
FieldDeserializer
fieldDeser
=
task
.
getFieldDeserializer
();
if
(
fieldDeser
==
null
)
{
continue
;
}
Object
object
=
null
;
if
(
task
.
getOwnerContext
()
!=
null
)
{
object
=
task
.
getOwnerContext
().
getObject
();
}
String
ref
=
task
.
getReferenceValue
();
Object
refValue
;
if
(
ref
.
startsWith
(
"$"
))
{
refValue
=
parser
.
getObject
(
ref
);
}
else
{
refValue
=
task
.
getContext
().
getObject
();
}
fieldDeser
.
setValue
(
object
,
refValue
);
}
}
@SuppressWarnings
(
"unchecked"
)
public
static
final
<
T
>
T
parseObject
(
byte
[]
input
,
Type
clazz
,
Feature
...
features
)
{
...
...
@@ -321,7 +291,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
DefaultJSONParser
parser
=
new
DefaultJSONParser
(
input
,
length
,
ParserConfig
.
getGlobalInstance
(),
featureValues
);
T
value
=
(
T
)
parser
.
parseObject
(
clazz
);
handleResovleTask
(
parser
,
value
);
parser
.
handleResovleTask
(
value
);
parser
.
close
();
...
...
@@ -351,7 +321,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
array
=
new
JSONArray
();
parser
.
parseArray
(
array
);
handleResovleTask
(
parser
,
array
);
parser
.
handleResovleTask
(
array
);
}
parser
.
close
();
...
...
@@ -375,7 +345,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
list
=
new
ArrayList
<
T
>();
parser
.
parseArray
(
clazz
,
list
);
handleResovleTask
(
parser
,
list
);
parser
.
handleResovleTask
(
list
);
}
parser
.
close
();
...
...
@@ -398,7 +368,7 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
list
=
Arrays
.
asList
(
objectArray
);
}
handleResovleTask
(
parser
,
list
);
parser
.
handleResovleTask
(
list
);
parser
.
close
();
...
...
This diff is collapsed.
Click to expand it.
src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java
+
30
-
0
View file @
f3734e15
...
...
@@ -1294,6 +1294,36 @@ public class DefaultJSONParser extends AbstractJSONParser implements Closeable {
lexer
.
close
();
}
}
public
void
handleResovleTask
(
Object
value
)
{
if
(
resolveTaskList
==
null
)
{
return
;
}
int
size
=
resolveTaskList
.
size
();
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
ResolveTask
task
=
resolveTaskList
.
get
(
i
);
FieldDeserializer
fieldDeser
=
task
.
getFieldDeserializer
();
if
(
fieldDeser
==
null
)
{
continue
;
}
Object
object
=
null
;
if
(
task
.
getOwnerContext
()
!=
null
)
{
object
=
task
.
getOwnerContext
().
getObject
();
}
String
ref
=
task
.
getReferenceValue
();
Object
refValue
;
if
(
ref
.
startsWith
(
"$"
))
{
refValue
=
getObject
(
ref
);
}
else
{
refValue
=
task
.
getContext
().
getObject
();
}
fieldDeser
.
setValue
(
object
,
refValue
);
}
}
public
static
class
ResolveTask
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help