10: Add checking <uses-sdk> element in BasePlugin

This commit is contained in:
Bartłomiej Pluta
2019-04-05 14:16:51 +02:00
parent 10d3f7d02d
commit f4ed3e259d
6 changed files with 59 additions and 3 deletions

View File

@@ -2,8 +2,11 @@ package com.bartek.esa.core.archetype;
import com.bartek.esa.core.model.enumeration.Severity;
import com.bartek.esa.core.model.object.Issue;
import com.bartek.esa.core.xml.XmlHelper;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import javax.xml.xpath.XPathConstants;
import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
@@ -11,10 +14,15 @@ import java.util.Map;
import java.util.Set;
public abstract class BasePlugin implements Plugin {
private final XmlHelper xmlHelper;
private Set<Issue> issues = new HashSet<>();
private Document manifest;
private File file;
public BasePlugin(XmlHelper xmlHelper) {
this.xmlHelper = xmlHelper;
}
@Override
public void update(File file, Document manifest) {
this.file = file;
@@ -24,10 +32,43 @@ public abstract class BasePlugin implements Plugin {
@Override
public Set<Issue> runForIssues() {
run(file);
if(canBeExecuted()) {
run(file);
}
return issues;
}
private boolean canBeExecuted() {
return hasDeclaredApiVersion();
}
private boolean hasDeclaredApiVersion() {
Node usesSdkNode = (Node) xmlHelper.xPath(manifest, "/manifest/uses-sdk", XPathConstants.NODE);
if(usesSdkNode == null) {
Issue issue = Issue.builder()
.issuer(BasePlugin.class)
.descriptionCode(".NO_USES_SDK")
.severity(Severity.ERROR)
.build();
addIssue(issue);
return false;
}
if(usesSdkNode.getAttributes().getNamedItem("android:minSdkVersion") == null) {
Issue issue = Issue.builder()
.issuer(BasePlugin.class)
.descriptionCode(".USES_SDK.NO_MIN_SDK_VERSION")
.severity(Severity.ERROR)
.build();
addIssue(issue);
return false;
}
return true;
}
protected abstract void run(File file);
protected void addIssue(Severity severity, Integer lineNumber, String line) {

View File

@@ -21,6 +21,7 @@ public abstract class JavaPlugin extends BasePlugin {
private final XmlHelper xmlHelper;
public JavaPlugin(GlobMatcher globMatcher, XmlHelper xmlHelper) {
super(xmlHelper);
this.globMatcher = globMatcher;
this.xmlHelper = xmlHelper;
}

View File

@@ -12,6 +12,7 @@ public abstract class XmlPlugin extends BasePlugin {
private final XmlHelper xmlHelper;
public XmlPlugin(GlobMatcher globMatcher, XmlHelper xmlHelper) {
super(xmlHelper);
this.globMatcher = globMatcher;
this.xmlHelper = xmlHelper;
}

View File

@@ -25,6 +25,6 @@ public class AllowBackupPlugin extends AndroidManifestPlugin {
if (!n.getNodeValue().equals("false")) {
addIssue(Severity.WARNING, ".NO_FALSE", null, n.toString());
}
}, () -> addIssue(Severity.ERROR, ".NO_ATTR", null, null));
}, () -> addIssue(Severity.WARNING, ".NO_ATTR", null, null));
}
}

View File

@@ -25,6 +25,6 @@ public class DebuggablePlugin extends AndroidManifestPlugin {
if(!n.getNodeValue().equals("false")) {
addIssue(Severity.WARNING, ".NO_FALSE", null, n.toString());
}
}, () -> addIssue(Severity.ERROR, ".NO_ATTR",null, null));
}, () -> addIssue(Severity.WARNING, ".NO_ATTR",null, null));
}
}

View File

@@ -1,3 +1,16 @@
com.bartek.esa.core.archetype.BasePlugin.NO_USES_SDK=There is no <uses-sdk> defined in AndroidManifest.xml file. \n\
In order to use this tool, <uses-sdk> should be defined in AndroidManifest.xml with android:minSdkVersion attribute at least.\n\
This element should be placed below the root (<manifest>) level.\n\
For example: \n\
<manifest>\n\
\t<uses-sdk android:minSdkVersion="23">\n\
\t...\n\
</manifest>
com.bartek.esa.core.archetype.BasePlugin.USES_SDK.NO_MIN_SDK_VERSION=There is no minSdkVersion defined in AndroidManifest.xml file. \n\
In order to use this tool, minimal SDK version should be provided as the attribute of <uses-sdk> element.\n\
For example: <uses-sdk android:minSdkVersion="23">
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 <manifest> tag.\n\
For example: <manifest package="com.bartek.esa.test">\n\