From 53446c851d43a374323246831694e39de8a8e0aa Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 16 Feb 2017 14:32:36 -0800 Subject: [PATCH] Adding support for html style tag --- pmd-visualforce/etc/grammar/VfParser.jjt | 36 +++++++++++++++++-- .../pmd/lang/vf/ast/ASTHtmlStyle.java | 20 +++++++++++ .../lang/vf/ast/VfParserVisitorAdapter.java | 5 +++ .../pmd/lang/vf/rule/AbstractVfRule.java | 5 +++ .../pmd/lang/vf/ast/VfDocStyleTest.java | 6 ++-- 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/ASTHtmlStyle.java diff --git a/pmd-visualforce/etc/grammar/VfParser.jjt b/pmd-visualforce/etc/grammar/VfParser.jjt index bba956aa05..67bd67c061 100644 --- a/pmd-visualforce/etc/grammar/VfParser.jjt +++ b/pmd-visualforce/etc/grammar/VfParser.jjt @@ -88,7 +88,7 @@ PARSER_END(VfParser) < ()+ > } - SPECIAL_TOKEN : + SPECIAL_TOKEN : { < ()+ > } @@ -102,6 +102,8 @@ PARSER_END(VfParser) | : DocTypeState | : CDataState | : InTagState +| : InTagState + } TOKEN : @@ -193,7 +195,13 @@ PARSER_END(VfParser) TOKEN : { - | " | "" | ""> : AfterTagState + | " > : AfterTagState +} + + TOKEN : +{ + + | " > : AfterTagState } /** ************************* VF GRAMMAR **************************** */ @@ -250,6 +258,7 @@ void ContentElement() #void : | Element() | CData() | HtmlScript() + | HtmlStyle() ) } @@ -538,3 +547,26 @@ void HtmlScript() : ) ) } + +void HtmlStyle() : +{ + StringBuffer content = new StringBuffer(); + String tagName; + Token t; +} +{ + {} + (Attribute() )* {} + ( + ( + {token_source.SwitchTo(HtmlStyleContentState);} + (t = { content.append(t.image); })* + { jjtThis.setImage(content.toString().trim());} + + ) + | + ( + + ) + ) +} diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/ASTHtmlStyle.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/ASTHtmlStyle.java new file mode 100644 index 0000000000..ed9aa7d59f --- /dev/null +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/ASTHtmlStyle.java @@ -0,0 +1,20 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.vf.ast; + +public class ASTHtmlStyle extends AbstractVFNode { + public ASTHtmlStyle(int id) { + super(id); + } + + public ASTHtmlStyle(VfParser p, int id) { + super(p, id); + } + + /** Accept the visitor. **/ + public Object jjtAccept(VfParserVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParserVisitorAdapter.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParserVisitorAdapter.java index daaec95a02..06b07ffd51 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParserVisitorAdapter.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParserVisitorAdapter.java @@ -62,4 +62,9 @@ public class VfParserVisitorAdapter implements VfParserVisitor { public Object visit(ASTHtmlScript node, Object data) { return visit((VfNode) node, data); } + + @Override + public Object visit(ASTHtmlStyle node, Object data) { + return visit((VfNode) node, data); + } } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java index f0fadabf54..265d6e37ac 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java @@ -23,6 +23,7 @@ import net.sourceforge.pmd.lang.vf.ast.ASTDoctypeExternalId; import net.sourceforge.pmd.lang.vf.ast.ASTElExpression; import net.sourceforge.pmd.lang.vf.ast.ASTElement; import net.sourceforge.pmd.lang.vf.ast.ASTHtmlScript; +import net.sourceforge.pmd.lang.vf.ast.ASTHtmlStyle; import net.sourceforge.pmd.lang.vf.ast.ASTText; import net.sourceforge.pmd.lang.vf.ast.ASTUnparsedText; import net.sourceforge.pmd.lang.vf.ast.VfNode; @@ -106,4 +107,8 @@ public abstract class AbstractVfRule extends AbstractRule implements VfParserVis public Object visit(ASTHtmlScript node, Object data) { return visit((VfNode) node, data); } + + public Object visit(ASTHtmlStyle node, Object data) { + return visit((VfNode) node, data); + } } diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java index bcb1d5679b..ae117b4c49 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java @@ -199,8 +199,10 @@ public class VfDocStyleTest extends AbstractVfNodesTest { */ @Test public void testInlineCss() { - Set scripts = getNodes(ASTElement.class, TEST_INLINE_STYLE); - assertEquals("Three elements expected!", 3, scripts.size()); + Set elements = getNodes(ASTElement.class, TEST_INLINE_STYLE); + Set styles = getNodes(ASTHtmlStyle.class, TEST_INLINE_STYLE); + assertEquals("Two elements expected!", 2, elements.size()); + assertEquals("One style expected!", 1, styles.size()); } /**