/*******************************************************************************
* Copyright (c) 2000, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package net.sourceforge.phpdt.core.dom;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.phpdt.core.compiler.InvalidInputException;
import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
import net.sourceforge.phpdt.internal.compiler.parser.TerminalTokens;
/**
* String literal nodes.
*
* @since 2.0
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class StringLiteral extends Expression {
/**
* The "escapedValue" structural property of this node type.
* @since 3.0
*/
public static final SimplePropertyDescriptor ESCAPED_VALUE_PROPERTY =
new SimplePropertyDescriptor(StringLiteral.class, "escapedValue", String.class, MANDATORY); //$NON-NLS-1$
/**
* A list of property descriptors (element type:
* {@link StructuralPropertyDescriptor}),
* or null if uninitialized.
*/
private static final List PROPERTY_DESCRIPTORS;
static {
List propertyList = new ArrayList(2);
createPropertyList(StringLiteral.class, propertyList);
addProperty(ESCAPED_VALUE_PROPERTY, propertyList);
PROPERTY_DESCRIPTORS = reapPropertyList(propertyList);
}
/**
* Returns a list of structural property descriptors for this node type.
* Clients must not modify the result.
*
* @param apiLevel the API level; one of the
* AST.JLS*
constants
* @return a list of property descriptors (element type:
* {@link StructuralPropertyDescriptor})
* @since 3.0
*/
public static List propertyDescriptors(int apiLevel) {
return PROPERTY_DESCRIPTORS;
}
/**
* The literal string, including quotes and escapes; defaults to the
* literal for the empty string.
*/
private String escapedValue = "\"\"";//$NON-NLS-1$
/**
* Creates a new unparented string literal node owned by the given AST.
* By default, the string literal denotes the empty string.
*
* N.B. This constructor is package-private. *
* * @param ast the AST that is to own this node */ StringLiteral(AST ast) { super(ast); } /* (omit javadoc for this method) * Method declared on ASTNode. */ final List internalStructuralPropertiesForType(int apiLevel) { return propertyDescriptors(apiLevel); } /* (omit javadoc for this method) * Method declared on ASTNode. */ final Object internalGetSetObjectProperty(SimplePropertyDescriptor property, boolean get, Object value) { if (property == ESCAPED_VALUE_PROPERTY) { if (get) { return getEscapedValue(); } else { setEscapedValue((String) value); return null; } } // allow default implementation to flag the error return super.internalGetSetObjectProperty(property, get, value); } /* (omit javadoc for this method) * Method declared on ASTNode. */ final int getNodeType0() { return STRING_LITERAL; } /* (omit javadoc for this method) * Method declared on ASTNode. */ ASTNode clone0(AST target) { StringLiteral result = new StringLiteral(target); result.setSourceRange(this.getStartPosition(), this.getLength()); result.setEscapedValue(getEscapedValue()); return result; } /* (omit javadoc for this method) * Method declared on ASTNode. */ final boolean subtreeMatch0(ASTMatcher matcher, Object other) { // dispatch to correct overloaded match method return matcher.match(this, other); } /* (omit javadoc for this method) * Method declared on ASTNode. */ void accept0(ASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); } /** * Returns the string value of this literal node to the given string * literal token. The token is the sequence of characters that would appear * in the source program, including enclosing double quotes and embedded * escapes. * * @return the string literal token, including enclosing double * quotes and embedded escapes */ public String getEscapedValue() { return this.escapedValue; } /** * Sets the string value of this literal node to the given string literal * token. The token is the sequence of characters that would appear in the * source program, including enclosing double quotes and embedded escapes. * For example, *""
setLiteral("\"\"")
"hello world"
setLiteral("\"hello world\"")
"boo\nhoo"
setLiteral("\"boo\\nhoo\"")
* For example, *
* StringLiteral s; * s.setEscapedValue("\"hello\\nworld\""); * assert s.getLiteralValue().equals("hello\nworld"); ** *
* Note that this is a convenience method that converts from the stored
* string literal token returned by getEscapedLiteral
.
*
* For example, *
* StringLiteral s; * s.setLiteralValue("hello\nworld"); * assert s.getEscapedValue("\"hello\\nworld\""); * assert s.getLiteralValue().equals("hello\nworld"); ** *
* Note that this is a convenience method that converts to the stored
* string literal token acceptable to setEscapedLiteral
.
*