From 2c44f5c4b77c4284224f0fe5685188c5b6131d39 Mon Sep 17 00:00:00 2001 From: Mikhail Mutcianko Date: Wed, 16 Jul 2014 16:40:11 +0400 Subject: [PATCH] missing files handling in converter - silently continue if no files were found to convert --- .../lang/resolve/android/AndroidUIXmlParser.kt | 16 ++++++++++------ .../resolve/jvm/TopDownAnalyzerFacadeForJVM.java | 8 +++++--- .../jetbrains/jet/codegen/AndroidXmlTest.java | 4 ++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt index 068774ce15f..aed34f993e4 100644 --- a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt +++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidUIXmlParser.kt @@ -10,19 +10,21 @@ import org.jetbrains.kotlin.psi.JetFile class AndroidUIXmlParser(val project: Project?, val searchPaths: Collection) { + inner class NoUIXMLsFound: Exception("No android UI xmls found in ${searchPaths.joinToString(", ")}") + val ids: MutableCollection = 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 filesToAnalyze = new ArrayList(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 searchAndAddAndroidDeclarations(Project project, Collection files) { AndroidUIXmlPathProvider provider = ServiceManager.getService(project, AndroidUIXmlPathProvider.class); Collection paths = provider.getPaths(); - return new AndroidUIXmlParser(project, paths).parseToPsi(); + JetFile file = new AndroidUIXmlParser(project, paths).parseToPsi(); + if (file != null) files.add(file); + return files; } } diff --git a/compiler/tests/org/jetbrains/jet/codegen/AndroidXmlTest.java b/compiler/tests/org/jetbrains/jet/codegen/AndroidXmlTest.java index 3f2c784e724..e45f3cc22be 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/AndroidXmlTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/AndroidXmlTest.java @@ -51,7 +51,7 @@ public class AndroidXmlTest extends TestCaseWithTmpdir { public void testCompileResult() throws Exception { ArrayList paths = new ArrayList(); 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);