Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: plugins/org.chromium.sdk.wipbackend.wk118685/src/org/chromium/sdk/internal/wip/WipExpressionBuilder.java

Issue 11829027: drop old backends (Closed) Base URL: https://chromedevtools.googlecode.com/svn/trunk
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.sdk.internal.wip;
6
7 import java.util.regex.Pattern;
8
9 import org.json.simple.JSONValue;
10
11 /**
12 * Builder for fully qualified name strings.
13 */
14 public class WipExpressionBuilder {
15
16 /**
17 * Holds a value short name and optionally a qualified name builder.
18 */
19 public interface ValueNameBuilder {
20 String getShortName();
21
22 /**
23 * @return value qualified name builder or null if there's no qualified name for the value
24 */
25 QualifiedNameBuilder getQualifiedNameBuilder();
26 }
27
28 /**
29 * Builds a qualified name of some value.
30 */
31 public interface QualifiedNameBuilder {
32 void append(StringBuilder output);
33
34 /**
35 * @return whether the qualified name should be enclosed before putting insi de a bigger
36 * expression
37 */
38 boolean needsParentheses();
39 }
40
41 /**
42 * Builds a qualified name of a property of some object.
43 */
44 interface PropertyNameBuilder {
45 void build(String name, StringBuilder output);
46
47 /**
48 * @return whether the qualified name should be enclosed before putting insi de a bigger
49 * expression
50 */
51 boolean needsParentheses();
52 }
53
54 /**
55 * Combines property name with a {@link PropertyNameBuilder}.
56 */
57 static ValueNameBuilder createValueOfPropertyNameBuilder(final String property Name,
58 final PropertyNameBuilder propertyNameBuilder) {
59
60 final QualifiedNameBuilder qualifiedNameBuilder;
61 if (propertyNameBuilder == null) {
62 qualifiedNameBuilder = null;
63 } else {
64 qualifiedNameBuilder = new QualifiedNameBuilder() {
65 @Override public boolean needsParentheses() {
66 return propertyNameBuilder.needsParentheses();
67 }
68
69 @Override public void append(StringBuilder output) {
70 propertyNameBuilder.build(propertyName, output);
71 }
72 };
73 }
74
75 return new ValueNameBuilder() {
76 @Override public String getShortName() {
77 return propertyName;
78 }
79
80 @Override public QualifiedNameBuilder getQualifiedNameBuilder() {
81 return qualifiedNameBuilder;
82 }
83 };
84 }
85
86 static ValueNameBuilder createRootName(final String name, final boolean needsP arentheses) {
87 final QualifiedNameBuilder qualifiedNameBuilder = new QualifiedNameBuilder() {
88 @Override
89 public void append(StringBuilder output) {
90 output.append(name);
91 }
92
93 @Override
94 public boolean needsParentheses() {
95 return needsParentheses;
96 }
97 };
98 return new ValueNameBuilder() {
99 @Override public String getShortName() {
100 return name;
101 }
102
103 @Override public QualifiedNameBuilder getQualifiedNameBuilder() {
104 return qualifiedNameBuilder;
105 }
106 };
107 }
108
109 public static ValueNameBuilder createRootNameNoDerived(final String name) {
110 return new ValueNameBuilder() {
111 @Override public String getShortName() {
112 return name;
113 }
114
115 @Override public QualifiedNameBuilder getQualifiedNameBuilder() {
116 return null;
117 }
118 };
119 }
120
121 /**
122 * Builder for a qualified name of some object.
123 */
124 static class ObjectPropertyNameBuilder implements PropertyNameBuilder {
125 private final QualifiedNameBuilder objectNameBuilder;
126
127 ObjectPropertyNameBuilder(QualifiedNameBuilder objectNameBuilder) {
128 this.objectNameBuilder = objectNameBuilder;
129 }
130
131 @Override
132 public void build(String name, StringBuilder output) {
133 buildParentRef(output);
134 if (ALL_DIGITS.matcher(name).matches()) {
135 output.append("[").append(name).append("]");
136 } else {
137 // TODO(peter.rybin): check that name is really a valid identifier.
138 boolean isNameSimple = name.indexOf(' ') != -1;
139 if (isNameSimple) {
140 output.append(".").append(name);
141 } else {
142 output.append("[\"").append(JSONValue.escape(name)).append("\"]");
143 }
144 }
145 }
146
147 private void buildParentRef(StringBuilder output) {
148 if (objectNameBuilder.needsParentheses()) {
149 output.append('(');
150 objectNameBuilder.append(output);
151 output.append(')');
152 } else {
153 objectNameBuilder.append(output);
154 }
155 }
156
157 @Override
158 public boolean needsParentheses() {
159 return false;
160 }
161 }
162
163 static final Pattern ALL_DIGITS = Pattern.compile("\\d+");
164 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698