001 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
002 // for details. All rights reserved. Use of this source code is governed by a
003 // BSD-style license that can be found in the LICENSE file.
004
005 package com.google.dart.compiler.backend.js.ast;
006
007 import com.google.dart.compiler.util.AstUtil;
008 import com.intellij.util.SmartList;
009 import org.jetbrains.annotations.NotNull;
010
011 import java.util.List;
012
013 public final class JsObjectLiteral extends JsLiteral {
014 private final List<JsPropertyInitializer> properties;
015
016 private final boolean multiline;
017
018 public JsObjectLiteral() {
019 this(new SmartList<JsPropertyInitializer>());
020 }
021
022 public JsObjectLiteral(boolean multiline) {
023 this(new SmartList<JsPropertyInitializer>(), multiline);
024 }
025
026 public boolean isMultiline() {
027 return multiline;
028 }
029
030 public JsObjectLiteral(List<JsPropertyInitializer> properties) {
031 this(properties, false);
032 }
033
034 public JsObjectLiteral(List<JsPropertyInitializer> properties, boolean multiline) {
035 this.properties = properties;
036 this.multiline = multiline;
037 }
038
039 public List<JsPropertyInitializer> getPropertyInitializers() {
040 return properties;
041 }
042
043 @Override
044 public void accept(JsVisitor v) {
045 v.visitObjectLiteral(this);
046 }
047
048 @Override
049 public void acceptChildren(JsVisitor visitor) {
050 visitor.acceptWithInsertRemove(properties);
051 }
052
053 @Override
054 public void traverse(JsVisitorWithContext v, JsContext ctx) {
055 if (v.visit(this, ctx)) {
056 v.acceptList(properties);
057 }
058 v.endVisit(this, ctx);
059 }
060
061 @NotNull
062 @Override
063 public JsObjectLiteral deepCopy() {
064 return new JsObjectLiteral(AstUtil.deepCopy(properties), multiline).withMetadataFrom(this);
065 }
066 }