Skip to content

Commit

Permalink
#246 fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
ryaneberly committed Mar 7, 2017
1 parent 1d98922 commit bd4d885
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 1 deletion.
44 changes: 43 additions & 1 deletion src/main/java/com/cflint/CFLint.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -55,6 +58,7 @@
import cfml.parsing.cfscript.CFFunctionExpression;
import cfml.parsing.cfscript.CFIdentifier;
import cfml.parsing.cfscript.CFStatement;
import cfml.parsing.cfscript.CFStringExpression;
import cfml.parsing.cfscript.CFVarDeclExpression;
import cfml.parsing.cfscript.script.CFCase;
import cfml.parsing.cfscript.script.CFCatchStatement;
Expand All @@ -67,6 +71,7 @@
import cfml.parsing.cfscript.script.CFFunctionParameter;
import cfml.parsing.cfscript.script.CFIfStatement;
import cfml.parsing.cfscript.script.CFParsedStatement;
import cfml.parsing.cfscript.script.CFPropertyStatement;
import cfml.parsing.cfscript.script.CFReturnStatement;
import cfml.parsing.cfscript.script.CFScriptStatement;
import cfml.parsing.cfscript.script.CFSwitchStatement;
Expand Down Expand Up @@ -473,6 +478,28 @@ private void process(final CFScriptStatement expression, Context context) {
} else if (expression instanceof CFExpressionStatement) {
scanExpression(expression, context, elem);
process(((CFExpressionStatement) expression).getExpression(), elem, context);
} else if (expression instanceof CFPropertyStatement) {
try{
//TODO fix this to use getPropertyName() when it is available and not null.
Field field = CFPropertyStatement.class.getDeclaredField("propertyName");
field.setAccessible(true);
CFExpression value = (CFExpression)field.get(expression);
if(value == null){
for(Entry<CFIdentifier, CFExpression> entry:((CFPropertyStatement)expression).getAttributes().entrySet()){
if("name".equals(entry.getKey().getName())){
value = entry.getValue();
}
}
}
String name = value.Decompile(0);
handler.addVariable(name.substring(1, name.length()-1));
}catch(Exception e){
e.printStackTrace();
}
scanExpression(expression, context, elem);
// for(CFExpression expr: ((CFPropertyStatement) expression).decomposeExpression()){
// process(expr, elem, context);
// }
} else if (expression instanceof CFCompDeclStatement) {
CFCompDeclStatement compDeclStatement = (CFCompDeclStatement) expression;
final Context componentContext = context.subContext(null);
Expand All @@ -488,7 +515,21 @@ private void process(final CFScriptStatement expression, Context context) {

scanExpression(compDeclStatement, componentContext, elem);
// process the component declaration
process(compDeclStatement.getBody(), componentContext);
if(compDeclStatement.getBody() instanceof CFCompoundStatement){
//Process property expressions first
for(CFScriptStatement subscript: compDeclStatement.getBody().decomposeScript()){
if(subscript instanceof CFPropertyStatement){
process(subscript, componentContext);
}
}
for(CFScriptStatement subscript: compDeclStatement.getBody().decomposeScript()){
if(!(subscript instanceof CFPropertyStatement)){
process(subscript, componentContext);
}
}
}else{
process(compDeclStatement.getBody(), componentContext);
}
// do endComponent notifications
for (final CFLintStructureListener structurePlugin : getStructureListeners(extensions)) {
try {
Expand Down Expand Up @@ -711,6 +752,7 @@ private void process(final CFExpression expression, final Element elem, Context
handler.addVariable(((CFVarDeclExpression) expression).getName());
}


//CFIdentifier should not decompose
if (expression instanceof CFIdentifier) {
final String name = ((CFIdentifier) expression).getName();
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/cflint/plugins/core/VarScoper.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import cfml.parsing.cfscript.CFExpression;
import cfml.parsing.cfscript.CFFullVarExpression;
import cfml.parsing.cfscript.CFIdentifier;
import cfml.parsing.cfscript.script.CFPropertyStatement;
import cfml.parsing.cfscript.script.CFScriptStatement;
import net.htmlparser.jericho.Element;

public class VarScoper extends CFLintScannerAdapter {
Expand All @@ -38,6 +40,14 @@ public void expression(final CFExpression expression, final Context context, fin
}
}
}

@Override
public void expression(final CFScriptStatement expression, final Context context, final BugList bugs) {
if(expression instanceof CFPropertyStatement ){
final CFPropertyStatement propertyStatement = (CFPropertyStatement)expression;

}
}

public VarScoper() {
// CHECK_ELEMENT_ATTRIBUTES.put("cfloop",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
component {
property name="foo" type="string";

public void function bar() {
foo = "baz";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ ]

0 comments on commit bd4d885

Please sign in to comment.