Skip to content

Commit c5ec0f7

Browse files
1.1.0
1 parent e5098b9 commit c5ec0f7

File tree

5 files changed

+73
-58
lines changed

5 files changed

+73
-58
lines changed

pom.xml

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.github.developframework</groupId>
88
<artifactId>expression</artifactId>
9-
<version>1.0.2</version>
9+
<version>1.1.0</version>
1010

1111
<name>Expression Framework</name>
1212
<url>https://github.com/developframework/expression</url>
@@ -42,9 +42,11 @@
4242
</scm>
4343

4444
<properties>
45+
<maven.compiler.source>1.8</maven.compiler.source>
46+
<maven.compiler.target>1.8</maven.compiler.target>
47+
<maven.compiler.encoding>UTF8</maven.compiler.encoding>
4548
<version.common-lang3>3.7</version.common-lang3>
4649
<version.lombok>1.16.20</version.lombok>
47-
<version.slf4j>1.7.25</version.slf4j>
4850
</properties>
4951

5052
<dependencies>
@@ -57,30 +59,24 @@
5759
<groupId>org.projectlombok</groupId>
5860
<artifactId>lombok</artifactId>
5961
<version>${version.lombok}</version>
60-
</dependency>
61-
<dependency>
62-
<groupId>org.slf4j</groupId>
63-
<artifactId>slf4j-api</artifactId>
64-
<version>${version.slf4j}</version>
62+
<optional>true</optional>
6563
</dependency>
6664
</dependencies>
6765

6866
<build>
6967
<plugins>
7068
<plugin>
7169
<groupId>org.apache.maven.plugins</groupId>
72-
<artifactId>maven-compiler-plugin</artifactId>
73-
<version>3.1</version>
74-
<configuration>
75-
<source>1.8</source>
76-
<target>1.8</target>
77-
<encoding>UTF8</encoding>
78-
</configuration>
79-
</plugin>
80-
<plugin>
81-
<groupId>org.apache.maven.plugins</groupId>
82-
<artifactId>maven-release-plugin</artifactId>
83-
<version>2.3.2</version>
70+
<artifactId>maven-source-plugin</artifactId>
71+
<version>2.4</version>
72+
<executions>
73+
<execution>
74+
<id>attach-sources</id>
75+
<goals>
76+
<goal>jar-no-fork</goal>
77+
</goals>
78+
</execution>
79+
</executions>
8480
</plugin>
8581
</plugins>
8682
</build>
@@ -103,16 +99,8 @@
10399
<plugins>
104100
<plugin>
105101
<groupId>org.apache.maven.plugins</groupId>
106-
<artifactId>maven-source-plugin</artifactId>
107-
<version>2.4</version>
108-
<executions>
109-
<execution>
110-
<id>attach-sources</id>
111-
<goals>
112-
<goal>jar-no-fork</goal>
113-
</goals>
114-
</execution>
115-
</executions>
102+
<artifactId>maven-release-plugin</artifactId>
103+
<version>2.3.2</version>
116104
</plugin>
117105
<plugin>
118106
<groupId>org.apache.maven.plugins</groupId>

