missing files handling in converter
- silently continue if no files were found to convert
This commit is contained in:
committed by
Yan Zhulanow
parent
155d2fa979
commit
2c44f5c4b7
+10
-6
@@ -10,19 +10,21 @@ import org.jetbrains.kotlin.psi.JetFile
|
||||
|
||||
class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection<File>) {
|
||||
|
||||
inner class NoUIXMLsFound: Exception("No android UI xmls found in ${searchPaths.joinToString(", ")}")
|
||||
|
||||
val ids: MutableCollection<AndroidWidget> = ArrayList()
|
||||
val kw = KotlinStringWriter()
|
||||
val androidImports = arrayListOf("android.app.Activity",
|
||||
"android.view.View",
|
||||
"android.widget.*")
|
||||
|
||||
public fun parse(): String {
|
||||
doParse()
|
||||
return produceKotlinSignatures().toString()
|
||||
public fun parseToString(): String? {
|
||||
return doParse()
|
||||
}
|
||||
|
||||
public fun parseToPsi(): JetFile {
|
||||
return JetPsiFactory(project).createFile(parse())
|
||||
public fun parseToPsi(): JetFile? {
|
||||
val s = parseToString()
|
||||
return if (s != null) JetPsiFactory(project).createFile(s) else null
|
||||
}
|
||||
|
||||
private fun isAndroidUIXml(file: File): Boolean {
|
||||
@@ -48,7 +50,8 @@ class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection<File
|
||||
kw.writeEmptyLine()
|
||||
}
|
||||
|
||||
private fun doParse() {
|
||||
private fun doParse(): String? {
|
||||
if (searchPaths.empty) return null
|
||||
val xmlStreams = searchForUIXml(searchPaths).map { FileInputStream(it) }
|
||||
val factory = SAXParserFactory.newInstance()
|
||||
factory?.setNamespaceAware(true)
|
||||
@@ -58,6 +61,7 @@ class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection<File
|
||||
for (xmlStream in xmlStreams) {
|
||||
parser.parse(xmlStream, handler)
|
||||
}
|
||||
return produceKotlinSignatures().toString()
|
||||
}
|
||||
|
||||
private fun widgetCallback(id: String, className: String) {
|
||||
|
||||
+5
-3
@@ -121,7 +121,7 @@ public enum TopDownAnalyzerFacadeForJVM {
|
||||
@Nullable IncrementalCacheProvider incrementalCacheProvider
|
||||
) {
|
||||
List<JetFile> filesToAnalyze = new ArrayList<JetFile>(files);
|
||||
filesToAnalyze.add(searchForAndroidDeclarations(project));
|
||||
searchAndAddAndroidDeclarations(project, filesToAnalyze);
|
||||
|
||||
FileBasedDeclarationProviderFactory providerFactory =
|
||||
new FileBasedDeclarationProviderFactory(topDownAnalysisParameters.getStorageManager(), filesToAnalyze);
|
||||
@@ -177,9 +177,11 @@ public enum TopDownAnalyzerFacadeForJVM {
|
||||
return module;
|
||||
}
|
||||
|
||||
private static JetFile searchForAndroidDeclarations(Project project) {
|
||||
private static Collection<JetFile> searchAndAddAndroidDeclarations(Project project, Collection<JetFile> files) {
|
||||
AndroidUIXmlPathProvider provider = ServiceManager.getService(project, AndroidUIXmlPathProvider.class);
|
||||
Collection<File> paths = provider.getPaths();
|
||||
return new AndroidUIXmlParser(project, paths).parseToPsi();
|
||||
JetFile file = new AndroidUIXmlParser(project, paths).parseToPsi();
|
||||
if (file != null) files.add(file);
|
||||
return files;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ public class AndroidXmlTest extends TestCaseWithTmpdir {
|
||||
public void testCompileResult() throws Exception {
|
||||
ArrayList<File> paths = new ArrayList<File>();
|
||||
paths.add(singleFile);
|
||||
String text = new AndroidUIXmlParser(null, paths).parse();
|
||||
String text = new AndroidUIXmlParser(null, paths).parseToString();
|
||||
JetCoreEnvironment jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(getTestRootDisposable(),
|
||||
ConfigurationKind.ALL);
|
||||
JetFile psiFile = JetTestUtils.createFile(singleFile.getName(), text, jetCoreEnvironment.getProject());
|
||||
@@ -75,7 +75,7 @@ public class AndroidXmlTest extends TestCaseWithTmpdir {
|
||||
paths.add(singleFile);
|
||||
AndroidUIXmlParser parser = new AndroidUIXmlParser(null, paths);
|
||||
|
||||
String actual = parser.parse();
|
||||
String actual = parser.parseToString();
|
||||
String expected = loadOrCreate(new File(getTestDataPath() + "/converter/singleFile/layout.kt"), actual);
|
||||
|
||||
assertEquals(expected, actual);
|
||||
|
||||
Reference in New Issue
Block a user