10: Add checking <uses-sdk> element in BasePlugin
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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\
|
||||
|
||||
Reference in New Issue
Block a user