src/main/java/com/github/developframework/expression/ArrayExpression.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public boolean hasPropertyName() {
7878

7979
@Override
8080
public String toString() {
81-
if(parentExpression == null) {
81+
if(parentExpression == Expression.EMPTY_EXPRESSION) {
8282
return propertyName + "[" + index + "]";
8383
}
8484
return parentExpression + "." + propertyName + "[" + index + "]";
@@ -100,10 +100,7 @@ public boolean equals(Object obj) {
100100
if (obj instanceof ArrayExpression) {
101101
ArrayExpression otherExpression = (ArrayExpression) obj;
102102
if(propertyName.equals(otherExpression.getPropertyName()) && index == otherExpression.getIndex()) {
103-
if(this.hasParentExpression() && otherExpression.hasParentExpression()) {
104-
return parentExpression.equals(otherExpression.getParentExpression());
105-
}
106-
return !this.hasParentExpression() && !this.hasParentExpression();
103+
return parentExpression.equals(otherExpression.getParentExpression());
107104
}
108105
}
109106
return false;

src/main/java/com/github/developframework/expression/Expression.java

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.developframework.expression;
22

3+
import com.github.developframework.expression.exception.ExpressionException;
34
import lombok.Getter;
45
import lombok.Setter;
56
import org.apache.commons.lang3.StringUtils;
@@ -19,16 +20,22 @@ public abstract class Expression {
1920

2021
/* 父表达式对象 */
2122
@Getter
22-
@Setter
23-
protected Expression parentExpression;
23+
protected Expression parentExpression = EMPTY_EXPRESSION;
24+
25+
public void setParentExpression(Expression parentExpression) {
26+
if(parentExpression == null) {
27+
throw new ExpressionException("can't set null to parent expression.");
28+
}
29+
this.parentExpression = parentExpression;
30+
}
2431

2532
/**
2633
* 判断是否有父表达式
2734
*
2835
* @return 判断结果
2936
*/
3037
public boolean hasParentExpression() {
31-
return parentExpression != null;
38+
return parentExpression != EMPTY_EXPRESSION;
3239
}
3340

3441
/**
@@ -39,7 +46,7 @@ public boolean hasParentExpression() {
3946
public Expression[] expressionTree() {
4047
List<Expression> expressionTree = new LinkedList<>();
4148
Expression tempExpression = this;
42-
while (tempExpression != null) {
49+
while (tempExpression != Expression.EMPTY_EXPRESSION) {
4350
expressionTree.add(tempExpression);
4451
tempExpression = tempExpression.parentExpression;
4552
}
@@ -102,8 +109,10 @@ public static final Expression copy(Expression expression) {
102109
} else {
103110
newExpression = EMPTY_EXPRESSION;
104111
}
105-
if(expression.getParentExpression() != null) {
112+
if(expression.getParentExpression() != EMPTY_EXPRESSION) {
106113
newExpression.setParentExpression(copy(expression.getParentExpression()));
114+
} else {
115+
newExpression.setParentExpression(EMPTY_EXPRESSION);
107116
}
108117
return newExpression;
109118
}
@@ -116,11 +125,8 @@ public static final Expression copy(Expression expression) {
116125
* @return 新的表达式对象
117126
*/
118127
public static final Expression concat(Expression parentExpression, String childExpressionValue) {
119-
Expression newExpression = parse(childExpressionValue);
120-
if(parentExpression != EMPTY_EXPRESSION) {
121-
newExpression.setParentExpression(parentExpression);
122-
}
123-
return newExpression;
128+
Expression childExpression = parse(childExpressionValue);
129+
return concat(parentExpression, childExpression);
124130
}
125131

126132
/**
@@ -130,11 +136,20 @@ public static final Expression concat(Expression parentExpression, String childE
130136
* @return 新的表达式对象
131137
*/
132138
public static final Expression concat(Expression parentExpression, Expression childExpression) {
133-
Expression newExpression = copy(childExpression);
134-
if(parentExpression != EMPTY_EXPRESSION) {
135-
newExpression.setParentExpression(parentExpression);
139+
if(childExpression == EMPTY_EXPRESSION) {
140+
return parentExpression == EMPTY_EXPRESSION ? EMPTY_EXPRESSION : parentExpression;
141+
}
142+
if(parentExpression == EMPTY_EXPRESSION) {
143+
return childExpression;
144+
} else {
145+
Expression newExpression = copy(childExpression);
146+
if(newExpression.getParentExpression() == EMPTY_EXPRESSION) {
147+
newExpression.setParentExpression(parentExpression);
148+
} else {
149+
newExpression.getParentExpression().setParentExpression(parentExpression);
150+
}
151+
return newExpression;
136152
}
137-
return newExpression;
138153
}
139154

140155
}

src/main/java/com/github/developframework/expression/ExpressionUtils.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public static final Object getValue(Object instance, String expressionValue) {
3737
* @return
3838
*/
3939
public static final <T> T getValue(Object instance, String expressionValue, Class<T> targetClass) {
40-
return (T) getValue(instance, Expression.parse(expressionValue));
40+
return getValue(instance, Expression.parse(expressionValue), targetClass);
4141
}
4242

4343
/**
@@ -61,7 +61,7 @@ public static final <T> T getValue(Object instance, Expression expression, Class
6161
public static final Object getValue(Object instance, Expression expression) {
6262
Objects.requireNonNull(instance);
6363
if(expression == null) {
64-
return null;
64+
throw new ExpressionException("expression is null.");
6565
}
6666
if(expression == Expression.EMPTY_EXPRESSION) {
6767
return instance;
@@ -96,11 +96,9 @@ private static final Object getValueFromObjectOrMap(Object instance, String prop
9696
return ((Map) instance).get(propertyName);
9797
}
9898
try {
99-
Field field = clazz.getDeclaredField(propertyName);
99+
Field field = getDeclaredField(clazz, propertyName);
100100
field.setAccessible(true);
101101
return field.get(instance);
102-
} catch (NoSuchFieldException e) {
103-
throw new ExpressionException("No such field \"%s\" in class \"%s\".", propertyName, clazz.getName());
104102
} catch (IllegalAccessException e) {
105103
throw new ExpressionException("Illegal access field \"%s\" in class \"%s\".", propertyName, clazz.getName());
106104
}
@@ -130,4 +128,18 @@ private static final Object getValueFromArray(Object instance, ArrayExpression a
130128
throw new ExpressionException("The instance \"%s\" type is not array or List.", instance.toString());
131129
}
132130
}
131+
132+
private static Field getDeclaredField(final Class<?> clazz, String propertyName) {
133+
Class<?> temp = clazz;
134+
while(temp != Object.class) {
135+
try {
136+
Field field = temp.getDeclaredField(propertyName);
137+
field.setAccessible(true);
138+
return field;
139+
} catch (NoSuchFieldException e) {
140+
temp = temp.getSuperclass();
141+
}
142+
}
143+
throw new ExpressionException("No such field \"%s\" in class \"%s\".", propertyName, clazz.getName());
144+
}
133145
}

src/main/java/com/github/developframework/expression/ObjectExpression.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import lombok.Getter;
44

5+
import java.util.Objects;
6+
57
/**
68
* 对象表达式
79
* 示例: abc
@@ -15,12 +17,13 @@ public class ObjectExpression extends Expression {
1517
private String propertyName;
1618

1719
public ObjectExpression(String propertyName) {
20+
Objects.requireNonNull(propertyName);
1821
this.propertyName = propertyName;
1922
}
2023

2124
@Override
2225
public String toString() {
23-
if (parentExpression == null) {
26+
if (parentExpression == Expression.EMPTY_EXPRESSION) {
2427
return propertyName;
2528
}
2629
return parentExpression + "." + propertyName;
@@ -38,13 +41,13 @@ public int hashCode() {
3841

3942
@Override
4043
public boolean equals(Object obj) {
44+
if(this == obj) {
45+
return true;
46+
}
4147
if (obj instanceof ObjectExpression) {
4248
ObjectExpression otherExpression = (ObjectExpression) obj;
4349
if(propertyName.equals(otherExpression.getPropertyName())) {
44-
if(this.hasParentExpression() && otherExpression.hasParentExpression()) {
45-
return parentExpression.equals(otherExpression.getParentExpression());
46-
}
47-
return !this.hasParentExpression() && !this.hasParentExpression();
50+
return parentExpression.equals(otherExpression.getParentExpression());
4851
}
4952
}
5053
return false;

0 commit comments

Comments
 (0)