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 }