Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java')
-rw-r--r--bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java114
1 files changed, 114 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java
new file mode 100644
index 0000000000..042a314d52
--- /dev/null
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/util/CSSClassTraverser.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.css.core.util;
+
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+
+import org.eclipse.wst.css.core.document.ICSSImportRule;
+import org.eclipse.wst.css.core.document.ICSSMediaRule;
+import org.eclipse.wst.css.core.document.ICSSNode;
+import org.eclipse.wst.css.core.document.ICSSSelector;
+import org.eclipse.wst.css.core.document.ICSSSelectorItem;
+import org.eclipse.wst.css.core.document.ICSSSelectorList;
+import org.eclipse.wst.css.core.document.ICSSSimpleSelector;
+import org.eclipse.wst.css.core.document.ICSSStyleRule;
+import org.eclipse.wst.css.core.document.ICSSStyleSheet;
+
+
+/**
+ *
+ */
+public class CSSClassTraverser extends AbstractCssTraverser {
+
+ ArrayList fClassNames;
+
+ /**
+ *
+ */
+ public CSSClassTraverser() {
+ super();
+ }
+
+ /**
+ *
+ */
+ private void addClassNames(ICSSStyleRule rule) {
+ ICSSSelectorList selectorList = rule.getSelectors();
+ Iterator iSelector = selectorList.getIterator();
+ while (iSelector.hasNext()) {
+ ICSSSelector selector = (ICSSSelector) iSelector.next();
+ Iterator iItem = selector.getIterator();
+ while (iItem.hasNext()) {
+ ICSSSelectorItem item = (ICSSSelectorItem) iItem.next();
+ if (item.getItemType() == ICSSSelectorItem.SIMPLE) {
+ ICSSSimpleSelector sel = (ICSSSimpleSelector) item;
+ int nClasses = sel.getNumOfClasses();
+ for (int iClass = 0; iClass < nClasses; iClass++) {
+ String className = sel.getClass(iClass);
+ if (!fClassNames.contains(className))
+ fClassNames.add(className);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ *
+ */
+ protected void begin(ICSSNode node) {
+ if (fClassNames == null)
+ fClassNames = new ArrayList();
+ }
+
+ /**
+ *
+ */
+ protected void end(ICSSNode node) {
+ }
+
+ /**
+ *
+ */
+ public Collection getClassNames() {
+ return (fClassNames != null) ? fClassNames : Collections.EMPTY_LIST;
+ }
+
+ /**
+ *
+ */
+ protected short postNode(ICSSNode node) {
+ return TRAV_CONT;
+ }
+
+ /**
+ *
+ */
+ protected short preNode(ICSSNode node) {
+ short ret;
+ if (node instanceof ICSSStyleRule) {
+ addClassNames((ICSSStyleRule) node);
+ ret = TRAV_PRUNE;
+ }
+ else if (node instanceof ICSSStyleSheet || node instanceof ICSSMediaRule || node instanceof ICSSImportRule) {
+ ret = TRAV_CONT;
+ }
+ else {
+ ret = TRAV_PRUNE;
+ }
+ return ret;
+ }
+} \ No newline at end of file

Back to the top