View Javadoc
1   /*
2    * Copyright 2002-2014 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.springframework.expression.spel.ast;
17  
18  import org.springframework.asm.MethodVisitor;
19  import org.springframework.expression.spel.CodeFlow;
20  import org.springframework.expression.spel.support.BooleanTypedValue;
21  
22  /**
23   * Represents the literal values TRUE and FALSE.
24   *
25   * @author Andy Clement
26   * @since 3.0
27   */
28  public class BooleanLiteral extends Literal {
29  
30  	private final BooleanTypedValue value;
31  
32  
33  	public BooleanLiteral(String payload, int pos, boolean value) {
34  		super(payload, pos);
35  		this.value = BooleanTypedValue.forValue(value);
36  		this.exitTypeDescriptor = "Z";
37  	}
38  
39  
40  	@Override
41  	public BooleanTypedValue getLiteralValue() {
42  		return this.value;
43  	}
44  	
45  	@Override
46  	public boolean isCompilable() {
47  		return true;
48  	}
49  	
50  	@Override
51  	public void generateCode(MethodVisitor mv, CodeFlow cf) {
52  		if (this.value == BooleanTypedValue.TRUE) {
53  			mv.visitLdcInsn(1);		
54  		}
55  		else {
56  			mv.visitLdcInsn(0);
57  		}
58  		cf.pushDescriptor(this.exitTypeDescriptor);
59  	}
60  
61  }