Skip to content

Commit

Permalink
end of the day 2
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-zuy committed Jan 2, 2015
1 parent 299a1ea commit d3ba69f
Showing 1 changed file with 85 additions and 34 deletions.
@@ -1,7 +1,7 @@
package com.github.sevntu.checkstyle.checks.coding;

import java.util.HashMap;
import java.util.LinkedList;


import com.puppycrawl.tools.checkstyle.api.Check;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
Expand All @@ -11,69 +11,80 @@ public class EmptyPublicCtorInClassCheck extends Check
{
public static final String MSG_KEY = "empty.public.ctor";

private HashMap<DetailAST, LinkedList<DetailAST>> mClassDefToCtorDefsMap =
new HashMap<DetailAST, LinkedList<DetailAST>>();
private HashMap<DetailAST, ClassCtorInfo> mClassDefToClassCtorInfoMap = new HashMap<>();

@Override
public int[] getDefaultTokens()
public void beginTree(DetailAST aRoot)
{
return new int[] { TokenTypes.CTOR_DEF };
mClassDefToClassCtorInfoMap.clear();
}

@Override
public void beginTree(DetailAST aRoot)
public int[] getDefaultTokens()
{
mClassDefToCtorDefsMap.clear();
return new int[] { TokenTypes.CTOR_DEF };
}

@Override
public void visitToken(DetailAST aCtorDefNode)
{
DetailAST classDefNode =getClassDefinitionNode(aCtorDefNode);
addCtorDefNodeForClassDefNode(classDefNode, aCtorDefNode);
DetailAST classDefNode = getClassDefNode(aCtorDefNode);

addClassCtorInfoForClass(classDefNode, aCtorDefNode);
}

@Override
public void finishTree(DetailAST aRoot)
{

for (ClassCtorInfo classCtorInfo : mClassDefToClassCtorInfoMap.values())
{
if (classCtorInfo.getCtorCount() == 1)
{
DetailAST ctorDefNode = classCtorInfo.getLastCtorDefNode();

if (isCtorPublic(ctorDefNode) && isCtorEmpty(ctorDefNode))
{
log(ctorDefNode.getLineNo(), MSG_KEY);
}
}
}
}

private boolean isCtorPublic(DetailAST aCtorDefNode)
{
boolean result =false;
DetailAST modifiers =aCtorDefNode.findFirstToken(TokenTypes.MODIFIERS);
if(modifiers != null)
boolean result = false;

DetailAST modifiers = aCtorDefNode.findFirstToken(TokenTypes.MODIFIERS);

if (modifiers != null)
{
DetailAST publicLiteral =modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC);
DetailAST publicLiteral = modifiers.findFirstToken(TokenTypes.LITERAL_PUBLIC);
result = publicLiteral != null;
}

return result;
}

private boolean isCtorEmpty(DetailAST aCtorDefNode)
{

}

private void addCtorDefNodeForClassDefNode(DetailAST aClassDefNode, DetailAST aCtorDefNode)
{
LinkedList<DetailAST> classCtors =mClassDefToCtorDefsMap.get(aClassDefNode);

if(classCtors == null)
boolean result = false;
DetailAST ctorParametersNode = aCtorDefNode.findFirstToken(TokenTypes.PARAMETERS);

if (ctorParametersNode.getChildCount() == 0)
{
classCtors =new LinkedList<>();
mClassDefToCtorDefsMap.put(aClassDefNode, classCtors);
DetailAST slistNode = aCtorDefNode.findFirstToken(TokenTypes.SLIST);

if (slistNode.getChildCount() == 1
&& slistNode.getFirstChild().getType() == TokenTypes.RCURLY)
{
result = true;
}
}
classCtors.add(aCtorDefNode);

return result;
}

private static DetailAST getClassDefinitionNode(DetailAST aCtorDefNode)
private static DetailAST getClassDefNode(DetailAST aCtorDefNode)
{
DetailAST result = aCtorDefNode;

Expand All @@ -83,4 +94,44 @@ private static DetailAST getClassDefinitionNode(DetailAST aCtorDefNode)
return result;
}

private void addClassCtorInfoForClass(DetailAST aClassDefNode, DetailAST aCtorDefNode)
{
ClassCtorInfo classCtorInfo = mClassDefToClassCtorInfoMap.get(aClassDefNode);

if (classCtorInfo == null)
{
classCtorInfo = new ClassCtorInfo();
classCtorInfo.putLastCtorDefNode(aCtorDefNode);
mClassDefToClassCtorInfoMap.put(aClassDefNode, classCtorInfo);
}
else
{
classCtorInfo.putLastCtorDefNode(aCtorDefNode);
}
}

private static class ClassCtorInfo
{
private int mCtorCount = 0;

private DetailAST mLastCtorDefNode;

public void putLastCtorDefNode(DetailAST aCtorDefNode)
{
mLastCtorDefNode = aCtorDefNode;

++mCtorCount;
}

public int getCtorCount()
{
return mCtorCount;
}

public DetailAST getLastCtorDefNode()
{
return mLastCtorDefNode;
}
}

}

0 comments on commit d3ba69f

Please sign in to comment.