diff --git a/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java b/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java index 02a4346..030587f 100644 --- a/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java +++ b/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java @@ -7,6 +7,7 @@ import com.bartek.esa.error.EsaException; import com.bartek.esa.file.matcher.GlobMatcher; import com.github.javaparser.StaticJavaParser; import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.expr.Expression; import io.vavr.control.Try; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -61,5 +62,9 @@ public abstract class JavaPlugin extends BasePlugin { return globMatcher.fileMatchesGlobPattern(file, String.format("**/%s/**", path)); } + protected Integer getLineNumberFromExpression(Expression expression) { + return expression.getRange().map(r -> r.begin.line).orElse(null); + } + public abstract void run(CompilationUnit compilationUnit); } diff --git a/src/main/java/com/bartek/esa/core/di/CoreModule.java b/src/main/java/com/bartek/esa/core/di/CoreModule.java index 59d666d..bafe8ec 100644 --- a/src/main/java/com/bartek/esa/core/di/CoreModule.java +++ b/src/main/java/com/bartek/esa/core/di/CoreModule.java @@ -2,7 +2,6 @@ package com.bartek.esa.core.di; import com.bartek.esa.core.desc.provider.DescriptionProvider; import com.bartek.esa.core.executor.PluginExecutor; -import com.bartek.esa.core.java.JavaSyntaxRegexProvider; import com.bartek.esa.core.xml.XmlHelper; import dagger.Module; import dagger.Provides; @@ -15,11 +14,6 @@ public class CoreModule { return new PluginExecutor(xmlHelper); } - @Provides - public JavaSyntaxRegexProvider javaSyntaxRegexProvider() { - return new JavaSyntaxRegexProvider(); - } - @Provides public DescriptionProvider descriptionProvider() { return new DescriptionProvider(); diff --git a/src/main/java/com/bartek/esa/core/di/PluginModule.java b/src/main/java/com/bartek/esa/core/di/PluginModule.java index c1474b2..662c8fc 100644 --- a/src/main/java/com/bartek/esa/core/di/PluginModule.java +++ b/src/main/java/com/bartek/esa/core/di/PluginModule.java @@ -1,9 +1,13 @@ package com.bartek.esa.core.di; import com.bartek.esa.core.archetype.Plugin; +import com.bartek.esa.core.plugin.LoggingPlugin; +import com.bartek.esa.core.xml.XmlHelper; +import com.bartek.esa.file.matcher.GlobMatcher; import dagger.Module; import dagger.Provides; import dagger.multibindings.ElementsIntoSet; +import dagger.multibindings.IntoSet; import java.util.HashSet; import java.util.Set; @@ -16,4 +20,10 @@ public class PluginModule { public Set plugins() { return new HashSet<>(); } + + @Provides + @IntoSet + public Plugin loggingPlugin(GlobMatcher globMatcher, XmlHelper xmlHelper) { + return new LoggingPlugin(globMatcher, xmlHelper); + } } diff --git a/src/main/java/com/bartek/esa/core/java/JavaSyntaxRegexProvider.java b/src/main/java/com/bartek/esa/core/java/JavaSyntaxRegexProvider.java deleted file mode 100644 index d15c375..0000000 --- a/src/main/java/com/bartek/esa/core/java/JavaSyntaxRegexProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.bartek.esa.core.java; - -import javax.inject.Inject; - -import static java.lang.String.format; - -public class JavaSyntaxRegexProvider { - - @Inject - public JavaSyntaxRegexProvider() { - - } - - public String methodInvocation(String methodName) { - return format("^%s\\s*\\($", methodName); - } -} diff --git a/src/main/java/com/bartek/esa/core/plugin/LoggingPlugin.java b/src/main/java/com/bartek/esa/core/plugin/LoggingPlugin.java new file mode 100644 index 0000000..89be22d --- /dev/null +++ b/src/main/java/com/bartek/esa/core/plugin/LoggingPlugin.java @@ -0,0 +1,32 @@ +package com.bartek.esa.core.plugin; + +import com.bartek.esa.core.archetype.JavaPlugin; +import com.bartek.esa.core.model.enumeration.Severity; +import com.bartek.esa.core.xml.XmlHelper; +import com.bartek.esa.file.matcher.GlobMatcher; +import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.expr.MethodCallExpr; +import com.github.javaparser.ast.visitor.VoidVisitorAdapter; + +import javax.inject.Inject; + +public class LoggingPlugin extends JavaPlugin { + + @Inject + public LoggingPlugin(GlobMatcher globMatcher, XmlHelper xmlHelper) { + super(globMatcher, xmlHelper); + } + + @Override + public void run(CompilationUnit compilationUnit) { + compilationUnit.accept(new VoidVisitorAdapter() { + @Override + public void visit(MethodCallExpr methodCall, Void arg) { + if (methodCall.getName().getIdentifier().matches("v|d|i|w|e|wtf")) { + addIssue(Severity.INFO, getLineNumberFromExpression(methodCall), methodCall.toString()); + } + super.visit(methodCall, arg); + } + }, null); + } +} diff --git a/src/main/resources/description.properties b/src/main/resources/description.properties index 7efa949..705c689 100644 --- a/src/main/resources/description.properties +++ b/src/main/resources/description.properties @@ -1,4 +1,7 @@ com.bartek.esa.core.archetype.JavaPlugin.NO_PACKAGE=There is no package defined in AndroidManifest.xml file. \n\ Package should be defined as attribute of tag.\n\ For example: \n\ - Please fix it to use this tool. \ No newline at end of file + Please fix it to use this tool. + +com.bartek.esa.core.plugin.LoggingPlugin=Potential data leakage. \n\ + Logging method was detected. Please check if no sensitive data is logged there. \ No newline at end of file