| /* |
| * Copyright (c) 2012, the Dart project authors. |
| * |
| * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except |
| * in compliance with the License. You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Unless required by applicable law or agreed to in writing, software distributed under the License |
| * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
| * or implied. See the License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.dart.engine.internal.parser; |
| |
| import com.google.dart.engine.scanner.Token; |
| |
| /** |
| * Instances of the class {@code Modifiers} implement a simple data-holder for a method that needs |
| * to return multiple values. |
| * |
| * @coverage dart.engine.parser |
| */ |
| public class Modifiers { |
| /** |
| * The token representing the keyword 'abstract', or {@code null} if the keyword was not found. |
| */ |
| private Token abstractKeyword; |
| |
| /** |
| * The token representing the keyword 'const', or {@code null} if the keyword was not found. |
| */ |
| private Token constKeyword; |
| |
| /** |
| * The token representing the keyword 'external', or {@code null} if the keyword was not found. |
| */ |
| private Token externalKeyword; |
| |
| /** |
| * The token representing the keyword 'factory', or {@code null} if the keyword was not found. |
| */ |
| private Token factoryKeyword; |
| |
| /** |
| * The token representing the keyword 'final', or {@code null} if the keyword was not found. |
| */ |
| private Token finalKeyword; |
| |
| /** |
| * The token representing the keyword 'static', or {@code null} if the keyword was not found. |
| */ |
| private Token staticKeyword; |
| |
| /** |
| * The token representing the keyword 'var', or {@code null} if the keyword was not found. |
| */ |
| private Token varKeyword; |
| |
| /** |
| * Initialize a newly created and empty set of modifiers. |
| */ |
| public Modifiers() { |
| super(); |
| } |
| |
| /** |
| * Return the token representing the keyword 'abstract', or {@code null} if the keyword was not |
| * found. |
| * |
| * @return the token representing the keyword 'abstract' |
| */ |
| public Token getAbstractKeyword() { |
| return abstractKeyword; |
| } |
| |
| /** |
| * Return the token representing the keyword 'const', or {@code null} if the keyword was not |
| * found. |
| * |
| * @return the token representing the keyword 'const' |
| */ |
| public Token getConstKeyword() { |
| return constKeyword; |
| } |
| |
| /** |
| * Return the token representing the keyword 'external', or {@code null} if the keyword was not |
| * found. |
| * |
| * @return the token representing the keyword 'external' |
| */ |
| public Token getExternalKeyword() { |
| return externalKeyword; |
| } |
| |
| /** |
| * Return the token representing the keyword 'factory', or {@code null} if the keyword was not |
| * found. |
| * |
| * @return the token representing the keyword 'factory' |
| */ |
| public Token getFactoryKeyword() { |
| return factoryKeyword; |
| } |
| |
| /** |
| * Return the token representing the keyword 'final', or {@code null} if the keyword was not |
| * found. |
| * |
| * @return the token representing the keyword 'final' |
| */ |
| public Token getFinalKeyword() { |
| return finalKeyword; |
| } |
| |
| /** |
| * Return the token representing the keyword 'static', or {@code null} if the keyword was not |
| * found. |
| * |
| * @return the token representing the keyword 'static' |
| */ |
| public Token getStaticKeyword() { |
| return staticKeyword; |
| } |
| |
| /** |
| * Return the token representing the keyword 'var', or {@code null} if the keyword was not found. |
| * |
| * @return the token representing the keyword 'var' |
| */ |
| public Token getVarKeyword() { |
| return varKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'abstract' to the given token. |
| * |
| * @param abstractKeyword the token representing the keyword 'abstract' |
| */ |
| public void setAbstractKeyword(Token abstractKeyword) { |
| this.abstractKeyword = abstractKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'const' to the given token. |
| * |
| * @param constKeyword the token representing the keyword 'const' |
| */ |
| public void setConstKeyword(Token constKeyword) { |
| this.constKeyword = constKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'external' to the given token. |
| * |
| * @param externalKeyword the token representing the keyword 'external' |
| */ |
| public void setExternalKeyword(Token externalKeyword) { |
| this.externalKeyword = externalKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'factory' to the given token. |
| * |
| * @param factoryKeyword the token representing the keyword 'factory' |
| */ |
| public void setFactoryKeyword(Token factoryKeyword) { |
| this.factoryKeyword = factoryKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'final' to the given token. |
| * |
| * @param finalKeyword the token representing the keyword 'final' |
| */ |
| public void setFinalKeyword(Token finalKeyword) { |
| this.finalKeyword = finalKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'static' to the given token. |
| * |
| * @param staticKeyword the token representing the keyword 'static' |
| */ |
| public void setStaticKeyword(Token staticKeyword) { |
| this.staticKeyword = staticKeyword; |
| } |
| |
| /** |
| * Set the token representing the keyword 'var' to the given token. |
| * |
| * @param varKeyword the token representing the keyword 'var' |
| */ |
| public void setVarKeyword(Token varKeyword) { |
| this.varKeyword = varKeyword; |
| } |
| |
| @Override |
| public String toString() { |
| StringBuilder builder = new StringBuilder(); |
| boolean needsSpace = appendKeyword(builder, false, abstractKeyword); |
| needsSpace = appendKeyword(builder, needsSpace, constKeyword); |
| needsSpace = appendKeyword(builder, needsSpace, externalKeyword); |
| needsSpace = appendKeyword(builder, needsSpace, factoryKeyword); |
| needsSpace = appendKeyword(builder, needsSpace, finalKeyword); |
| needsSpace = appendKeyword(builder, needsSpace, staticKeyword); |
| appendKeyword(builder, needsSpace, varKeyword); |
| return builder.toString(); |
| } |
| |
| /** |
| * If the given keyword is not {@code null}, append it to the given builder, prefixing it with a |
| * space if needed. |
| * |
| * @param builder the builder to which the keyword will be appended |
| * @param needsSpace {@code true} if the keyword needs to be prefixed with a space |
| * @param keyword the keyword to be appended |
| * @return {@code true} if subsequent keywords need to be prefixed with a space |
| */ |
| private boolean appendKeyword(StringBuilder builder, boolean needsSpace, Token keyword) { |
| if (keyword != null) { |
| if (needsSpace) { |
| builder.append(' '); |
| } |
| builder.append(keyword.getLexeme()); |
| return true; |
| } |
| return needsSpace; |
| } |
| } |