aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/com/vaadin/client/ApplicationConnection.java6
-rw-r--r--client/src/com/vaadin/client/ComponentLocator.java8
-rw-r--r--client/src/com/vaadin/client/LayoutManager.java2
-rw-r--r--client/src/com/vaadin/client/MouseEventDetailsBuilder.java3
-rw-r--r--client/src/com/vaadin/client/Util.java2
-rw-r--r--client/src/com/vaadin/client/VDebugConsole.java6
-rw-r--r--client/src/com/vaadin/client/ui/VOverlay.java2
-rw-r--r--client/src/com/vaadin/client/ui/notification/VNotification.java2
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java2
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/VOrderedLayout.java57
-rw-r--r--client/src/com/vaadin/client/ui/splitpanel/AbstractSplitPanelConnector.java16
-rw-r--r--client/src/com/vaadin/client/ui/window/WindowConnector.java2
-rw-r--r--server/src/com/vaadin/data/fieldgroup/FieldGroup.java27
-rw-r--r--server/src/com/vaadin/data/util/TransactionalPropertyWrapper.java14
-rw-r--r--server/src/com/vaadin/server/AbstractClientConnector.java6
-rw-r--r--server/src/com/vaadin/server/DefaultDeploymentConfiguration.java6
-rw-r--r--server/src/com/vaadin/server/VaadinServiceSession.java120
-rw-r--r--server/tests/src/com/vaadin/tests/data/bean/BeanWithReadOnlyField.java18
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/fieldgroup/FieldGroupWithReadOnlyPropertiesTest.java51
-rw-r--r--theme-compiler/src/com/vaadin/sass/ScssStylesheet.java126
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/MediaListImpl.java8
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/Parser.java292
-rw-r--r--theme-compiler/src/com/vaadin/sass/parser/Parser.jj8
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/BlockNode.java33
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/CommentNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java12
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/FontFaceNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/ForNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java7
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/ImportNode.java9
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/InterpolationNode.java7
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/ListModifyNode.java8
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/ListRemoveNode.java21
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MediaNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MicrosoftRuleNode.java7
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java12
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/MixinNode.java23
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java11
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/Node.java50
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/RuleNode.java95
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java7
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/VariableNode.java8
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/WhileNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java8
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java5
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java14
-rw-r--r--theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java13
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java63
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/BlockVisitor.java75
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/EachNodeHandler.java57
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java72
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ExtendNodeHandler.java (renamed from theme-compiler/src/com/vaadin/sass/visitor/ExtendVisitor.java)49
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/IfElseNodeHandler.java102
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java122
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ImportNodeHandler.java (renamed from theme-compiler/src/com/vaadin/sass/visitor/ImportVisitor.java)26
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ListModifyVisitor.java27
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/MixinNodeHandler.java (renamed from theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java)65
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java (renamed from theme-compiler/src/com/vaadin/sass/visitor/NestPropertiesVisitor.java)24
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java69
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorVisitor.java60
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/VariableNodeHandler.java (renamed from theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/ImportVisitorTest.java)17
-rw-r--r--theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java94
-rw-r--r--theme-compiler/tests/resources/css/parent-selector.css4
-rw-r--r--theme-compiler/tests/resources/scss/_partial-for-import.scss18
-rw-r--r--theme-compiler/tests/resources/scss/mixins.scss4
-rw-r--r--theme-compiler/tests/resources/scss/parent-selector.scss6
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java3
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java267
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java57
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.html151
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.java83
-rw-r--r--uitest/src/com/vaadin/tests/widgetset/client/SerializerTestConnector.java10
72 files changed, 1343 insertions, 1341 deletions
diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java
index e227ef64e4..5475be4877 100644
--- a/client/src/com/vaadin/client/ApplicationConnection.java
+++ b/client/src/com/vaadin/client/ApplicationConnection.java
@@ -1502,10 +1502,10 @@ public class ApplicationConnection {
if (!c.getParent().getChildren().contains(c)) {
VConsole.error("ERROR: Connector is connected to a parent but the parent does not contain the connector");
}
- } else if ((c instanceof UIConnector && c == getRootConnector())) {
+ } else if (c == getUIConnector()) {
// UIConnector for this connection, leave as-is
} else if (c instanceof WindowConnector
- && getRootConnector().hasSubWindow(
+ && getUIConnector().hasSubWindow(
(WindowConnector) c)) {
// Sub window attached to this UIConnector, leave
// as-is
@@ -2782,7 +2782,7 @@ public class ApplicationConnection {
*
* @return the main view
*/
- public UIConnector getRootConnector() {
+ public UIConnector getUIConnector() {
return uIConnector;
}
diff --git a/client/src/com/vaadin/client/ComponentLocator.java b/client/src/com/vaadin/client/ComponentLocator.java
index d24b12ffe5..15962fefa9 100644
--- a/client/src/com/vaadin/client/ComponentLocator.java
+++ b/client/src/com/vaadin/client/ComponentLocator.java
@@ -453,7 +453,7 @@ public class ComponentLocator {
} else if (w instanceof VWindow) {
Connector windowConnector = ConnectorMap.get(client)
.getConnector(w);
- List<WindowConnector> subWindowList = client.getRootConnector()
+ List<WindowConnector> subWindowList = client.getUIConnector()
.getSubWindows();
int indexOfSubWindow = subWindowList.indexOf(windowConnector);
return PARENTCHILD_SEPARATOR + "VWindow[" + indexOfSubWindow + "]";
@@ -514,7 +514,7 @@ public class ComponentLocator {
if (part.equals(ROOT_ID)) {
w = RootPanel.get();
} else if (part.equals("")) {
- w = client.getRootConnector().getWidget();
+ w = client.getUIConnector().getWidget();
} else if (w == null) {
String id = part;
// Must be old static pid (PID_S*)
@@ -523,7 +523,7 @@ public class ComponentLocator {
if (connector == null) {
// Lookup by component id
// TODO Optimize this
- connector = findConnectorById(client.getRootConnector(),
+ connector = findConnectorById(client.getUIConnector(),
id.substring(5));
}
@@ -632,7 +632,7 @@ public class ComponentLocator {
* compatibility
*/
if (widgetClassName.equals("VWindow")) {
- List<WindowConnector> windows = client.getRootConnector()
+ List<WindowConnector> windows = client.getUIConnector()
.getSubWindows();
List<VWindow> windowWidgets = new ArrayList<VWindow>(
windows.size());
diff --git a/client/src/com/vaadin/client/LayoutManager.java b/client/src/com/vaadin/client/LayoutManager.java
index 9ed8f261e7..99f207edce 100644
--- a/client/src/com/vaadin/client/LayoutManager.java
+++ b/client/src/com/vaadin/client/LayoutManager.java
@@ -401,7 +401,7 @@ public class LayoutManager {
if (passes > 100) {
VConsole.log(LOOP_ABORT_MESSAGE);
VNotification.createNotification(VNotification.DELAY_FOREVER,
- connection.getRootConnector().getWidget()).show(
+ connection.getUIConnector().getWidget()).show(
LOOP_ABORT_MESSAGE, VNotification.CENTERED, "error");
break;
}
diff --git a/client/src/com/vaadin/client/MouseEventDetailsBuilder.java b/client/src/com/vaadin/client/MouseEventDetailsBuilder.java
index cda2eec07f..85acf5000a 100644
--- a/client/src/com/vaadin/client/MouseEventDetailsBuilder.java
+++ b/client/src/com/vaadin/client/MouseEventDetailsBuilder.java
@@ -65,6 +65,9 @@ public class MouseEventDetailsBuilder {
mouseEventDetails.setButton(MouseButton.RIGHT);
} else if (evt.getButton() == NativeEvent.BUTTON_MIDDLE) {
mouseEventDetails.setButton(MouseButton.MIDDLE);
+ } else {
+ // IE8 does not always report a button. Assume left.
+ mouseEventDetails.setButton(MouseButton.LEFT);
}
mouseEventDetails.setAltKey(evt.getAltKey());
mouseEventDetails.setCtrlKey(evt.getCtrlKey());
diff --git a/client/src/com/vaadin/client/Util.java b/client/src/com/vaadin/client/Util.java
index c9fe22528d..d111bd3093 100644
--- a/client/src/com/vaadin/client/Util.java
+++ b/client/src/com/vaadin/client/Util.java
@@ -703,7 +703,7 @@ public class Util {
VOverlay overlay = findWidget(element, VOverlay.class);
if (overlay != null && overlay.getOwner() != null) {
- return getConnectorForElement(client, client.getRootConnector()
+ return getConnectorForElement(client, client.getUIConnector()
.getWidget(), overlay.getOwner().getElement());
} else {
return null;
diff --git a/client/src/com/vaadin/client/VDebugConsole.java b/client/src/com/vaadin/client/VDebugConsole.java
index a5dbc9ede5..a436f6e648 100644
--- a/client/src/com/vaadin/client/VDebugConsole.java
+++ b/client/src/com/vaadin/client/VDebugConsole.java
@@ -117,7 +117,7 @@ public class VDebugConsole extends VOverlay implements Console {
for (ApplicationConnection a : ApplicationConfiguration
.getRunningApplications()) {
ComponentConnector connector = Util.getConnectorForElement(
- a, a.getRootConnector().getWidget(), eventTarget);
+ a, a.getUIConnector().getWidget(), eventTarget);
if (connector == null) {
connector = Util.getConnectorForElement(a,
RootPanel.get(), eventTarget);
@@ -146,7 +146,7 @@ public class VDebugConsole extends VOverlay implements Console {
for (ApplicationConnection a : ApplicationConfiguration
.getRunningApplications()) {
ComponentConnector paintable = Util.getConnectorForElement(
- a, a.getRootConnector().getWidget(), eventTarget);
+ a, a.getUIConnector().getWidget(), eventTarget);
if (paintable == null) {
paintable = Util.getConnectorForElement(a,
RootPanel.get(), eventTarget);
@@ -922,7 +922,7 @@ public class VDebugConsole extends VOverlay implements Console {
}
protected void dumpConnectorInfo(ApplicationConnection a) {
- UIConnector root = a.getRootConnector();
+ UIConnector root = a.getUIConnector();
log("================");
log("Connector hierarchy for Root: " + root.getState().caption + " ("
+ root.getConnectorId() + ")");
diff --git a/client/src/com/vaadin/client/ui/VOverlay.java b/client/src/com/vaadin/client/ui/VOverlay.java
index 064e9fae44..dc6c7e4dff 100644
--- a/client/src/com/vaadin/client/ui/VOverlay.java
+++ b/client/src/com/vaadin/client/ui/VOverlay.java
@@ -657,7 +657,7 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
if (container == null) {
container = DOM.createDiv();
container.setId(id);
- String styles = ac.getRootConnector().getWidget().getParent()
+ String styles = ac.getUIConnector().getWidget().getParent()
.getStyleName();
container.setClassName(styles);
RootPanel.get().getElement().appendChild(container);
diff --git a/client/src/com/vaadin/client/ui/notification/VNotification.java b/client/src/com/vaadin/client/ui/notification/VNotification.java
index 1c456a53b3..436712ac6f 100644
--- a/client/src/com/vaadin/client/ui/notification/VNotification.java
+++ b/client/src/com/vaadin/client/ui/notification/VNotification.java
@@ -424,7 +424,7 @@ public class VNotification extends VOverlay {
final int delay = notification
.getIntAttribute(UIConstants.ATTRIBUTE_NOTIFICATION_DELAY);
- createNotification(delay, client.getRootConnector().getWidget()).show(
+ createNotification(delay, client.getUIConnector().getWidget()).show(
html, position, style);
}
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index 3b72af966b..23308e2004 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -301,6 +301,8 @@ public abstract class AbstractOrderedLayoutConnector extends
int currentIndex = 0;
VOrderedLayout layout = getWidget();
+ layout.setSpacing(getState().spacing);
+
for (ComponentConnector child : getChildComponents()) {
Slot slot = layout.getSlot(child.getWidget());
if (slot.getParent() != layout) {
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/VOrderedLayout.java b/client/src/com/vaadin/client/ui/orderedlayout/VOrderedLayout.java
index 24e3576b49..ad1d83795e 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/VOrderedLayout.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/VOrderedLayout.java
@@ -62,12 +62,32 @@ public class VOrderedLayout extends FlowPanel {
}
/**
- * Add or move a slot to another index
+ * Add or move a slot to another index.
+ *
+ * <p>
+ * You should note that the index does not refer to the DOM index if
+ * spacings are used. If spacings are used then the index will be adjusted
+ * to include the spacings when inserted.
+ * </p>
+ * <p>
+ * For instance when using spacing the index converts to DOM index in the
+ * following way:
+ *
+ * <pre>
+ * index : 0 -> DOM index: 0
+ * index : 1 -> DOM index: 1
+ * index : 2 -> DOM index: 3
+ * index : 3 -> DOM index: 5
+ * index : 4 -> DOM index: 7
+ * </pre>
+ *
+ * When using this method never account for spacings.
+ * </p>
*
* @param slot
* The slot to move or add
* @param index
- * The index where the slot should be placed
+ * The index where the slot should be placed.
*/
void addOrMoveSlot(Slot slot, int index) {
if (slot.getParent() == this) {
@@ -76,7 +96,13 @@ public class VOrderedLayout extends FlowPanel {
return;
}
}
+
insert(slot, index);
+
+ /*
+ * We need to confirm spacings are correctly applied after each insert.
+ */
+ setSpacing(spacing);
}
/**
@@ -98,8 +124,23 @@ public class VOrderedLayout extends FlowPanel {
// Physical attach.
container = expandWrapper != null ? expandWrapper : getElement();
if (domInsert) {
- DOM.insertChild(container, child.getElement(),
- spacing ? beforeIndex * 2 : beforeIndex);
+ if (spacing) {
+ if (beforeIndex != 0) {
+ /*
+ * Since the spacing elements are located at the same DOM
+ * level as the slots we need to take them into account when
+ * calculating the slot position.
+ *
+ * The spacing elements are always located before the actual
+ * slot except for the first slot which do not have a
+ * spacing element like this
+ *
+ * |<slot1><spacing2><slot2><spacing3><slot3>...|
+ */
+ beforeIndex = beforeIndex * 2 - 1;
+ }
+ }
+ DOM.insertChild(container, child.getElement(), beforeIndex);
} else {
DOM.appendChild(container, child.getElement());
}
@@ -402,6 +443,12 @@ public class VOrderedLayout extends FlowPanel {
if (spacing && spacer == null) {
spacer = DOM.createDiv();
spacer.addClassName("v-spacing");
+
+ /*
+ * This has to be done here for the initial render. In other
+ * cases where the spacer already exists onAttach will handle
+ * it.
+ */
getElement().getParentElement().insertBefore(spacer,
getElement());
} else if (!spacing && spacer != null) {
@@ -916,6 +963,8 @@ public class VOrderedLayout extends FlowPanel {
for (Slot slot : widgetToSlot.values()) {
if (getWidgetIndex(slot) > 0) {
slot.setSpacing(spacing);
+ } else {
+ slot.setSpacing(false);
}
}
}
diff --git a/client/src/com/vaadin/client/ui/splitpanel/AbstractSplitPanelConnector.java b/client/src/com/vaadin/client/ui/splitpanel/AbstractSplitPanelConnector.java
index a4aac4fea3..aa14492849 100644
--- a/client/src/com/vaadin/client/ui/splitpanel/AbstractSplitPanelConnector.java
+++ b/client/src/com/vaadin/client/ui/splitpanel/AbstractSplitPanelConnector.java
@@ -210,15 +210,23 @@ public abstract class AbstractSplitPanelConnector extends
@Override
public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+ /*
+ * When the connector gets detached, the state isn't updated but there's
+ * still a hierarchy change -> verify that the child from the state is
+ * still our child before attaching the widget. See #10150.
+ */
+
Widget newFirstChildWidget = null;
- if (getFirstChild() != null) {
- newFirstChildWidget = getFirstChild().getWidget();
+ ComponentConnector firstChild = getFirstChild();
+ if (firstChild != null && firstChild.getParent() == this) {
+ newFirstChildWidget = firstChild.getWidget();
}
getWidget().setFirstWidget(newFirstChildWidget);
Widget newSecondChildWidget = null;
- if (getSecondChild() != null) {
- newSecondChildWidget = getSecondChild().getWidget();
+ ComponentConnector secondChild = getSecondChild();
+ if (secondChild != null && secondChild.getParent() == this) {
+ newSecondChildWidget = secondChild.getWidget();
}
getWidget().setSecondWidget(newSecondChildWidget);
}
diff --git a/client/src/com/vaadin/client/ui/window/WindowConnector.java b/client/src/com/vaadin/client/ui/window/WindowConnector.java
index 6b1f4b9697..ebcdd24fee 100644
--- a/client/src/com/vaadin/client/ui/window/WindowConnector.java
+++ b/client/src/com/vaadin/client/ui/window/WindowConnector.java
@@ -72,7 +72,7 @@ public class WindowConnector extends AbstractComponentContainerConnector
getLayoutManager().registerDependency(this, getWidget().header);
getLayoutManager().registerDependency(this, getWidget().footer);
- getWidget().setOwner(getConnection().getRootConnector().getWidget());
+ getWidget().setOwner(getConnection().getUIConnector().getWidget());
}
@Override
diff --git a/server/src/com/vaadin/data/fieldgroup/FieldGroup.java b/server/src/com/vaadin/data/fieldgroup/FieldGroup.java
index 6bef69fe5b..5a69cad62e 100644
--- a/server/src/com/vaadin/data/fieldgroup/FieldGroup.java
+++ b/server/src/com/vaadin/data/fieldgroup/FieldGroup.java
@@ -188,7 +188,8 @@ public class FieldGroup implements Serializable {
}
/**
- * Returns the read only status for the fields.
+ * Returns the read only status that is used by default with all fields that
+ * have a writable data source.
* <p>
* Note that this will not accurately represent the read only status of all
* fields if you change the read only status of the fields through some
@@ -201,16 +202,22 @@ public class FieldGroup implements Serializable {
}
/**
- * Updates the read only state of all bound fields.
+ * Sets the read only state to the given value for all fields with writable
+ * data source. Fields with read only data source will always be set to read
+ * only.
*
* @param fieldsReadOnly
- * true to set all bound fields to read only, false to set them
- * to read write
+ * true to set the fields with writable data source to read only,
+ * false to set them to read write
*/
public void setReadOnly(boolean fieldsReadOnly) {
readOnly = fieldsReadOnly;
for (Field<?> field : getFields()) {
- field.setReadOnly(fieldsReadOnly);
+ if (!field.getPropertyDataSource().isReadOnly()) {
+ field.setReadOnly(fieldsReadOnly);
+ } else {
+ field.setReadOnly(true);
+ }
}
}
@@ -325,7 +332,8 @@ public class FieldGroup implements Serializable {
* Configures a field with the settings set for this FieldBinder.
* <p>
* By default this updates the buffered, read only and enabled state of the
- * field. Also adds validators when applicable.
+ * field. Also adds validators when applicable. Fields with read only data
+ * source are always configured as read only.
*
* @param field
* The field to update
@@ -334,7 +342,12 @@ public class FieldGroup implements Serializable {
field.setBuffered(isBuffered());
field.setEnabled(isEnabled());
- field.setReadOnly(isReadOnly());
+
+ if (field.getPropertyDataSource().isReadOnly()) {
+ field.setReadOnly(true);
+ } else {
+ field.setReadOnly(isReadOnly());
+ }
}
/**
diff --git a/server/src/com/vaadin/data/util/TransactionalPropertyWrapper.java b/server/src/com/vaadin/data/util/TransactionalPropertyWrapper.java
index d8d27ae4c8..503bb1c743 100644
--- a/server/src/com/vaadin/data/util/TransactionalPropertyWrapper.java
+++ b/server/src/com/vaadin/data/util/TransactionalPropertyWrapper.java
@@ -122,4 +122,18 @@ public class TransactionalPropertyWrapper<T> extends AbstractProperty<T>
return wrappedProperty;
}
+ @Override
+ public boolean isReadOnly() {
+ return wrappedProperty.isReadOnly();
+ }
+
+ @Override
+ public void setReadOnly(boolean newStatus) {
+ boolean oldStatus = isReadOnly();
+ wrappedProperty.setReadOnly(newStatus);
+ if (oldStatus != isReadOnly()) {
+ fireReadOnlyStatusChange();
+ }
+ }
+
}
diff --git a/server/src/com/vaadin/server/AbstractClientConnector.java b/server/src/com/vaadin/server/AbstractClientConnector.java
index 490f23e186..b7ba48d8d5 100644
--- a/server/src/com/vaadin/server/AbstractClientConnector.java
+++ b/server/src/com/vaadin/server/AbstractClientConnector.java
@@ -260,7 +260,7 @@ public abstract class AbstractClientConnector implements ClientConnector,
Constructor<?> constructor = proxyClass
.getConstructor(InvocationHandler.class);
T rpcProxy = rpcInterface.cast(constructor
- .newInstance(new RpcInvoicationHandler(rpcInterface)));
+ .newInstance(new RpcInvocationHandler(rpcInterface)));
// cache the proxy
rpcProxyMap.put(rpcInterface, rpcProxy);
}
@@ -293,12 +293,12 @@ public abstract class AbstractClientConnector implements ClientConnector,
}
}
- private class RpcInvoicationHandler implements InvocationHandler,
+ private class RpcInvocationHandler implements InvocationHandler,
Serializable {
private String rpcInterfaceName;
- public RpcInvoicationHandler(Class<?> rpcInterface) {
+ public RpcInvocationHandler(Class<?> rpcInterface) {
rpcInterfaceName = rpcInterface.getName().replaceAll("\\$", ".");
}
diff --git a/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java b/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java
index 07a810c64c..985ae16f28 100644
--- a/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java
+++ b/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java
@@ -33,7 +33,7 @@ public class DefaultDeploymentConfiguration implements DeploymentConfiguration {
private boolean xsrfProtectionEnabled;
private int resourceCacheTime;
private int heartbeatInterval;
- private boolean idleRootCleanupEnabled;
+ private boolean idleUICleanupEnabled;
private final Class<?> systemPropertyBaseClass;
/**
@@ -170,7 +170,7 @@ public class DefaultDeploymentConfiguration implements DeploymentConfiguration {
@Override
public boolean isIdleUICleanupEnabled() {
- return idleRootCleanupEnabled;
+ return idleUICleanupEnabled;
}
/**
@@ -227,7 +227,7 @@ public class DefaultDeploymentConfiguration implements DeploymentConfiguration {
}
private void checkIdleUICleanup() {
- idleRootCleanupEnabled = getApplicationOrSystemProperty(
+ idleUICleanupEnabled = getApplicationOrSystemProperty(
Constants.SERVLET_PARAMETER_CLOSE_IDLE_UIS, "false").equals(
"true");
}
diff --git a/server/src/com/vaadin/server/VaadinServiceSession.java b/server/src/com/vaadin/server/VaadinServiceSession.java
index 37eebe3a4c..109a2f391b 100644
--- a/server/src/com/vaadin/server/VaadinServiceSession.java
+++ b/server/src/com/vaadin/server/VaadinServiceSession.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.EventObject;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -44,7 +43,6 @@ import com.vaadin.event.EventRouter;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
-import com.vaadin.ui.Window;
import com.vaadin.util.CurrentInstance;
import com.vaadin.util.ReflectTools;
@@ -320,124 +318,6 @@ public class VaadinServiceSession implements HttpSessionBindingListener,
}
/**
- * Window detach event.
- *
- * This event is sent each time a window is removed from the application
- * with {@link com.vaadin.server.VaadinServiceSession#removeWindow(Window)}.
- *
- * @deprecated might be refactored or removed before 7.0.0
- */
- @Deprecated
- public static class WindowDetachEvent extends EventObject {
-
- private final Window window;
-
- /**
- * Creates a event.
- *
- * @param application
- * the application to which the detached window belonged.
- * @param window
- * the Detached window.
- */
- public WindowDetachEvent(VaadinServiceSession application, Window window) {
- super(application);
- this.window = window;
- }
-
- /**
- * Gets the detached window.
- *
- * @return the detached window.
- */
- public Window getWindow() {
- return window;
- }
-
- /**
- * Gets the application from which the window was detached.
- *
- * @return the Application.
- */
- public VaadinServiceSession getApplication() {
- return (VaadinServiceSession) getSource();
- }
- }
-
- /**
- * Window attach event.
- *
- * This event is sent each time a window is attached tothe application with
- * {@link com.vaadin.server.VaadinServiceSession#addWindow(Window)}.
- *
- * @deprecated might be refactored or removed before 7.0.0
- */
- @Deprecated
- public static class WindowAttachEvent extends EventObject {
-
- private final Window window;
-
- /**
- * Creates a event.
- *
- * @param application
- * the application to which the detached window belonged.
- * @param window
- * the Attached window.
- */
- public WindowAttachEvent(VaadinServiceSession application, Window window) {
- super(application);
- this.window = window;
- }
-
- /**
- * Gets the attached window.
- *
- * @return the attached window.
- */
- public Window getWindow() {
- return window;
- }
-
- /**
- * Gets the application to which the window was attached.
- *
- * @return the Application.
- */
- public VaadinServiceSession getApplication() {
- return (VaadinServiceSession) getSource();
- }
- }
-
- /**
- * Window attach listener interface.
- */
- public interface WindowAttachListener extends Serializable {
-
- /**
- * Window attached
- *
- * @param event
- * the window attach event.
- */
- public void windowAttached(WindowAttachEvent event);
- }
-
- /**
- * Window detach listener interface.
- */
- public interface WindowDetachListener extends Serializable {
-
- /**
- * Window detached.
- *
- * @param event
- * the window detach event.
- */
- public void windowDetached(WindowDetachEvent event);
- }
-
- /**
* Gets the session's error handler.
*
* @return the current error handler
diff --git a/server/tests/src/com/vaadin/tests/data/bean/BeanWithReadOnlyField.java b/server/tests/src/com/vaadin/tests/data/bean/BeanWithReadOnlyField.java
new file mode 100644
index 0000000000..77f5613f86
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/data/bean/BeanWithReadOnlyField.java
@@ -0,0 +1,18 @@
+package com.vaadin.tests.data.bean;
+
+public class BeanWithReadOnlyField {
+ private String readOnlyField;
+ private String writableField;
+
+ public String getWritableField() {
+ return writableField;
+ }
+
+ public void setWritableField(String writableField) {
+ this.writableField = writableField;
+ }
+
+ public String getReadOnlyField() {
+ return readOnlyField;
+ }
+}
diff --git a/server/tests/src/com/vaadin/tests/server/component/fieldgroup/FieldGroupWithReadOnlyPropertiesTest.java b/server/tests/src/com/vaadin/tests/server/component/fieldgroup/FieldGroupWithReadOnlyPropertiesTest.java
new file mode 100644
index 0000000000..60a92d7d73
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/server/component/fieldgroup/FieldGroupWithReadOnlyPropertiesTest.java
@@ -0,0 +1,51 @@
+package com.vaadin.tests.server.component.fieldgroup;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.data.fieldgroup.FieldGroup;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.data.bean.BeanWithReadOnlyField;
+import com.vaadin.ui.TextField;
+
+public class FieldGroupWithReadOnlyPropertiesTest {
+
+ private TextField readOnlyField = new TextField();
+ private TextField writableField = new TextField();
+
+ @Test
+ public void bindReadOnlyPropertyToFieldGroup() {
+ BeanWithReadOnlyField bean = new BeanWithReadOnlyField();
+ BeanItem<BeanWithReadOnlyField> beanItem = new BeanItem<BeanWithReadOnlyField>(
+ bean);
+ beanItem.getItemProperty("readOnlyField").setReadOnly(true);
+
+ FieldGroup fieldGroup = new FieldGroup(beanItem);
+ fieldGroup.bindMemberFields(this);
+
+ assertTrue(readOnlyField.isReadOnly());
+ assertFalse(writableField.isReadOnly());
+ }
+
+ @Test
+ public void fieldGroupSetReadOnlyTest() {
+ BeanWithReadOnlyField bean = new BeanWithReadOnlyField();
+ BeanItem<BeanWithReadOnlyField> beanItem = new BeanItem<BeanWithReadOnlyField>(
+ bean);
+ beanItem.getItemProperty("readOnlyField").setReadOnly(true);
+
+ FieldGroup fieldGroup = new FieldGroup(beanItem);
+ fieldGroup.bindMemberFields(this);
+
+ fieldGroup.setReadOnly(true);
+ assertTrue(readOnlyField.isReadOnly());
+ assertTrue(writableField.isReadOnly());
+
+ fieldGroup.setReadOnly(false);
+ assertTrue(readOnlyField.isReadOnly());
+ assertFalse(writableField.isReadOnly());
+ }
+
+}
diff --git a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java
index d0b4b732ea..45578deb19 100644
--- a/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java
+++ b/theme-compiler/src/com/vaadin/sass/ScssStylesheet.java
@@ -20,7 +20,9 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
import org.w3c.css.sac.CSSException;
import org.w3c.css.sac.InputSource;
@@ -31,24 +33,27 @@ import com.vaadin.sass.handler.SCSSErrorHandler;
import com.vaadin.sass.parser.Parser;
import com.vaadin.sass.resolver.ScssStylesheetResolver;
import com.vaadin.sass.resolver.VaadinResolver;
+import com.vaadin.sass.tree.MixinDefNode;
import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.VariableNode;
-import com.vaadin.sass.visitor.BlockVisitor;
-import com.vaadin.sass.visitor.EachVisitor;
-import com.vaadin.sass.visitor.ExtendVisitor;
-import com.vaadin.sass.visitor.IfElseVisitor;
-import com.vaadin.sass.visitor.ImportVisitor;
-import com.vaadin.sass.visitor.ListModifyVisitor;
-import com.vaadin.sass.visitor.MixinVisitor;
-import com.vaadin.sass.visitor.NestPropertiesVisitor;
-import com.vaadin.sass.visitor.ParentSelectorVisitor;
-import com.vaadin.sass.visitor.VariableVisitor;
-import com.vaadin.sass.visitor.Visitor;
+import com.vaadin.sass.tree.controldirective.IfElseDefNode;
+import com.vaadin.sass.visitor.ImportNodeHandler;
+import com.vaadin.sass.visitor.ParentSelectorHandler;
public class ScssStylesheet extends Node {
private static final long serialVersionUID = 3849790204404961608L;
+ private static ScssStylesheet mainStyleSheet = null;
+
+ private static final HashMap<String, VariableNode> variables = new HashMap<String, VariableNode>();
+
+ private static final Map<String, MixinDefNode> mixinDefs = new HashMap<String, MixinDefNode>();
+
+ private static final HashSet<IfElseDefNode> ifElseDefNodes = new HashSet<IfElseDefNode>();
+
+ private String fileName;
+
/**
* Read in a file SCSS and parse it into a ScssStylesheet
*
@@ -121,20 +126,32 @@ public class ScssStylesheet extends Node {
* @throws Exception
*/
public void compile() throws Exception {
- List<Visitor> visitors = new ArrayList<Visitor>();
- visitors.add(new ImportVisitor());
- visitors.add(new VariableVisitor());
- visitors.add(new MixinVisitor());
- visitors.add(new IfElseVisitor());
- visitors.add(new ParentSelectorVisitor());
- visitors.add(new BlockVisitor());
- visitors.add(new NestPropertiesVisitor());
- visitors.add(new ExtendVisitor());
- visitors.add(new EachVisitor());
- visitors.add(new ListModifyVisitor());
- for (Visitor visitor : visitors) {
- visitor.traverse(this);
+ mainStyleSheet = this;
+ mixinDefs.clear();
+ variables.clear();
+ ifElseDefNodes.clear();
+ ParentSelectorHandler.clear();
+ importOtherFiles(this);
+ populateDefinitions(this);
+ traverse(this);
+ }
+
+ private void importOtherFiles(ScssStylesheet node) {
+ ImportNodeHandler.traverse(node);
+ }
+
+ private void populateDefinitions(Node node) {
+ if (node instanceof MixinDefNode) {
+ mixinDefs.put(((MixinDefNode) node).getName(), (MixinDefNode) node);
+ node.getParentNode().removeChild(node);
+ } else if (node instanceof IfElseDefNode) {
+ ifElseDefNodes.add((IfElseDefNode) node);
+ }
+
+ for (final Node child : new ArrayList<Node>(node.getChildren())) {
+ populateDefinitions(child);
}
+
}
/**
@@ -169,4 +186,63 @@ public class ScssStylesheet extends Node {
}
}
+ public static ScssStylesheet get() {
+ return mainStyleSheet;
+ }
+
+ @Override
+ public void traverse() {
+ // Not used for ScssStylesheet
+ }
+
+ public void traverse(Node node) {
+ node.traverse();
+
+ @SuppressWarnings("unchecked")
+ HashMap<String, VariableNode> variableScope = (HashMap<String, VariableNode>) variables
+ .clone();
+
+ int maxSize = node.getChildren().size();
+ ArrayList<Node> oldChildren = new ArrayList<Node>(node.getChildren());
+ for (int i = 0; i < maxSize; i++) {
+
+ Node current = node.getChildren().get(i);
+ traverse(current);
+
+ if (!node.getChildren().equals(oldChildren)) {
+ oldChildren = new ArrayList<Node>(node.getChildren());
+ maxSize = node.getChildren().size();
+ i = i - 1;
+ }
+
+ }
+
+ variables.clear();
+ variables.putAll(variableScope);
+ }
+
+ public static void addVariable(VariableNode node) {
+ variables.put(node.getName(), node);
+ }
+
+ public static VariableNode getVariable(String string) {
+ return variables.get(string);
+ }
+
+ public static ArrayList<VariableNode> getVariables() {
+ return new ArrayList<VariableNode>(variables.values());
+ }
+
+ public static MixinDefNode getMixinDefinition(String name) {
+ return mixinDefs.get(name);
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/parser/MediaListImpl.java b/theme-compiler/src/com/vaadin/sass/parser/MediaListImpl.java
index 042e385cb3..bb321ea3cd 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/MediaListImpl.java
+++ b/theme-compiler/src/com/vaadin/sass/parser/MediaListImpl.java
@@ -8,14 +8,20 @@
*/
package com.vaadin.sass.parser;
+import java.io.Serializable;
+
import org.w3c.css.sac.SACMediaList;
/**
* @version $Revision: 1.4 $
* @author Philippe Le Hegaret
*/
-public class MediaListImpl implements SACMediaList {
+public class MediaListImpl implements SACMediaList, Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
String[] array = new String[10];
int current;
diff --git a/theme-compiler/src/com/vaadin/sass/parser/Parser.java b/theme-compiler/src/com/vaadin/sass/parser/Parser.java
index 33411bd57d..996a15d9c8 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/Parser.java
+++ b/theme-compiler/src/com/vaadin/sass/parser/Parser.java
@@ -3427,6 +3427,13 @@ boolean isPseudoElement = false;
case IDENT:
name = property();
break;
+ case VARIABLE:
+ name = variableName();
+ name = "$"+name;
+ break;
+ case INTERPOLATION:
+ name = interpolation();
+ break;
case FUNCTION:
name = functionName();
args = argValuelist();
@@ -3464,6 +3471,13 @@ boolean isPseudoElement = false;
documentHandler.includeDirective(name, args);
}
+ final public String interpolation() throws ParseException {
+ Token n;
+ n = jj_consume_token(INTERPOLATION);
+ {if (true) return n.image;}
+ throw new Error("Missing return statement in function");
+ }
+
final public void listModifyDirective() throws ParseException {
if (jj_2_12(5)) {
removeDirective();
@@ -5648,26 +5662,6 @@ LexicalUnitImpl result = null;
finally { jj_save(14, xla); }
}
- private boolean jj_3R_205() {
- if (jj_scan_token(DEG)) return true;
- return false;
- }
-
- private boolean jj_3R_204() {
- if (jj_scan_token(EXS)) return true;
- return false;
- }
-
- private boolean jj_3R_203() {
- if (jj_scan_token(EMS)) return true;
- return false;
- }
-
- private boolean jj_3_1() {
- if (jj_3R_156()) return true;
- return false;
- }
-
private boolean jj_3R_202() {
if (jj_scan_token(PX)) return true;
return false;
@@ -5683,6 +5677,11 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3_1() {
+ if (jj_3R_156()) return true;
+ return false;
+ }
+
private boolean jj_3R_199() {
if (jj_scan_token(MM)) return true;
return false;
@@ -5708,22 +5707,11 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_4() {
- if (jj_3R_159()) return true;
- if (jj_3R_160()) return true;
- return false;
- }
-
private boolean jj_3R_185() {
if (jj_3R_221()) return true;
return false;
}
- private boolean jj_3_7() {
- if (jj_3R_156()) return true;
- return false;
- }
-
private boolean jj_3R_195() {
if (jj_scan_token(NUMBER)) return true;
return false;
@@ -5734,16 +5722,6 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_191() {
- if (jj_scan_token(COLON)) return true;
- return false;
- }
-
- private boolean jj_3_6() {
- if (jj_3R_161()) return true;
- return false;
- }
-
private boolean jj_3R_181() {
Token xsp;
xsp = jj_scanpos;
@@ -5807,6 +5785,12 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3_4() {
+ if (jj_3R_159()) return true;
+ if (jj_3R_160()) return true;
+ return false;
+ }
+
private boolean jj_3R_179() {
if (jj_3R_193()) return true;
return false;
@@ -5826,6 +5810,21 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3_7() {
+ if (jj_3R_156()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_191() {
+ if (jj_scan_token(COLON)) return true;
+ return false;
+ }
+
+ private boolean jj_3_6() {
+ if (jj_3R_161()) return true;
+ return false;
+ }
+
private boolean jj_3R_161() {
if (jj_3R_178()) return true;
if (jj_scan_token(COLON)) return true;
@@ -5873,21 +5872,11 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_5() {
- if (jj_3R_161()) return true;
- return false;
- }
-
private boolean jj_3_14() {
if (jj_3R_166()) return true;
return false;
}
- private boolean jj_3_2() {
- if (jj_3R_156()) return true;
- return false;
- }
-
private boolean jj_3R_240() {
if (jj_scan_token(URL)) return true;
return false;
@@ -5908,11 +5897,21 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3_5() {
+ if (jj_3R_161()) return true;
+ return false;
+ }
+
private boolean jj_3R_167() {
if (jj_3R_183()) return true;
return false;
}
+ private boolean jj_3_2() {
+ if (jj_3R_156()) return true;
+ return false;
+ }
+
private boolean jj_3R_164() {
if (jj_scan_token(VARIABLE)) return true;
Token xsp;
@@ -5977,11 +5976,6 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_248() {
- if (jj_scan_token(INTERPOLATION)) return true;
- return false;
- }
-
private boolean jj_3R_241() {
if (jj_scan_token(UNICODERANGE)) return true;
return false;
@@ -5992,11 +5986,6 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_10() {
- if (jj_3R_161()) return true;
- return false;
- }
-
private boolean jj_3R_165() {
if (jj_scan_token(VARIABLE)) return true;
Token xsp;
@@ -6018,13 +6007,8 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_192() {
- if (jj_scan_token(LBRACKET)) return true;
- return false;
- }
-
- private boolean jj_3R_158() {
- if (jj_3R_161()) return true;
+ private boolean jj_3R_248() {
+ if (jj_scan_token(INTERPOLATION)) return true;
return false;
}
@@ -6038,16 +6022,6 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_178() {
- if (jj_scan_token(IDENT)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
private boolean jj_3R_237() {
if (jj_scan_token(FUNCTION)) return true;
Token xsp;
@@ -6061,13 +6035,8 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_242() {
- if (jj_scan_token(VARIABLE)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3_10() {
+ if (jj_3R_161()) return true;
return false;
}
@@ -6091,13 +6060,23 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_235() {
- if (jj_scan_token(PARENT)) return true;
+ private boolean jj_3R_192() {
+ if (jj_scan_token(LBRACKET)) return true;
return false;
}
- private boolean jj_3R_234() {
- if (jj_scan_token(ANY)) return true;
+ private boolean jj_3R_158() {
+ if (jj_3R_161()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_178() {
+ if (jj_scan_token(IDENT)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
@@ -6106,6 +6085,16 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3R_242() {
+ if (jj_scan_token(VARIABLE)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
private boolean jj_3R_217() {
if (jj_3R_240()) return true;
return false;
@@ -6129,6 +6118,21 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3R_216() {
+ if (jj_3R_239()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_235() {
+ if (jj_scan_token(PARENT)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_234() {
+ if (jj_scan_token(ANY)) return true;
+ return false;
+ }
+
private boolean jj_3R_247() {
if (jj_scan_token(IDENT)) return true;
return false;
@@ -6144,11 +6148,6 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_216() {
- if (jj_3R_239()) return true;
- return false;
- }
-
private boolean jj_3R_233() {
Token xsp;
if (jj_3R_243()) return true;
@@ -6294,11 +6293,24 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3R_238() {
+ if (jj_scan_token(DOT)) return true;
+ return false;
+ }
+
private boolean jj_3R_232() {
if (jj_scan_token(PRECEDES)) return true;
return false;
}
+ private boolean jj_3R_215() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_238()) jj_scanpos = xsp;
+ if (jj_scan_token(IDENT)) return true;
+ return false;
+ }
+
private boolean jj_3R_231() {
if (jj_scan_token(PLUS)) return true;
return false;
@@ -6319,6 +6331,11 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3R_214() {
+ if (jj_scan_token(STRING)) return true;
+ return false;
+ }
+
private boolean jj_3R_171() {
if (jj_scan_token(PRECEDES)) return true;
Token xsp;
@@ -6329,16 +6346,27 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_238() {
- if (jj_scan_token(DOT)) return true;
+ private boolean jj_3R_213() {
+ if (jj_3R_237()) return true;
return false;
}
- private boolean jj_3R_215() {
+ private boolean jj_3R_182() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_238()) jj_scanpos = xsp;
- if (jj_scan_token(IDENT)) return true;
+ if (jj_3R_214()) {
+ jj_scanpos = xsp;
+ if (jj_3R_215()) {
+ jj_scanpos = xsp;
+ if (jj_3R_216()) {
+ jj_scanpos = xsp;
+ if (jj_3R_217()) {
+ jj_scanpos = xsp;
+ if (jj_3R_218()) return true;
+ }
+ }
+ }
+ }
return false;
}
@@ -6381,37 +6409,23 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_214() {
- if (jj_scan_token(STRING)) return true;
+ private boolean jj_3R_212() {
+ if (jj_scan_token(DIMEN)) return true;
return false;
}
- private boolean jj_3R_213() {
- if (jj_3R_237()) return true;
+ private boolean jj_3R_211() {
+ if (jj_scan_token(KHZ)) return true;
return false;
}
- private boolean jj_3R_182() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_214()) {
- jj_scanpos = xsp;
- if (jj_3R_215()) {
- jj_scanpos = xsp;
- if (jj_3R_216()) {
- jj_scanpos = xsp;
- if (jj_3R_217()) {
- jj_scanpos = xsp;
- if (jj_3R_218()) return true;
- }
- }
- }
- }
+ private boolean jj_3R_210() {
+ if (jj_scan_token(HZ)) return true;
return false;
}
- private boolean jj_3R_212() {
- if (jj_scan_token(DIMEN)) return true;
+ private boolean jj_3R_209() {
+ if (jj_scan_token(MS)) return true;
return false;
}
@@ -6420,13 +6434,13 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_176() {
- if (jj_3R_191()) return true;
+ private boolean jj_3R_208() {
+ if (jj_scan_token(SECOND)) return true;
return false;
}
- private boolean jj_3R_211() {
- if (jj_scan_token(KHZ)) return true;
+ private boolean jj_3R_176() {
+ if (jj_3R_191()) return true;
return false;
}
@@ -6435,8 +6449,8 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_210() {
- if (jj_scan_token(HZ)) return true;
+ private boolean jj_3R_207() {
+ if (jj_scan_token(GRAD)) return true;
return false;
}
@@ -6450,18 +6464,18 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_209() {
- if (jj_scan_token(MS)) return true;
+ private boolean jj_3R_206() {
+ if (jj_scan_token(RAD)) return true;
return false;
}
- private boolean jj_3R_173() {
- if (jj_3R_188()) return true;
+ private boolean jj_3R_205() {
+ if (jj_scan_token(DEG)) return true;
return false;
}
- private boolean jj_3R_208() {
- if (jj_scan_token(SECOND)) return true;
+ private boolean jj_3R_173() {
+ if (jj_3R_188()) return true;
return false;
}
@@ -6489,13 +6503,13 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_207() {
- if (jj_scan_token(GRAD)) return true;
+ private boolean jj_3R_204() {
+ if (jj_scan_token(EXS)) return true;
return false;
}
- private boolean jj_3R_206() {
- if (jj_scan_token(RAD)) return true;
+ private boolean jj_3R_203() {
+ if (jj_scan_token(EMS)) return true;
return false;
}
@@ -6524,10 +6538,10 @@ LexicalUnitImpl result = null;
jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0xe8000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xe9f45400,0xe9f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x1f45400,0x2,0x2,0x1100000,0x2,0x1100000,0x1100002,0x2,0x80080002,0x80080002,0x2,0x2,0x2,0x2,0x2,0xe8000000,0x0,0x0,0x0,0xe8000000,0x2,0x400000,0x2,0x2,0x88000000,0x88000000,0x88000000,0x88000000,0x88000000,0x88000000,0x88000000,0x88000000,0x88000000,0x88000000,0xe8000000,0x0,0x0,0x0,0x0,0x60000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x2,0x0,0x2,0x0,0x2,0x800000,0x27380002,0x2,0xe8000000,0x0,0xe8000000,0x2,0x0,0x2,0x27380002,0x0,0x2,0xe8000000,0x0,0xe8000000,0x2,0x27380002,0x2,0x2,0x2,0x0,0x2,0xe8000000,0x0,0x0,0xe8000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xe8000000,0x0,0x0,0xe8000000,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x80300000,0x2,0x0,0x400000,0x2,0x80300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x80301000,0x2,0x0,0x2,0x2,0x2,0x2,0x4400000,0x4400000,0x300000,0x80300000,0x300000,0x0,0x80000000,0x80000000,0x80300000,0x2,0x2,0x80300000,0x2,0xe8000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
}
private static void jj_la1_init_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x283000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc2,0xc2,0x0,0x0,0x0,0x0,0x0,0xa82000c0,0x0,0x20000000,0x88200000,0xc0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x802000c0,0x80200000,0xc0,0x0,0x40000000,0x0,0x3f,0x0,0x0,0x802000c0,0x80200000,0xc0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x802000c0,0x200000,0x80000000,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x882000c0,0x200000,0x88000000,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x0,0x40,0x0,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x283000c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc2,0xc2,0x0,0x0,0x0,0x0,0x0,0xa82000c0,0x0,0x20000000,0x88200000,0xc0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x802000c0,0x80200000,0xc0,0x0,0x40000000,0x0,0x3f,0x0,0x0,0x802000c0,0x80200000,0xc0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x802000c0,0x200000,0x80000000,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x882000c0,0x200000,0x88000000,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x0,0x40,0x0,0x0,0x40,0x0,0x40,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
}
private static void jj_la1_init_2() {
- jj_la1_2 = new int[] {0x80000000,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x400,0x50000440,0x0,0x0,0x0,0x0,0x220,0x0,0x40,0x0,0x0,0x0,0xf0000ae0,0xf0000ae0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0xe0000aa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x50000444,0x44,0x0,0x40000400,0x10000040,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x0,0x0,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000040,0x40,0x40,0x40,0x40,0x40,0x0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x10,0x0,0x0,0x4c0,0x0,0x50000440,0x40000400,0x10000040,0x0,0x0,0x0,0x4c0,0x8,0x0,0x50000440,0x40000400,0x10000040,0x0,0x4c0,0x0,0x0,0x0,0x440,0x0,0x50000440,0x0,0x40000400,0x10000040,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x50000440,0x40000000,0x400,0x10000040,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x400,0x1ffffee0,0x0,0x0,0x0,0x0,0x1ffffee0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x1ffffee0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffffee0,0x0,0xffff880,0x0,0x10000260,0x1ffffae0,0x0,0x0,0x1ffffee0,0x0,0x70000040,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,};
+ jj_la1_2 = new int[] {0x80000000,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x400,0x50000440,0x0,0x0,0x0,0x0,0x220,0x0,0x40,0x0,0x0,0x0,0xf0000ae0,0xf0000ae0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0xe0000aa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x50000444,0x44,0x0,0x40000400,0x10000040,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x0,0x0,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000040,0x40,0x40,0x40,0x40,0x40,0x0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x10,0x0,0x0,0x4c0,0x0,0x50000440,0x40000400,0x10000040,0x0,0x0,0x0,0x4c0,0x8,0x0,0x50000440,0x40000400,0x10000040,0x0,0x4c0,0x0,0x0,0x0,0x440,0x0,0x50000440,0x0,0x40000400,0x10000040,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x50000440,0x40000000,0x400,0x10000040,0x0,0x0,0x0,0x0,0x0,0x0,0x400,0x400,0x1ffffee0,0x0,0x0,0x0,0x0,0x1ffffee0,0x0,0x0,0x0,0x440,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,0x1ffffee0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffffee0,0x0,0xffff880,0x0,0x10000260,0x1ffffae0,0x0,0x0,0x1ffffee0,0x0,0x70000040,0x0,0x0,0x0,0x40,0x0,0x0,0x40,0x0,};
}
private static void jj_la1_init_3() {
jj_la1_3 = new int[] {0x0,0x4,0x4,0x0,0x4,0x0,0x0,0x0,0x0,0x3,0x4,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6200f,0x6200f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6200f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x22000,0x0,0x0,0x0,0x0,0x22000,0x0,0x0,0x0,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x22000,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x22000,0x0,0x20000,0x0,0x2000,0x22000,0x0,0x0,0x22000,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
diff --git a/theme-compiler/src/com/vaadin/sass/parser/Parser.jj b/theme-compiler/src/com/vaadin/sass/parser/Parser.jj
index 92cb3e46c1..af53edb482 100644
--- a/theme-compiler/src/com/vaadin/sass/parser/Parser.jj
+++ b/theme-compiler/src/com/vaadin/sass/parser/Parser.jj
@@ -1576,12 +1576,18 @@ void includeDirective() :
{
<INCLUDE_SYM>
(<S>)*
- (name = property()
+ (name = property()|name = variableName(){ name = "$"+name;}|name = interpolation()
|(name = functionName()
args = argValuelist()) <RPARAN>)(";"(<S>)*)+
{documentHandler.includeDirective(name, args);}
}
+String interpolation() :
+{
+ Token n; } {
+ n = < INTERPOLATION >
+ {
+ return n.image; } }
void listModifyDirective() : {
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java b/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
index 5a64a928db..07e4c69ed7 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/BlockNode.java
@@ -18,7 +18,11 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
-public class BlockNode extends Node implements IVariableNode, InterpolationNode {
+import com.vaadin.sass.ScssStylesheet;
+import com.vaadin.sass.visitor.BlockNodeHandler;
+import com.vaadin.sass.visitor.ParentSelectorHandler;
+
+public class BlockNode extends Node implements IVariableNode {
private static final long serialVersionUID = 5742962631468325048L;
@@ -94,25 +98,20 @@ public class BlockNode extends Node implements IVariableNode, InterpolationNode
return b.toString();
}
- @Override
- public void replaceInterpolation(String variableName, String variable) {
- if (selectorList == null || selectorList.isEmpty()) {
- return;
- }
-
- for (final String selector : new ArrayList<String>(selectorList)) {
- String interpolation = "#{" + variableName + "}";
- if (selector.contains(interpolation)) {
- String replace = selector.replace(interpolation, variable);
- selectorList.add(selectorList.indexOf(selector), replace);
- selectorList.remove(selector);
- }
- }
+ public void setParentNode(Node node) {
+ parentNode.removeChild(this);
+ node.appendChild(this);
}
@Override
- public boolean containsInterpolationVariable(String variable) {
- return getSelectors().contains(variable);
+ public void traverse() {
+ try {
+ ParentSelectorHandler.traverse(this);
+ BlockNodeHandler.traverse(this);
+ replaceVariables(ScssStylesheet.getVariables());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/CommentNode.java b/theme-compiler/src/com/vaadin/sass/tree/CommentNode.java
index 5fb438bb08..b867c5384b 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/CommentNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/CommentNode.java
@@ -35,4 +35,9 @@ public class CommentNode extends Node {
public String toString() {
return comment;
}
+
+ @Override
+ public void traverse() {
+ // Not used in CommentNode
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java b/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java
index 909e69e12f..b9bf5869d1 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/ExtendNode.java
@@ -18,6 +18,8 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
+import com.vaadin.sass.visitor.ExtendNodeHandler;
+
public class ExtendNode extends Node implements IVariableNode {
private static final long serialVersionUID = 3301805078983796878L;
@@ -45,4 +47,14 @@ public class ExtendNode extends Node implements IVariableNode {
return b.toString();
}
+
+ @Override
+ public void traverse() {
+ try {
+ ExtendNodeHandler.traverse(this);
+ getParentNode().removeChild(this);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/FontFaceNode.java b/theme-compiler/src/com/vaadin/sass/tree/FontFaceNode.java
index 3dab4df773..9e3b24f8de 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/FontFaceNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/FontFaceNode.java
@@ -15,4 +15,9 @@ public class FontFaceNode extends Node {
return builder.toString();
}
+ @Override
+ public void traverse() {
+ // Not in use for FontFaceNode
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/ForNode.java b/theme-compiler/src/com/vaadin/sass/tree/ForNode.java
index 7c0239aa60..da0d784229 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/ForNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/ForNode.java
@@ -41,4 +41,9 @@ public class ForNode extends Node {
+ to + ", exclusive: " + exclusive + ", body" + body;
}
+ @Override
+ public void traverse() {
+
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java b/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java
index 6263d557b8..d81e4976e5 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/FunctionNode.java
@@ -18,6 +18,8 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
+import com.vaadin.sass.ScssStylesheet;
+
public class FunctionNode extends Node implements IVariableNode {
private static final long serialVersionUID = -5383104165955523923L;
@@ -50,4 +52,9 @@ public class FunctionNode extends Node implements IVariableNode {
}
}
}
+
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/ImportNode.java b/theme-compiler/src/com/vaadin/sass/tree/ImportNode.java
index ac070d6ffc..9dd9c1b0d8 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/ImportNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/ImportNode.java
@@ -18,6 +18,9 @@ package com.vaadin.sass.tree;
import org.w3c.css.sac.SACMediaList;
+import com.vaadin.sass.ScssStylesheet;
+import com.vaadin.sass.visitor.ImportNodeHandler;
+
public class ImportNode extends Node {
private static final long serialVersionUID = 5671255892282668438L;
@@ -68,4 +71,10 @@ public class ImportNode extends Node {
public SACMediaList getMl() {
return ml;
}
+
+ @Override
+ public void traverse() {
+ // TODO shouldn't be reached with current setup, try anyway?
+ ImportNodeHandler.traverse((ScssStylesheet) getParentNode());
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/InterpolationNode.java b/theme-compiler/src/com/vaadin/sass/tree/InterpolationNode.java
deleted file mode 100644
index c998b60b52..0000000000
--- a/theme-compiler/src/com/vaadin/sass/tree/InterpolationNode.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.vaadin.sass.tree;
-
-public interface InterpolationNode {
- public void replaceInterpolation(String variableName, String variable);
-
- public boolean containsInterpolationVariable(String variable);
-}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/ListModifyNode.java b/theme-compiler/src/com/vaadin/sass/tree/ListModifyNode.java
index d54f56f8a7..c571fde08e 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/ListModifyNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/ListModifyNode.java
@@ -3,6 +3,7 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
import java.util.Arrays;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.parser.LexicalUnitImpl;
public abstract class ListModifyNode extends Node implements IVariableNode {
@@ -99,4 +100,11 @@ public abstract class ListModifyNode extends Node implements IVariableNode {
}
}
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ ScssStylesheet.addVariable(getModifiedList());
+ getParentNode().removeChild(this);
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/ListRemoveNode.java b/theme-compiler/src/com/vaadin/sass/tree/ListRemoveNode.java
index 22fb216c9e..a72be7bc02 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/ListRemoveNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/ListRemoveNode.java
@@ -2,8 +2,6 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
-import com.vaadin.sass.parser.LexicalUnitImpl;
-
public class ListRemoveNode extends ListModifyNode {
public ListRemoveNode(String variable, String list, String remove,
@@ -14,26 +12,9 @@ public class ListRemoveNode extends ListModifyNode {
}
- private boolean shouldInclude(LexicalUnitImpl current,
- LexicalUnitImpl lastAccepted) {
-
- if (lastAccepted != null
- && lastAccepted.getLexicalUnitType() == LexicalUnitImpl.SAC_OPERATOR_COMMA
- && current.getLexicalUnitType() == LexicalUnitImpl.SAC_OPERATOR_COMMA) {
- return false;
- }
-
- String string = current.getValue().toString();
- for (final String s : modify) {
- if (s.equals(string)) {
- return false;
- }
- }
- return true;
- }
-
@Override
protected void modifyList(ArrayList<String> newList) {
newList.removeAll(modify);
}
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java b/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java
index b312d53a00..e410e93e53 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MediaNode.java
@@ -57,4 +57,9 @@ public class MediaNode extends Node {
return builder.toString();
}
+ @Override
+ public void traverse() {
+
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MicrosoftRuleNode.java b/theme-compiler/src/com/vaadin/sass/tree/MicrosoftRuleNode.java
index cbd3b14289..ce2bdc8395 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MicrosoftRuleNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MicrosoftRuleNode.java
@@ -2,6 +2,8 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
+import com.vaadin.sass.ScssStylesheet;
+
public class MicrosoftRuleNode extends Node implements IVariableNode {
private final String name;
@@ -26,4 +28,9 @@ public class MicrosoftRuleNode extends Node implements IVariableNode {
public String toString() {
return name + ": " + value + ";";
}
+
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java
index 0cffbc3203..9f51a959b8 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MixinDefNode.java
@@ -19,6 +19,7 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
import java.util.Collection;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.util.DeepCopy;
public class MixinDefNode extends Node implements IVariableNode {
@@ -73,4 +74,15 @@ public class MixinDefNode extends Node implements IVariableNode {
}
}
+ @Override
+ public void traverse() {
+ if (!arglist.isEmpty()) {
+ for (final VariableNode arg : arglist) {
+ if (arg.getExpr() != null) {
+ ScssStylesheet.addVariable(arg);
+ }
+ }
+ }
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java b/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java
index 205f20b500..e43be0488a 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/MixinNode.java
@@ -19,7 +19,9 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
import java.util.Collection;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.parser.LexicalUnitImpl;
+import com.vaadin.sass.visitor.MixinNodeHandler;
public class MixinNode extends Node implements IVariableNode {
private static final long serialVersionUID = 4725008226813110658L;
@@ -67,6 +69,27 @@ public class MixinNode extends Node implements IVariableNode {
arg.replaceValue(var.getExpr());
}
}
+
+ if (name.startsWith("$")) {
+ if (name.equals("$" + var.getName())) {
+ name = var.getExpr().toString();
+ }
+ } else if (name.startsWith("#{") && name.endsWith("}")) {
+ if (name.equals("#{$" + var.getName() + "}")) {
+ name = var.getExpr().toString();
+ }
+ }
+
+ }
+ }
+
+ @Override
+ public void traverse() {
+ try {
+ replaceVariables(ScssStylesheet.getVariables());
+ MixinNodeHandler.traverse(this);
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java b/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java
index 27d3f5b23f..0b0dd90334 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/NestPropertiesNode.java
@@ -20,6 +20,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import com.vaadin.sass.visitor.NestedNodeHandler;
+
public class NestPropertiesNode extends Node implements IVariableNode {
private static final long serialVersionUID = 3671253315690598308L;
@@ -41,7 +43,8 @@ public class NestPropertiesNode extends Node implements IVariableNode {
public Collection<RuleNode> unNesting() {
List<RuleNode> result = new ArrayList<RuleNode>();
for (Node child : children) {
- result.add(createNewRuleNodeFromChild((RuleNode) child));
+ RuleNode createNewRuleNodeFromChild = createNewRuleNodeFromChild((RuleNode) child);
+ result.add(createNewRuleNodeFromChild);
}
return result;
}
@@ -63,4 +66,10 @@ public class NestPropertiesNode extends Node implements IVariableNode {
}
}
}
+
+ @Override
+ public void traverse() {
+ NestedNodeHandler.traverse(this);
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/Node.java b/theme-compiler/src/com/vaadin/sass/tree/Node.java
index 6e871df286..ccbd6d64da 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/Node.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/Node.java
@@ -24,28 +24,34 @@ public abstract class Node implements Serializable {
private static final long serialVersionUID = 5914711715839294816L;
protected ArrayList<Node> children;
- private String fileName;
- protected String rawString;
+ protected Node parentNode;
public Node() {
children = new ArrayList<Node>();
}
- public Node(String raw) {
- this();
- rawString = raw;
- }
-
public void appendAll(Collection<Node> nodes) {
if (nodes != null && !nodes.isEmpty()) {
children.addAll(nodes);
+
+ for (final Node n : nodes) {
+ if (n.getParentNode() != null) {
+ n.getParentNode().removeChild(n);
+ }
+ n.setParentNode(this);
+ }
+
}
}
public void appendChild(Node node) {
if (node != null) {
children.add(node);
+ if (node.getParentNode() != null) {
+ node.getParentNode().removeChild(node);
+ }
+ node.setParentNode(this);
}
}
@@ -54,6 +60,10 @@ public abstract class Node implements Serializable {
int index = children.indexOf(after);
if (index != -1) {
children.add(index + 1, node);
+ if (node.getParentNode() != null) {
+ node.getParentNode().removeChild(node);
+ }
+ node.setParentNode(this);
} else {
throw new NullPointerException("after-node was not found");
}
@@ -62,7 +72,10 @@ public abstract class Node implements Serializable {
public void removeChild(Node node) {
if (node != null) {
- children.remove(node);
+ boolean removed = children.remove(node);
+ if (removed) {
+ node.setParentNode(null);
+ }
}
}
@@ -78,21 +91,22 @@ public abstract class Node implements Serializable {
return !children.isEmpty();
}
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-
- public String getFileName() {
- return fileName;
- }
-
@Override
public String toString() {
return "";
}
- public String getRawString() {
- return rawString;
+ /**
+ * Method for manipulating the data contained within the {@link Node}.
+ */
+ public abstract void traverse();
+
+ public Node getParentNode() {
+ return parentNode;
+ }
+
+ private void setParentNode(Node parentNode) {
+ this.parentNode = parentNode;
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java b/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java
index aad4509616..38c5b1cb4e 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/RuleNode.java
@@ -19,9 +19,10 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
import java.util.regex.Pattern;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.parser.LexicalUnitImpl;
-public class RuleNode extends Node implements IVariableNode, InterpolationNode {
+public class RuleNode extends Node implements IVariableNode {
private static final long serialVersionUID = 6653493127869037022L;
String variable;
@@ -83,36 +84,51 @@ public class RuleNode extends Node implements IVariableNode, InterpolationNode {
@Override
public void replaceVariables(ArrayList<VariableNode> variables) {
for (final VariableNode node : variables) {
+
+ String interpolation = "#{$" + node.getName() + "}";
+
if (value.getLexicalUnitType() == LexicalUnitImpl.SAC_FUNCTION) {
- if (value.getParameters().toString()
- .contains("$" + node.getName())) {
- if (value.getParameters() != null) {
- if (value.getParameters().toString()
- .contains(node.getName())) {
-
- LexicalUnitImpl param = value.getParameters();
- while (param != null) {
- if (param.getValue().toString()
- .contains(node.getName())) {
-
- LexicalUnitImpl expr = node.getExpr();
-
- LexicalUnitImpl prev = param
- .getPreviousLexicalUnit();
- LexicalUnitImpl next = param
- .getNextLexicalUnit();
-
- if (param.getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE) {
- param.replaceValue(expr);
- param.setPrevLexicalUnit(prev);
- param.setNextLexicalUnit(next);
- }
+
+ if (value.getParameters() != null) {
+ if (value.getParameters().toString()
+ .contains(node.getName())) {
+
+ LexicalUnitImpl param = value.getParameters();
+ while (param != null) {
+ if (param.getValue().toString()
+ .contains(node.getName())) {
+
+ LexicalUnitImpl expr = node.getExpr();
+
+ LexicalUnitImpl prev = param
+ .getPreviousLexicalUnit();
+ LexicalUnitImpl next = param
+ .getNextLexicalUnit();
+
+ if (param.getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE) {
+ param.replaceValue(expr);
+ param.setPrevLexicalUnit(prev);
+ param.setNextLexicalUnit(next);
}
- param = param.getNextLexicalUnit();
}
+ param = param.getNextLexicalUnit();
}
}
}
+ } else if (value.getStringValue() != null
+ && value.getStringValue().contains(interpolation)) {
+ LexicalUnitImpl current = value;
+ while (current != null) {
+ if (current.getValue().toString().contains(interpolation)) {
+
+ current.setStringValue(current
+ .getValue()
+ .toString()
+ .replaceAll(Pattern.quote(interpolation),
+ node.getExpr().toString()));
+ }
+ current = current.getNextLexicalUnit();
+ }
} else {
LexicalUnitImpl current = value;
while (current != null) {
@@ -129,32 +145,7 @@ public class RuleNode extends Node implements IVariableNode, InterpolationNode {
}
@Override
- public void replaceInterpolation(String variableName, String variable) {
- if (this.variable.contains(variableName)) {
- this.variable = this.variable.replaceAll(variableName, variable);
- }
-
- if (value.toString().contains(variableName)) {
-
- LexicalUnitImpl current = value;
- while (current != null) {
- if (current.getValue().toString().contains(variableName)) {
- current.setStringValue(current
- .getValue()
- .toString()
- .replaceAll(
- Pattern.quote("#{" + variableName + "}"),
- variable));
- }
-
- current = value.getNextLexicalUnit();
- }
- }
- }
-
- @Override
- public boolean containsInterpolationVariable(String variable) {
- return value.toString().contains(variable)
- || this.variable.contains(variable);
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java b/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java
index 52329c1b14..adf1a3d15d 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/SimpleNode.java
@@ -2,6 +2,8 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
+import com.vaadin.sass.ScssStylesheet;
+
/**
* A simple BlockNode where input text equals output. <b>Note : </b> ignores any
* possible children so only use it when you are sure no child nodes will be
@@ -33,4 +35,9 @@ public class SimpleNode extends Node implements IVariableNode {
}
}
}
+
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java b/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
index 6ba27ebac5..3ea8379829 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/VariableNode.java
@@ -18,7 +18,9 @@ package com.vaadin.sass.tree;
import java.util.ArrayList;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.parser.LexicalUnitImpl;
+import com.vaadin.sass.visitor.VariableNodeHandler;
public class VariableNode extends Node implements IVariableNode {
private static final long serialVersionUID = 7003372557547748734L;
@@ -92,4 +94,10 @@ public class VariableNode extends Node implements IVariableNode {
unit = unit.getNextLexicalUnit();
}
}
+
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ VariableNodeHandler.traverse(this);
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/WhileNode.java b/theme-compiler/src/com/vaadin/sass/tree/WhileNode.java
index 465fec061d..4cd85a97a4 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/WhileNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/WhileNode.java
@@ -32,4 +32,9 @@ public class WhileNode extends Node {
return "While Node: { condition: " + condition + ", body:" + body + "}";
}
+ @Override
+ public void traverse() {
+
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
index cb209273cb..4ab8486add 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/EachDefNode.java
@@ -19,10 +19,12 @@ package com.vaadin.sass.tree.controldirective;
import java.util.ArrayList;
import java.util.List;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.parser.LexicalUnitImpl;
import com.vaadin.sass.tree.IVariableNode;
import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.VariableNode;
+import com.vaadin.sass.visitor.EachNodeHandler;
public class EachDefNode extends Node implements IVariableNode {
private static final long serialVersionUID = 7943948981204906221L;
@@ -88,4 +90,10 @@ public class EachDefNode extends Node implements IVariableNode {
public String getListVariable() {
return listVariable;
}
+
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ EachNodeHandler.traverse(this);
+ }
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java
index 529ce4d76e..ecda69d601 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/ElseNode.java
@@ -9,4 +9,9 @@ public class ElseNode extends Node implements IfElseNode {
return null;
}
+ @Override
+ public void traverse() {
+
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java
index 5bd3ba526c..9a818f0a20 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfElseDefNode.java
@@ -1,6 +1,7 @@
package com.vaadin.sass.tree.controldirective;
import com.vaadin.sass.tree.Node;
+import com.vaadin.sass.visitor.IfElseNodeHandler;
public class IfElseDefNode extends Node {
@@ -14,4 +15,17 @@ public class IfElseDefNode extends Node {
return b.toString();
}
+ public void traverse() {
+ try {
+
+ for (final Node child : children) {
+ child.traverse();
+ }
+
+ IfElseNodeHandler.traverse(this);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java
index 8de7ccf78a..cdaf1b0552 100644
--- a/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java
+++ b/theme-compiler/src/com/vaadin/sass/tree/controldirective/IfNode.java
@@ -18,6 +18,7 @@ package com.vaadin.sass.tree.controldirective;
import java.util.ArrayList;
import java.util.regex.Pattern;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.tree.IVariableNode;
import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.VariableNode;
@@ -46,11 +47,17 @@ public class IfNode extends Node implements IfElseNode, IVariableNode {
@Override
public void replaceVariables(ArrayList<VariableNode> variables) {
for (final VariableNode node : variables) {
- if (expression.contains("$" + node.getName())) {
- expression = expression.replaceAll(Pattern.quote("$"
- + node.getName()), node.getExpr().toString());
+ String variable = "$" + node.getName();
+ if (expression.contains(variable)) {
+ expression = expression.replaceAll(Pattern.quote(variable),
+ node.getExpr().toString());
}
}
}
+ @Override
+ public void traverse() {
+ replaceVariables(ScssStylesheet.getVariables());
+ }
+
} \ No newline at end of file
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java
new file mode 100644
index 0000000000..efbfc4b8ff
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/visitor/BlockNodeHandler.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.vaadin.sass.visitor;
+
+import java.util.ArrayList;
+
+import com.vaadin.sass.tree.BlockNode;
+import com.vaadin.sass.tree.Node;
+
+public class BlockNodeHandler {
+
+ public static void traverse(BlockNode node) {
+
+ Node parent = node.getParentNode();
+ if (node.getChildren().size() == 0) {
+ parent.removeChild(node);
+ while (parent != null && parent instanceof BlockNode
+ && parent.getChildren().size() == 0) {
+ Node temp = parent;
+ parent = parent.getParentNode();
+ parent.removeChild(temp);
+ }
+
+ return;
+ }
+
+ if (parent instanceof BlockNode) {
+ combineParentSelectorListToChild(node);
+ }
+ }
+
+ private static void combineParentSelectorListToChild(BlockNode node) {
+ ArrayList<String> newList = new ArrayList<String>();
+ ArrayList<String> parentSelectors = ((BlockNode) node.getParentNode())
+ .getSelectorList();
+ ArrayList<String> childSelectors = ((BlockNode) node).getSelectorList();
+ for (int i = 0; i < parentSelectors.size(); i++) {
+ String parentSelector = parentSelectors.get(i);
+ for (int j = 0; j < childSelectors.size(); j++) {
+ String childSelector = childSelectors.get(j);
+ newList.add(parentSelector + " " + childSelector);
+ }
+
+ }
+ node.setSelectorList(newList);
+ node.getParentNode().getParentNode()
+ .appendChild(node, node.getParentNode());
+ }
+}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/BlockVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/BlockVisitor.java
deleted file mode 100644
index 3cbf7e1f98..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/BlockVisitor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
- *
- * 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.vaadin.sass.visitor;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-
-import com.vaadin.sass.tree.BlockNode;
-import com.vaadin.sass.tree.Node;
-
-public class BlockVisitor implements Visitor {
-
- @Override
- public void traverse(Node node) {
- traverse(null, node);
- }
-
- private void traverse(Node parent, Node node) {
- Node after = node;
- Set<Node> toBeDeleted = new HashSet<Node>();
- for (int pos = 0; pos < node.getChildren().size(); pos++) {
- Node child = node.getChildren().get(pos);
-
- traverse(node, child);
-
- if (child instanceof BlockNode && node instanceof BlockNode
- && parent != null) {
- combineParentSelectorListToChild(node, child);
- toBeDeleted.add(child);
- parent.appendChild(child, after);
- after = child;
- } else if (child instanceof BlockNode
- && child.getChildren().size() == 0) {
- toBeDeleted.add(child);
- }
- }
- for (Node child : toBeDeleted) {
- node.removeChild(child);
- }
- }
-
- private void combineParentSelectorListToChild(Node parent, Node child) {
- if (parent instanceof BlockNode && child instanceof BlockNode) {
- ArrayList<String> newList = new ArrayList<String>();
- ArrayList<String> parentSelectors = ((BlockNode) parent)
- .getSelectorList();
- ArrayList<String> childSelectors = ((BlockNode) child)
- .getSelectorList();
- for (int i = 0; i < parentSelectors.size(); i++) {
- String parentSelector = parentSelectors.get(i);
- for (int j = 0; j < childSelectors.size(); j++) {
- String childSelector = childSelectors.get(j);
- newList.add(parentSelector + " " + childSelector);
- }
-
- }
- ((BlockNode) child).setSelectorList(newList);
- }
- }
-}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/EachNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/EachNodeHandler.java
new file mode 100644
index 0000000000..0eb86f3a80
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/visitor/EachNodeHandler.java
@@ -0,0 +1,57 @@
+package com.vaadin.sass.visitor;
+
+import java.util.ArrayList;
+
+import com.vaadin.sass.ScssStylesheet;
+import com.vaadin.sass.parser.LexicalUnitImpl;
+import com.vaadin.sass.tree.IVariableNode;
+import com.vaadin.sass.tree.Node;
+import com.vaadin.sass.tree.VariableNode;
+import com.vaadin.sass.tree.controldirective.EachDefNode;
+import com.vaadin.sass.util.DeepCopy;
+
+public class EachNodeHandler {
+
+ public static void traverse(EachDefNode node) {
+ replaceEachDefNode(node);
+ }
+
+ private static void replaceEachDefNode(EachDefNode defNode) {
+ Node last = defNode;
+
+ for (final String var : defNode.getVariables()) {
+ VariableNode varNode = new VariableNode(defNode.getVariableName()
+ .substring(1), LexicalUnitImpl.createIdent(var), false);
+ ArrayList<VariableNode> variables = new ArrayList<VariableNode>(
+ ScssStylesheet.getVariables());
+ variables.add(varNode);
+
+ for (final Node child : defNode.getChildren()) {
+
+ Node copy = (Node) DeepCopy.copy(child);
+
+ replaceInterpolation(copy, variables);
+
+ defNode.getParentNode().appendChild(copy, last);
+ last = copy;
+ }
+
+ }
+ defNode.setChildren(new ArrayList<Node>());
+ defNode.getParentNode().removeChild(defNode);
+ }
+
+ private static void replaceInterpolation(Node copy,
+ ArrayList<VariableNode> variables) {
+ if (copy instanceof IVariableNode) {
+ IVariableNode n = (IVariableNode) copy;
+ n.replaceVariables(variables);
+ }
+
+ for (Node c : copy.getChildren()) {
+ replaceInterpolation(c, variables);
+ }
+
+ }
+
+}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java
deleted file mode 100644
index de58947982..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/EachVisitor.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.vaadin.sass.visitor;
-
-import java.util.HashMap;
-import java.util.Map.Entry;
-
-import com.vaadin.sass.tree.BlockNode;
-import com.vaadin.sass.tree.Node;
-import com.vaadin.sass.tree.RuleNode;
-import com.vaadin.sass.tree.controldirective.EachDefNode;
-import com.vaadin.sass.util.DeepCopy;
-
-public class EachVisitor implements Visitor {
-
- HashMap<EachDefNode, Node> controlDefs = new HashMap<EachDefNode, Node>();
- private Node rootNode;
-
- @Override
- public void traverse(Node node) throws Exception {
- this.rootNode = node;
-
- findDefNodes(null, node);
-
- replaceControlNodes();
-
- }
-
- private void findDefNodes(Node parent, Node node) {
- for (Node child : node.getChildren()) {
- findDefNodes(node, child);
- }
- if (node instanceof EachDefNode) {
- controlDefs.put((EachDefNode) node, parent);
- }
- }
-
- private void replaceControlNodes() {
- for (final Entry<EachDefNode, Node> entry : controlDefs.entrySet()) {
- replaceEachDefNode(entry.getKey(), entry.getValue());
- }
- }
-
- private void replaceEachDefNode(EachDefNode defNode, Node parent) {
- Node last = defNode;
- for (final Node child : defNode.getChildren()) {
- if (child instanceof BlockNode) {
- BlockNode iNode = (BlockNode) child;
- String interpolation = "#{" + defNode.getVariableName() + "}";
- if (iNode.containsInterpolationVariable(interpolation)) {
- for (final String variable : defNode.getVariables()) {
- BlockNode copy = (BlockNode) DeepCopy.copy(child);
- copy.replaceInterpolation(defNode.getVariableName(),
- variable);
-
- for (final Node blockChild : copy.getChildren()) {
- if (blockChild instanceof RuleNode) {
- ((RuleNode) blockChild).replaceInterpolation(
- defNode.getVariableName(), variable);
- }
- }
-
- parent.appendChild(copy, last);
- last = copy;
- }
- }
- }
-
- last = child;
- }
- parent.removeChild(defNode);
- }
-
-}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ExtendVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/ExtendNodeHandler.java
index 23519b6e69..0e05781072 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/ExtendVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/ExtendNodeHandler.java
@@ -22,21 +22,20 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.tree.BlockNode;
import com.vaadin.sass.tree.ExtendNode;
import com.vaadin.sass.tree.Node;
-public class ExtendVisitor implements Visitor {
- private Map<String, List<ArrayList<String>>> extendsMap = new HashMap<String, List<ArrayList<String>>>();
+public class ExtendNodeHandler {
+ private static Map<String, List<ArrayList<String>>> extendsMap = new HashMap<String, List<ArrayList<String>>>();
- @Override
- public void traverse(Node node) throws Exception {
+ public static void traverse(ExtendNode node) throws Exception {
buildExtendsMap(node);
- modifyTree(node);
+ modifyTree(ScssStylesheet.get());
}
- @SuppressWarnings("unchecked")
- private void modifyTree(Node node) throws Exception {
+ private static void modifyTree(Node node) throws Exception {
for (Node child : node.getChildren()) {
if (child instanceof BlockNode) {
BlockNode blockNode = (BlockNode) child;
@@ -62,42 +61,22 @@ public class ExtendVisitor implements Visitor {
}
}
}
- } else {
- buildExtendsMap(child);
}
}
}
- private void buildExtendsMap(Node node) {
- if (node instanceof BlockNode) {
- BlockNode blockNode = (BlockNode) node;
- for (Node child : new ArrayList<Node>(node.getChildren())) {
- if (child instanceof ExtendNode) {
- ExtendNode extendNode = (ExtendNode) child;
-
- String extendedString = extendNode.getListAsString();
- if (extendsMap.get(extendedString) == null) {
- extendsMap.put(extendedString,
- new ArrayList<ArrayList<String>>());
- }
- extendsMap.get(extendedString).add(
- blockNode.getSelectorList());
- node.removeChild(child);
- } else {
- buildExtendsMap(child);
- }
- }
- } else {
- for (Node child : node.getChildren()) {
- buildExtendsMap(child);
- }
+ private static void buildExtendsMap(ExtendNode node) {
+ String extendedString = node.getListAsString();
+ if (extendsMap.get(extendedString) == null) {
+ extendsMap.put(extendedString, new ArrayList<ArrayList<String>>());
}
-
+ extendsMap.get(extendedString).add(
+ ((BlockNode) node.getParentNode()).getSelectorList());
}
- private void addAdditionalSelectorListToBlockNode(BlockNode blockNode,
- ArrayList<String> list, String selectorString) {
+ private static void addAdditionalSelectorListToBlockNode(
+ BlockNode blockNode, ArrayList<String> list, String selectorString) {
if (list != null) {
for (int i = 0; i < list.size(); i++) {
if (selectorString == null) {
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/IfElseNodeHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/IfElseNodeHandler.java
new file mode 100644
index 0000000000..593f22a631
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/visitor/IfElseNodeHandler.java
@@ -0,0 +1,102 @@
+package com.vaadin.sass.visitor;
+
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.jexl2.Expression;
+import org.apache.commons.jexl2.JexlEngine;
+import org.apache.commons.jexl2.JexlException;
+import org.w3c.flute.parser.ParseException;
+
+import com.vaadin.sass.tree.Node;
+import com.vaadin.sass.tree.controldirective.ElseNode;
+import com.vaadin.sass.tree.controldirective.IfElseDefNode;
+import com.vaadin.sass.tree.controldirective.IfElseNode;
+import com.vaadin.sass.tree.controldirective.IfNode;
+
+public class IfElseNodeHandler {
+
+ private static final JexlEngine evaluator = new JexlEngine();
+ private static final Pattern pattern = Pattern
+ .compile("[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*");
+
+ public static void traverse(IfElseDefNode node) throws Exception {
+
+ for (final Node child : node.getChildren()) {
+ if (child instanceof IfNode) {
+ try {
+ String expression = ((IfElseNode) child).getExpression();
+ // We need to add ' ' for strings in the expression for
+ // jexl to understand that is should do a string
+ // comparison
+ expression = replaceStrings(expression);
+ Expression e = evaluator.createExpression(expression);
+ try {
+ Object eval = e.evaluate(null);
+
+ Boolean result = false;
+ if (eval instanceof Boolean) {
+ result = (Boolean) eval;
+ } else if (eval instanceof String) {
+ result = Boolean.valueOf((String) eval);
+ }
+
+ if (result) {
+ replaceDefNodeWithCorrectChild(node,
+ node.getParentNode(), child);
+ break;
+ }
+ } catch (ClassCastException ex) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file, not a boolean expression : "
+ + child.toString());
+ } catch (NullPointerException ex) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file, not a boolean expression : "
+ + child.toString());
+ }
+ } catch (JexlException e) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file for "
+ + child.toString());
+ }
+ } else {
+ if (!(child instanceof ElseNode)
+ && node.getChildren().indexOf(child) == node
+ .getChildren().size() - 1) {
+ throw new ParseException(
+ "Invalid @if/@else in scss file for " + node);
+ } else {
+ replaceDefNodeWithCorrectChild(node, node.getParentNode(),
+ child);
+ break;
+ }
+ }
+ }
+
+ node.getParentNode().removeChild(node);
+ }
+
+ private static String replaceStrings(String expression) {
+ expression = expression.replaceAll("\"", "");
+ Matcher m = pattern.matcher(expression);
+ StringBuffer b = new StringBuffer();
+ while (m.find()) {
+ String group = m.group();
+ m.appendReplacement(b, "'" + group + "'");
+ }
+ m.appendTail(b);
+ if (b.length() != 0) {
+ return b.toString();
+ }
+ return expression;
+ }
+
+ private static void replaceDefNodeWithCorrectChild(IfElseDefNode defNode,
+ Node parent, final Node child) {
+ for (final Node n : new ArrayList<Node>(child.getChildren())) {
+ parent.appendChild(n, defNode);
+ }
+ }
+}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java
deleted file mode 100644
index 2cffb890ee..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/IfElseVisitor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.vaadin.sass.visitor;
-
-import java.util.HashMap;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.commons.jexl2.Expression;
-import org.apache.commons.jexl2.JexlEngine;
-import org.apache.commons.jexl2.JexlException;
-import org.w3c.flute.parser.ParseException;
-
-import com.vaadin.sass.tree.Node;
-import com.vaadin.sass.tree.controldirective.ElseNode;
-import com.vaadin.sass.tree.controldirective.IfElseDefNode;
-import com.vaadin.sass.tree.controldirective.IfElseNode;
-import com.vaadin.sass.tree.controldirective.IfNode;
-
-public class IfElseVisitor implements Visitor {
-
- private HashMap<Node, IfElseDefNode> controlDefs = new HashMap<Node, IfElseDefNode>();
-
- private static final JexlEngine evaluator = new JexlEngine();
- private static final Pattern pattern = Pattern
- .compile("[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*");
-
- @Override
- public void traverse(Node node) throws Exception {
- addControlDefs(node, node);
-
- for (final Entry<Node, IfElseDefNode> entry : controlDefs.entrySet()) {
- IfElseDefNode defNode = entry.getValue();
- Node parent = entry.getKey();
- for (final Node child : defNode.getChildren()) {
- if (child instanceof IfNode) {
- try {
- String expression = ((IfElseNode) child)
- .getExpression();
- // We need to add ' ' for strings in the expression for
- // jexl to understand that is should do a string
- // comparison
- expression = replaceStrings(expression);
- Expression e = evaluator.createExpression(expression);
- try {
- Object eval = e.evaluate(null);
-
- Boolean result = false;
- if (eval instanceof Boolean) {
- result = (Boolean) eval;
- } else if (eval instanceof String) {
- result = Boolean.valueOf((String) eval);
- }
-
- if (result) {
- replaceDefNodeWithCorrectChild(defNode, parent,
- child);
- break;
- }
- System.out.println();
- } catch (ClassCastException ex) {
- throw new ParseException(
- "Invalid @if/@else in scss file, not a boolean expression : "
- + child.toString());
- } catch (NullPointerException ex) {
- throw new ParseException(
- "Invalid @if/@else in scss file, not a boolean expression : "
- + child.toString());
- }
- } catch (JexlException e) {
- throw new ParseException(
- "Invalid @if/@else in scss file for "
- + child.toString());
- }
- } else {
- if (!(child instanceof ElseNode)
- && defNode.getChildren().indexOf(child) == defNode
- .getChildren().size() - 1) {
- throw new ParseException(
- "Invalid @if/@else in scss file for " + defNode);
- } else {
- replaceDefNodeWithCorrectChild(defNode, parent, child);
- break;
- }
- }
- }
-
- parent.removeChild(defNode);
- }
-
- }
-
- private String replaceStrings(String expression) {
- expression = expression.replaceAll("\"", "");
- Matcher m = pattern.matcher(expression);
- StringBuffer b = new StringBuffer();
- while (m.find()) {
- String group = m.group();
- m.appendReplacement(b, "'" + group + "'");
- }
- m.appendTail(b);
- if (b.length() != 0) {
- return b.toString();
- }
- return expression;
- }
-
- private void replaceDefNodeWithCorrectChild(IfElseDefNode defNode,
- Node parent, final Node child) {
- for (final Node n : child.getChildren()) {
- parent.appendChild(n, defNode);
- }
- }
-
- private void addControlDefs(Node current, Node node) {
- for (Node child : current.getChildren()) {
- addControlDefs(node, child);
- if (child instanceof IfElseDefNode) {
- controlDefs.put(current, (IfElseDefNode) child);
- }
- }
- }
-}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ImportVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/ImportNodeHandler.java
index bda040be39..f2fb128128 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/ImportVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/ImportNodeHandler.java
@@ -31,17 +31,15 @@ import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.RuleNode;
import com.vaadin.sass.util.StringUtil;
-public class ImportVisitor implements Visitor {
+public class ImportNodeHandler {
- @Override
- public void traverse(Node node) {
- for (Node child : new ArrayList<Node>(node.getChildren())) {
- if (child instanceof ImportNode) {
- ImportNode importNode = (ImportNode) child;
+ public static void traverse(ScssStylesheet node) {
+ ArrayList<Node> c = new ArrayList<Node>(node.getChildren());
+ for (Node n : c) {
+ if (n instanceof ImportNode) {
+ ImportNode importNode = (ImportNode) n;
if (!importNode.isPureCssImport()) {
-
try {
-
StringBuilder filePathBuilder = new StringBuilder(
node.getFileName());
filePathBuilder.append(File.separatorChar).append(
@@ -57,16 +55,20 @@ public class ImportVisitor implements Visitor {
}
if (imported == null) {
throw new FileNotFoundException(importNode.getUri()
- + " (parent: " + node.getFileName() + ")");
+ + " (parent: "
+ + ScssStylesheet.get().getFileName() + ")");
}
traverse(imported);
+
String prefix = getUrlPrefix(importNode.getUri());
if (prefix != null) {
updateUrlInImportedSheet(imported, prefix);
}
+
Node pre = importNode;
- for (Node importedChild : imported.getChildren()) {
+ for (Node importedChild : new ArrayList<Node>(
+ imported.getChildren())) {
node.appendChild(importedChild, pre);
pre = importedChild;
}
@@ -81,7 +83,7 @@ public class ImportVisitor implements Visitor {
}
}
- private String getUrlPrefix(String url) {
+ private static String getUrlPrefix(String url) {
if (url == null) {
return null;
}
@@ -92,7 +94,7 @@ public class ImportVisitor implements Visitor {
return url.substring(0, pos + 1);
}
- private void updateUrlInImportedSheet(Node node, String prefix) {
+ private static void updateUrlInImportedSheet(Node node, String prefix) {
for (Node child : node.getChildren()) {
if (child instanceof RuleNode) {
LexicalUnit value = ((RuleNode) child).getValue();
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ListModifyVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/ListModifyVisitor.java
deleted file mode 100644
index 3edb599a07..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/ListModifyVisitor.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.vaadin.sass.visitor;
-
-import java.util.ArrayList;
-
-import com.vaadin.sass.tree.ListModifyNode;
-import com.vaadin.sass.tree.Node;
-
-public class ListModifyVisitor implements Visitor {
-
- @Override
- public void traverse(Node node) throws Exception {
- for (final Node child : new ArrayList<Node>(node.getChildren())) {
- removeNodes(child, node);
- }
- }
-
- private void removeNodes(Node child, Node parent) {
- for (final Node c : new ArrayList<Node>(child.getChildren())) {
- removeNodes(c, child);
- }
-
- if (child instanceof ListModifyNode) {
- parent.removeChild(child);
- }
-
- }
-}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/MixinNodeHandler.java
index fecc717437..3c31ee1073 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/MixinVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/MixinNodeHandler.java
@@ -17,9 +17,8 @@
package com.vaadin.sass.visitor;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
+import com.vaadin.sass.ScssStylesheet;
import com.vaadin.sass.parser.LexicalUnitImpl;
import com.vaadin.sass.tree.IVariableNode;
import com.vaadin.sass.tree.MixinDefNode;
@@ -28,57 +27,35 @@ import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.VariableNode;
import com.vaadin.sass.util.DeepCopy;
-public class MixinVisitor implements Visitor {
- Map<String, MixinDefNode> mixinDefs = new HashMap<String, MixinDefNode>();
-
- @Override
- public void traverse(Node node) throws Exception {
- // create mixin map.
- for (Node child : node.getChildren()) {
- if (child instanceof MixinDefNode) {
- mixinDefs.put(((MixinDefNode) child).getName(),
- (MixinDefNode) child);
- }
- }
+public class MixinNodeHandler {
+ public static void traverse(MixinNode node) throws Exception {
replaceMixins(node);
-
- // delete MixinDefNode
- for (Node child : new ArrayList<Node>(node.getChildren())) {
- if (child instanceof MixinDefNode) {
- node.removeChild(child);
- }
- }
-
}
- private void replaceMixins(Node node) throws Exception {
- for (Node child : new ArrayList<Node>(node.getChildren())) {
- replaceMixins(child);
- if (child instanceof MixinNode) {
- MixinNode mixinNode = (MixinNode) child;
- MixinDefNode mixinDef = mixinDefs.get(mixinNode.getName());
- if (mixinDef == null) {
- throw new Exception("Mixin Definition: "
- + mixinNode.getName() + " not found");
- }
- replaceMixinNode(node, mixinNode, mixinDef);
- }
+ private static void replaceMixins(MixinNode node) throws Exception {
+ MixinDefNode mixinDef = ScssStylesheet.getMixinDefinition(node
+ .getName());
+ if (mixinDef == null) {
+ throw new Exception("Mixin Definition: " + node.getName()
+ + " not found");
}
+ replaceMixinNode(node, mixinDef);
}
- private void replaceMixinNode(Node current, MixinNode mixinNode,
+ private static void replaceMixinNode(MixinNode mixinNode,
MixinDefNode mixinDef) {
Node pre = mixinNode;
+
+ MixinDefNode defClone = (MixinDefNode) DeepCopy.copy(mixinDef);
+
if (mixinDef.getArglist().isEmpty()) {
- for (Node child : mixinDef.getChildren()) {
- current.appendChild(child, pre);
+ for (Node child : new ArrayList<Node>(defClone.getChildren())) {
+ mixinNode.getParentNode().appendChild(child, pre);
pre = child;
}
} else {
- MixinDefNode defClone = (MixinDefNode) DeepCopy.copy(mixinDef);
-
replacePossibleArguments(mixinNode, defClone);
Node previous = mixinNode;
@@ -88,14 +65,15 @@ public class MixinVisitor implements Visitor {
replaceChildVariables(defClone, clone);
- current.appendChild(clone, previous);
+ mixinNode.getParentNode().appendChild(clone, previous);
previous = clone;
}
}
- current.removeChild(mixinNode);
+
+ mixinNode.getParentNode().removeChild(mixinNode);
}
/**
@@ -106,7 +84,8 @@ public class MixinVisitor implements Visitor {
* @param mixinNode
* @param def
*/
- private void replacePossibleArguments(MixinNode mixinNode, MixinDefNode def) {
+ private static void replacePossibleArguments(MixinNode mixinNode,
+ MixinDefNode def) {
if (mixinNode.getArglist().size() > 0) {
ArrayList<VariableNode> remainingNodes = new ArrayList<VariableNode>(
@@ -140,7 +119,7 @@ public class MixinVisitor implements Visitor {
}
- private void replaceChildVariables(MixinDefNode mixinDef, Node node) {
+ private static void replaceChildVariables(MixinDefNode mixinDef, Node node) {
for (final Node child : node.getChildren()) {
replaceChildVariables(mixinDef, child);
}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/NestPropertiesVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java
index 82fbef42ef..bb094885f0 100644
--- a/theme-compiler/src/com/vaadin/sass/visitor/NestPropertiesVisitor.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/NestedNodeHandler.java
@@ -16,28 +16,18 @@
package com.vaadin.sass.visitor;
-import java.util.ArrayList;
-
import com.vaadin.sass.tree.NestPropertiesNode;
import com.vaadin.sass.tree.Node;
import com.vaadin.sass.tree.RuleNode;
-public class NestPropertiesVisitor implements Visitor {
+public class NestedNodeHandler {
- @Override
- public void traverse(Node node) {
- for (Node child : new ArrayList<Node>(node.getChildren())) {
- if (child instanceof NestPropertiesNode) {
- Node previous = child;
- for (RuleNode unNested : ((NestPropertiesNode) child)
- .unNesting()) {
- node.appendChild(unNested, previous);
- previous = unNested;
- node.removeChild(child);
- }
- } else {
- traverse(child);
- }
+ public static void traverse(NestPropertiesNode node) {
+ Node previous = node;
+ for (RuleNode unNested : node.unNesting()) {
+ node.getParentNode().appendChild(unNested, previous);
+ previous = unNested;
}
+ node.getParentNode().removeChild(node);
}
}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java b/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java
new file mode 100644
index 0000000000..77e0bba10b
--- /dev/null
+++ b/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorHandler.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.vaadin.sass.visitor;
+
+import java.util.ArrayList;
+
+import com.google.gwt.dev.util.collect.HashMap;
+import com.vaadin.sass.tree.BlockNode;
+import com.vaadin.sass.tree.Node;
+
+public class ParentSelectorHandler {
+
+ private static HashMap<Node, Node> parentSelectors = new HashMap<Node, Node>();
+
+ public static void traverse(BlockNode block) throws Exception {
+ Node parentNode = block.getParentNode();
+ if (parentNode instanceof BlockNode) {
+ boolean isParentSelector = false;
+ ArrayList<String> newList = new ArrayList<String>(block
+ .getSelectorList().size());
+ BlockNode parentBlock = (BlockNode) parentNode;
+ for (final String s : block.getSelectorList()) {
+
+ if (s.startsWith("&") || s.endsWith("&")) {
+ for (final String parentSelector : parentBlock
+ .getSelectorList()) {
+ newList.add(s.replace("&", parentSelector));
+ isParentSelector = true;
+ }
+
+ }
+ }
+
+ if (isParentSelector) {
+ block.setSelectorList(newList);
+ Node oldparent = block.getParentNode();
+ if (parentSelectors.containsKey(block.getParentNode())) {
+ block.getParentNode()
+ .getParentNode()
+ .appendChild(block,
+ parentSelectors.get(block.getParentNode()));
+ } else {
+ block.getParentNode().getParentNode()
+ .appendChild(block, block.getParentNode());
+ }
+
+ parentSelectors.put(oldparent, block);
+ }
+ }
+ }
+
+ public static void clear() {
+ parentSelectors.clear();
+ }
+}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorVisitor.java
deleted file mode 100644
index f515d63e96..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/ParentSelectorVisitor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
- *
- * 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.vaadin.sass.visitor;
-
-import java.util.ArrayList;
-
-import com.vaadin.sass.tree.BlockNode;
-import com.vaadin.sass.tree.Node;
-
-public class ParentSelectorVisitor implements Visitor {
-
- @Override
- public void traverse(Node node) throws Exception {
- for (Node child : new ArrayList<Node>(node.getChildren())) {
- if (child instanceof BlockNode) {
- traverse(node, (BlockNode) child);
- }
- }
- }
-
- private void traverse(Node parent, BlockNode block) throws Exception {
- Node pre = block;
- for (Node child : new ArrayList<Node>(block.getChildren())) {
- if (child instanceof BlockNode) {
- BlockNode blockChild = (BlockNode) child;
- traverse(block, blockChild);
- for (final String s : blockChild.getSelectorList()) {
-
- if (s.contains("&")) {
- parent.appendChild(child, pre);
- pre = child;
- block.removeChild(child);
-
- ArrayList<String> newList = new ArrayList<String>(block
- .getSelectorList().size());
- for (final String parentSelector : block
- .getSelectorList()) {
- newList.add(s.replace("&", parentSelector));
- }
- blockChild.setSelectorList(newList);
- }
- }
- }
- }
- }
-}
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/ImportVisitorTest.java b/theme-compiler/src/com/vaadin/sass/visitor/VariableNodeHandler.java
index 8459139b4b..3ea26433e2 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/ImportVisitorTest.java
+++ b/theme-compiler/src/com/vaadin/sass/visitor/VariableNodeHandler.java
@@ -14,12 +14,19 @@
* the License.
*/
-package com.vaadin.sass.testcases.visitor;
+package com.vaadin.sass.visitor;
-import org.junit.Test;
+import com.vaadin.sass.ScssStylesheet;
+import com.vaadin.sass.tree.VariableNode;
-public class ImportVisitorTest {
- @Test
- public void canHandleNestedImports() {
+public class VariableNodeHandler {
+
+ public static void traverse(VariableNode node) {
+ if (ScssStylesheet.getVariable(node.getName()) == null
+ || !node.isGuarded()) {
+ ScssStylesheet.addVariable(node);
+ }
+ node.getParentNode().removeChild(node);
}
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java b/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java
deleted file mode 100644
index c8e28cd9e3..0000000000
--- a/theme-compiler/src/com/vaadin/sass/visitor/VariableVisitor.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
- *
- * 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.vaadin.sass.visitor;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import com.vaadin.sass.tree.IVariableNode;
-import com.vaadin.sass.tree.ListModifyNode;
-import com.vaadin.sass.tree.Node;
-import com.vaadin.sass.tree.VariableNode;
-
-public class VariableVisitor implements Visitor {
-
- private final HashMap<String, VariableNode> variables = new HashMap<String, VariableNode>();
-
- @Override
- public void traverse(Node node) {
-
- replaceVariables(node, node.getChildren());
-
- removeVariableNodes(node, node);
- }
-
- private void removeVariableNodes(Node parent, Node node) {
- for (final Node child : new ArrayList<Node>(node.getChildren())) {
- removeVariableNodes(node, child);
- }
- if (node instanceof VariableNode) {
- for (final Node child : node.getChildren()) {
- parent.appendChild(child, node);
- }
- parent.removeChild(node);
- }
- }
-
- private void replaceVariables(Node n, ArrayList<Node> children) {
-
- ArrayList<VariableNode> variables = new ArrayList<VariableNode>(
- this.variables.values());
-
- for (Node node : children) {
-
- if (node instanceof IVariableNode) {
- ((IVariableNode) node)
- .replaceVariables(new ArrayList<VariableNode>(
- this.variables.values()));
- }
-
- if (node instanceof VariableNode) {
- VariableNode variableNode = (VariableNode) node;
- if (this.variables.containsKey(variableNode.getName())
- && variableNode.isGuarded()) {
- continue;
- }
- this.variables.put(variableNode.getName(), variableNode);
- } else if (node instanceof ListModifyNode) {
-
- ListModifyNode modify = (ListModifyNode) node;
-
- String variable = modify.getNewVariable().substring(1);
-
- try {
- VariableNode modifiedList = modify.getModifiedList();
-
- this.variables.put(variable, modifiedList);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- replaceVariables(node, node.getChildren());
- }
-
- for (final VariableNode v : variables) {
- this.variables.put(v.getName(), v);
- }
- }
-
-}
diff --git a/theme-compiler/tests/resources/css/parent-selector.css b/theme-compiler/tests/resources/css/parent-selector.css
index 32f8484457..0330782fbf 100644
--- a/theme-compiler/tests/resources/css/parent-selector.css
+++ b/theme-compiler/tests/resources/css/parent-selector.css
@@ -25,4 +25,8 @@ body.firefox a {
.mixin-parent:hover {
color: blue;
+}
+
+.part.one, .part.two {
+ color: blue;
} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/scss/_partial-for-import.scss b/theme-compiler/tests/resources/scss/_partial-for-import.scss
index 32c3149a5b..96af1c78ff 100644
--- a/theme-compiler/tests/resources/scss/_partial-for-import.scss
+++ b/theme-compiler/tests/resources/scss/_partial-for-import.scss
@@ -1,9 +1,13 @@
$foo : red;
-.caption {
- $side: right;
- border: 1px solid black;
- background: #ff0000;
- padding: 10px;
- margin: 10px;
-} \ No newline at end of file
+@mixin caption {
+ .caption {
+ $side: right;
+ border: 1px solid black;
+ background: #ff0000;
+ padding: 10px;
+ margin: 10px;
+ }
+}
+
+@include caption; \ No newline at end of file
diff --git a/theme-compiler/tests/resources/scss/mixins.scss b/theme-compiler/tests/resources/scss/mixins.scss
index e1fa80f357..6107897131 100644
--- a/theme-compiler/tests/resources/scss/mixins.scss
+++ b/theme-compiler/tests/resources/scss/mixins.scss
@@ -71,7 +71,9 @@ $mixinVar : 1px;
}
}
-@include layout;
+$layoutVariable : layout;
+
+@include $layoutVariable;
@mixin parent($color : green, $name : default) {
.#{$name}-inner {
diff --git a/theme-compiler/tests/resources/scss/parent-selector.scss b/theme-compiler/tests/resources/scss/parent-selector.scss
index 60e7608c07..ee02f8bf76 100644
--- a/theme-compiler/tests/resources/scss/parent-selector.scss
+++ b/theme-compiler/tests/resources/scss/parent-selector.scss
@@ -21,4 +21,10 @@ a {
.mixin-parent {
@include parent;
+}
+
+.part {
+ &.one, &.two {
+ color: blue;
+ }
} \ No newline at end of file
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java
index 7f3b3d6551..e1e1fee3b4 100644
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java
@@ -18,8 +18,7 @@ package com.vaadin.sass.testcases.scss;
import java.io.IOException;
-import junit.framework.Assert;
-
+import org.junit.Assert;
import org.junit.Test;
import org.w3c.css.sac.CSSException;
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java
deleted file mode 100644
index 56a35807d1..0000000000
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/MixinVisitorTest.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
- *
- * 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.vaadin.sass.testcases.visitor;
-
-import java.util.ArrayList;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.vaadin.sass.ScssStylesheet;
-import com.vaadin.sass.parser.LexicalUnitImpl;
-import com.vaadin.sass.parser.SCSSLexicalUnit;
-import com.vaadin.sass.tree.BlockNode;
-import com.vaadin.sass.tree.MixinDefNode;
-import com.vaadin.sass.tree.MixinNode;
-import com.vaadin.sass.tree.RuleNode;
-import com.vaadin.sass.tree.VariableNode;
-import com.vaadin.sass.visitor.MixinVisitor;
-
-public class MixinVisitorTest {
- private MixinVisitor mixinVisitor = new MixinVisitor();
-
- @Test
- public void testTraversMixinWithoutArgs() {
- ScssStylesheet root = new ScssStylesheet();
- MixinDefNode mixinDefNoArgs = new MixinDefNode("no-args", null);
- BlockNode blockNode = new BlockNode(null);
- mixinDefNoArgs.appendChild(blockNode);
- root.appendChild(mixinDefNoArgs);
-
- BlockNode blockWithMixin = new BlockNode(null);
- MixinNode mixin = new MixinNode("no-args", null);
- blockWithMixin.appendChild(mixin);
- root.appendChild(blockWithMixin);
-
- try {
- mixinVisitor.traverse(root);
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
-
- Assert.assertEquals(1, root.getChildren().size());
- BlockNode child = (BlockNode) root.getChildren().get(0);
- BlockNode fromMixin = (BlockNode) child.getChildren().get(0);
- Assert.assertFalse(fromMixin.hasChildren());
- }
-
- @Test
- public void testTraverseMixinWithNonDefaultArgs() {
- ScssStylesheet root = new ScssStylesheet();
- ArrayList<VariableNode> args = new ArrayList<VariableNode>();
- args.add(new VariableNode("arg", null, false));
- MixinDefNode mixinDefWithNonDefaultArg = new MixinDefNode(
- "non-default-arg", args);
- BlockNode blockNode = new BlockNode(null);
- mixinDefWithNonDefaultArg.appendChild(blockNode);
- root.appendChild(mixinDefWithNonDefaultArg);
-
- BlockNode blockWithMixin = new BlockNode(null);
- ArrayList<LexicalUnitImpl> includeArgs = new ArrayList<LexicalUnitImpl>();
- LexicalUnitImpl includeArg = LexicalUnitImpl.createPixel(1f);
- includeArg.setLexicalUnitType(LexicalUnitImpl.SAC_PIXEL);
- includeArg.setFloatValue(1);
- includeArgs.add(includeArg);
- MixinNode mixin = new MixinNode("non-default-arg", includeArgs);
- blockWithMixin.appendChild(mixin);
- root.appendChild(blockWithMixin);
-
- try {
- mixinVisitor.traverse(root);
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
-
- Assert.assertEquals(1, root.getChildren().size());
- BlockNode child = (BlockNode) root.getChildren().get(0);
- BlockNode fromMixin = (BlockNode) child.getChildren().get(0);
- Assert.assertFalse(fromMixin.hasChildren());
-
- }
-
- @Test
- public void testTraverseMixinWithDefaultArgs() {
- ScssStylesheet root = new ScssStylesheet();
- ArrayList<VariableNode> args = new ArrayList<VariableNode>();
- LexicalUnitImpl includeArg = LexicalUnitImpl.createPixel(1f);
- args.add(new VariableNode("arg", includeArg, false));
- MixinDefNode mixinDefWithNonDefaultArg = new MixinDefNode(
- "default-arg", args);
- BlockNode blockNode = new BlockNode(null);
- mixinDefWithNonDefaultArg.appendChild(blockNode);
- root.appendChild(mixinDefWithNonDefaultArg);
-
- BlockNode blockWithMixin = new BlockNode(null);
- MixinNode mixin = new MixinNode("default-arg", null);
- blockWithMixin.appendChild(mixin);
- root.appendChild(blockWithMixin);
-
- try {
- mixinVisitor.traverse(root);
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
-
- Assert.assertEquals(1, root.getChildren().size());
- BlockNode child = (BlockNode) root.getChildren().get(0);
- BlockNode fromMixin = (BlockNode) child.getChildren().get(0);
- Assert.assertFalse(fromMixin.hasChildren());
-
- }
-
- @Test
- public void testMixinWithoutArgument() {
- /*
- * ArrayList<String> args = new ArrayList<String>(); args.add("arg");
- * MixinDefNode mixinDefWithArgs = new MixinDefNode("with-args", args);
- * RuleNode ruleNode = new RuleNode("var",
- * com.vaadin.sass.parser.LexicalUnitImpl.createVariable(0, 0, null,
- * "arg"), false); mixinDefWithArgs.appendChild(ruleNode);
- */
- ScssStylesheet root = new ScssStylesheet();
- MixinDefNode mixinDefNoArgs = new MixinDefNode("table-base", null);
- BlockNode thBlockNode = new BlockNode(null);
- RuleNode textAlignRuleNode = new RuleNode("text-align",
- LexicalUnitImpl.createString("center"), false, null);
- thBlockNode.appendChild(textAlignRuleNode);
- RuleNode fontWeightRuleNode = new RuleNode("font-weight",
- LexicalUnitImpl.createString("bold"), false, null);
- thBlockNode.appendChild(fontWeightRuleNode);
- mixinDefNoArgs.appendChild(thBlockNode);
-
- BlockNode tdthBlockNode = new BlockNode(null);
- RuleNode paddingRuleNode = new RuleNode("padding",
- LexicalUnitImpl.createPixel(2f), false, null);
- tdthBlockNode.appendChild(paddingRuleNode);
- mixinDefNoArgs.appendChild(tdthBlockNode);
- root.appendChild(mixinDefNoArgs);
-
- BlockNode dataBlock = new BlockNode(null);
- MixinNode mixinNode = new MixinNode("table-base", null);
- dataBlock.appendChild(mixinNode);
- root.appendChild(dataBlock);
-
- try {
- mixinVisitor.traverse(root);
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
-
- Assert.assertEquals(1, root.getChildren().size());
- dataBlock = (BlockNode) root.getChildren().get(0);
- BlockNode thBlock = (BlockNode) dataBlock.getChildren().get(0);
- Assert.assertEquals(2, thBlock.getChildren().size());
- BlockNode thtdBlock = (BlockNode) dataBlock.getChildren().get(1);
- Assert.assertEquals(1, thtdBlock.getChildren().size());
-
- /*
- * Assert.assertEquals(2, root.getChildren().size()); BlockNode
- * datathBlockNode = (BlockNode) root.getChildren().get(0);
- * Assert.assertEquals(LexicalUnit.SAC_IDENT, datathBlockNode
- * .getSelectorList().item(0).getSelectorType());
- * Assert.assertEquals("text-align", ((RuleNode) datathBlockNode
- * .getChildren().get(0)).getVariable()); Assert.assertEquals("center",
- * ((RuleNode) datathBlockNode.getChildren()
- * .get(0)).getValue().getStringValue());
- * Assert.assertEquals("font-weight", ((RuleNode) datathBlockNode
- * .getChildren().get(1)).getVariable()); Assert.assertEquals("bold",
- * ((RuleNode) datathBlockNode.getChildren()
- * .get(1)).getValue().getStringValue());
- *
- * BlockNode datathdatatdBlockNode = (BlockNode)
- * root.getChildren().get(1); Assert.assertEquals(LexicalUnit.SAC_IDENT,
- * datathdatatdBlockNode .getSelectorList().item(0).getSelectorType());
- * Assert.assertEquals(LexicalUnit.SAC_IDENT, datathdatatdBlockNode
- * .getSelectorList().item(1).getSelectorType());
- * Assert.assertEquals("padding", ((RuleNode) datathdatatdBlockNode
- * .getChildren().get(0)).getVariable()); Assert.assertEquals(2.0f,
- * ((RuleNode) datathdatatdBlockNode
- * .getChildren().get(0)).getValue().getFloatValue(), 0);
- * Assert.assertEquals(LexicalUnit.SAC_PIXEL, ((RuleNode)
- * datathdatatdBlockNode.getChildren().get(0))
- * .getValue().getLexicalUnitType());
- */
-
- }
-
- @Test
- public void testMixinWithArgument() {
- ScssStylesheet root = new ScssStylesheet();
- ArrayList<VariableNode> argNameList = new ArrayList<VariableNode>();
- argNameList.add(new VariableNode("dist", null, false));
- MixinDefNode mixinDef = new MixinDefNode("left", argNameList);
-
- RuleNode floatRuleNode = new RuleNode("float",
- LexicalUnitImpl.createString("left"), false, null);
- mixinDef.appendChild(floatRuleNode);
- RuleNode marginLeftRuleNode = new RuleNode("margin-left",
- com.vaadin.sass.parser.LexicalUnitImpl.createVariable(0, 0,
- null, "dist"), false, null);
- mixinDef.appendChild(marginLeftRuleNode);
- root.appendChild(mixinDef);
-
- BlockNode dataBlock = new BlockNode(null);
- ArrayList<LexicalUnitImpl> argValueList = new ArrayList<LexicalUnitImpl>();
- LexicalUnitImpl arg = LexicalUnitImpl.createPixel(10f);
- argValueList.add(arg);
- MixinNode mixinNode = new MixinNode("left", argValueList);
- dataBlock.appendChild(mixinNode);
- root.appendChild(dataBlock);
-
- try {
- mixinVisitor.traverse(root);
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
-
- Assert.assertEquals(1, root.getChildren().size());
- BlockNode dataBlockNode = (BlockNode) root.getChildren().get(0);
- Assert.assertEquals("float", ((RuleNode) dataBlockNode.getChildren()
- .get(0)).getVariable());
- Assert.assertEquals("left", ((RuleNode) dataBlockNode.getChildren()
- .get(0)).getValue().getStringValue());
- Assert.assertEquals("margin-left", ((RuleNode) dataBlockNode
- .getChildren().get(1)).getVariable());
- Assert.assertEquals(SCSSLexicalUnit.SAC_PIXEL,
- ((RuleNode) dataBlockNode.getChildren().get(1)).getValue()
- .getLexicalUnitType());
- }
-
- @Test
- public void testTopLevelInclude() {
- ScssStylesheet root = new ScssStylesheet();
-
- MixinDefNode defNode = new MixinDefNode("mixin", null);
- defNode.appendChild(new RuleNode("var", null, false, null));
- root.appendChild(defNode);
-
- MixinNode mixinNode = new MixinNode("mixin", null);
- root.appendChild(mixinNode);
-
- try {
- mixinVisitor.traverse(root);
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
-
- Assert.assertEquals(1, root.getChildren().size());
- RuleNode varRule = (RuleNode) root.getChildren().get(0);
- Assert.assertEquals("var", varRule.getVariable());
-
- }
-
-}
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java
deleted file mode 100644
index eafdb4908f..0000000000
--- a/theme-compiler/tests/src/com/vaadin/sass/testcases/visitor/NestedPropertiesVisitorTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
- *
- * 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.vaadin.sass.testcases.visitor;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.vaadin.sass.ScssStylesheet;
-import com.vaadin.sass.tree.NestPropertiesNode;
-import com.vaadin.sass.tree.RuleNode;
-import com.vaadin.sass.visitor.NestPropertiesVisitor;
-
-public class NestedPropertiesVisitorTest {
- private NestPropertiesVisitor visitor = new NestPropertiesVisitor();
-
- @Test
- public void testEmptyTreeNoChange() {
- ScssStylesheet root = new ScssStylesheet();
- Assert.assertFalse(root.hasChildren());
- visitor.traverse(root);
- Assert.assertFalse(root.hasChildren());
- }
-
- @Test
- public void testNestedPropertiesCanBeUnnested() {
- ScssStylesheet root = new ScssStylesheet();
- NestPropertiesNode nested = new NestPropertiesNode("nested");
- RuleNode child0 = new RuleNode("child0", null, false, null);
- RuleNode child1 = new RuleNode("child1", null, true, null);
- nested.appendChild(child0);
- nested.appendChild(child1);
- root.appendChild(nested);
-
- Assert.assertEquals(1, root.getChildren().size());
- visitor.traverse(root);
- Assert.assertEquals(2, root.getChildren().size());
-
- for (int i = 0; i < root.getChildren().size(); i++) {
- RuleNode node = (RuleNode) root.getChildren().get(i);
- Assert.assertEquals("nested-child" + i, node.getVariable());
- }
- }
-}
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.html b/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.html
new file mode 100644
index 0000000000..ba75d7e56e
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.html
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.orderedlayout.OrderedLayoutComponentOrdering?restartApplication</td>
+ <td></td>
+</tr>
+<!--Add two buttons as first-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>3</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>4</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>2</td>
+</tr>
+<!--Add two buttons as second-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>3</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>5</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>6</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>4</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[4]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[5]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>2</td>
+</tr>
+<!--Add two buttons as third-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>3</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>5</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>7</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>8</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[4]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>6</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[5]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>4</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[6]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[7]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>2</td>
+</tr>
+<!--Move last to first-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[4]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[0]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>2</td>
+</tr>
+<!--Move forth to second-->
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[5]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentsorderedlayoutOrderedLayoutComponentOrdering::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[0]/VHorizontalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>7</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.java b/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.java
new file mode 100644
index 0000000000..5857df20b1
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutComponentOrdering.java
@@ -0,0 +1,83 @@
+package com.vaadin.tests.components.orderedlayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.HorizontalLayout;
+
+public class OrderedLayoutComponentOrdering extends TestBase {
+
+ int counter = 0;
+
+ @Override
+ protected void setup() {
+
+ // Initially horizontal layout has a,b
+ Button a = new Button(String.valueOf(++counter));
+ Button b = new Button(String.valueOf(++counter));
+ final HorizontalLayout hl = new HorizontalLayout(a, b);
+ hl.setCaption("Horizontal layout");
+ hl.setSpacing(true);
+ addComponent(hl);
+
+ Button addFirst = new Button("add first");
+ addFirst.addClickListener(new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ hl.addComponent(new Button(String.valueOf(++counter)), 0);
+ hl.addComponent(new Button(String.valueOf(++counter)), 1);
+ }
+ });
+ addComponent(addFirst);
+
+ Button add = new Button("add second");
+ add.addClickListener(new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ hl.addComponent(new Button(String.valueOf(++counter)), 1);
+ hl.addComponent(new Button(String.valueOf(++counter)), 2);
+ }
+ });
+ addComponent(add);
+
+ Button addThird = new Button("add third");
+ addThird.addClickListener(new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ hl.addComponent(new Button(String.valueOf(++counter)), 2);
+ hl.addComponent(new Button(String.valueOf(++counter)), 3);
+ }
+ });
+ addComponent(addThird);
+
+ Button move = new Button("move last to first");
+ move.addClickListener(new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ hl.addComponentAsFirst(hl.getComponent(hl.getComponentCount() - 1));
+ }
+ });
+ addComponent(move);
+
+ Button swap = new Button("move forth to second");
+ swap.addClickListener(new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ hl.addComponent(hl.getComponent(3), 1);
+ }
+ });
+ addComponent(swap);
+
+ }
+
+ @Override
+ protected String getDescription() {
+ return "The order should be 1,3,4,2";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10154;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/SerializerTestConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/SerializerTestConnector.java
index 6822edb34c..26d41bc655 100644
--- a/uitest/src/com/vaadin/tests/widgetset/client/SerializerTestConnector.java
+++ b/uitest/src/com/vaadin/tests/widgetset/client/SerializerTestConnector.java
@@ -79,7 +79,7 @@ public class SerializerTestConnector extends AbstractExtensionConnector {
updatedIntSet.add(Integer.valueOf(-integer.intValue()));
}
rpc.sendSet(updatedIntSet,
- Collections.singleton(getRootConnector()), beanSet);
+ Collections.singleton(getUIConnector()), beanSet);
}
@Override
@@ -103,7 +103,7 @@ public class SerializerTestConnector extends AbstractExtensionConnector {
rpc.sendMap(Collections.singletonMap("a", stringMap.get("b")),
Collections.singletonMap(getThisConnector(),
- connectorMap.get(getRootConnector())),
+ connectorMap.get(getUIConnector())),
Collections.singletonMap(
Integer.valueOf(stringMap.size()),
getThisConnector()), updatedBeanMap);
@@ -121,7 +121,7 @@ public class SerializerTestConnector extends AbstractExtensionConnector {
Collections.sort(intList);
Collections.reverse(beanList);
rpc.sendList(intList,
- Arrays.asList(getThisConnector(), getRootConnector()),
+ Arrays.asList(getThisConnector(), getUIConnector()),
beanList);
}
@@ -243,8 +243,8 @@ public class SerializerTestConnector extends AbstractExtensionConnector {
});
}
- private Connector getRootConnector() {
- return getConnection().getRootConnector();
+ private Connector getUIConnector() {
+ return getConnection().getUIConnector();
}
private Connector getThisConnector() {