missing files handling in converter

- silently continue if no files were found to convert
This commit is contained in:
Mikhail Mutcianko
2014-07-16 16:40:11 +04:00
committed by Yan Zhulanow
parent 155d2fa979
commit 2c44f5c4b7
3 changed files with 17 additions and 11 deletions
@@ -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) {
@@ -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);