Moving the LoadedApk class to its own file.

Test: Unit tests pass.

Change-Id: Id706f9ad1f3406bb73a60a33139a04745d5d72c0
diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp
index 20439cc..8c28083 100644
--- a/tools/aapt2/Android.bp
+++ b/tools/aapt2/Android.bp
@@ -119,6 +119,7 @@
         "java/JavaClassGenerator.cpp",
         "java/ManifestClassGenerator.cpp",
         "java/ProguardRules.cpp",
+        "LoadedApk.cpp",
         "Locale.cpp",
         "Resource.cpp",
         "ResourceParser.cpp",
diff --git a/tools/aapt2/LoadedApk.cpp b/tools/aapt2/LoadedApk.cpp
new file mode 100644
index 0000000..3d466ef
--- /dev/null
+++ b/tools/aapt2/LoadedApk.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "LoadedApk.h"
+
+namespace aapt {
+
+std::unique_ptr<LoadedApk> LoadedApk::LoadApkFromPath(
+    IAaptContext* context, const StringPiece& path) {
+  Source source(path);
+  std::string error;
+  std::unique_ptr<io::ZipFileCollection> apk =
+      io::ZipFileCollection::Create(path, &error);
+  if (!apk) {
+    context->GetDiagnostics()->Error(DiagMessage(source) << error);
+    return {};
+  }
+
+  io::IFile* file = apk->FindFile("resources.arsc");
+  if (!file) {
+    context->GetDiagnostics()->Error(DiagMessage(source)
+                                     << "no resources.arsc found");
+    return {};
+  }
+
+  std::unique_ptr<io::IData> data = file->OpenAsData();
+  if (!data) {
+    context->GetDiagnostics()->Error(DiagMessage(source)
+                                     << "could not open resources.arsc");
+    return {};
+  }
+
+  std::unique_ptr<ResourceTable> table = util::make_unique<ResourceTable>();
+  BinaryResourceParser parser(context, table.get(), source, data->data(),
+                              data->size());
+  if (!parser.Parse()) {
+    return {};
+  }
+
+  return util::make_unique<LoadedApk>(source, std::move(apk), std::move(table));
+}
+
+}  // namespace aapt
diff --git a/tools/aapt2/LoadedApk.h b/tools/aapt2/LoadedApk.h
new file mode 100644
index 0000000..0cc2d22
--- /dev/null
+++ b/tools/aapt2/LoadedApk.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AAPT_LOADEDAPK_H
+#define AAPT_LOADEDAPK_H
+
+#include "androidfw/StringPiece.h"
+
+#include "io/ZipArchive.h"
+#include "ResourceTable.h"
+#include "unflatten/BinaryResourceParser.h"
+
+using android::StringPiece;
+
+namespace aapt {
+
+/** Info about an APK loaded in memory. */
+class LoadedApk {
+ public:
+  LoadedApk(
+      const Source& source,
+      std::unique_ptr<io::IFileCollection> apk,
+      std::unique_ptr<ResourceTable> table)
+      : source_(source), apk_(std::move(apk)), table_(std::move(table)) {}
+
+  io::IFileCollection* GetFileCollection() { return apk_.get(); }
+
+  ResourceTable* GetResourceTable() { return table_.get(); }
+
+  const Source& GetSource() { return source_; }
+
+  static std::unique_ptr<LoadedApk> LoadApkFromPath(
+      IAaptContext* context, const StringPiece& path);
+
+ private:
+  Source source_;
+  std::unique_ptr<io::IFileCollection> apk_;
+  std::unique_ptr<ResourceTable> table_;
+
+  DISALLOW_COPY_AND_ASSIGN(LoadedApk);
+};
+
+}  // namespace aapt
+
+#endif /* AAPT_LOADEDAPK_H */
diff --git a/tools/aapt2/diff/Diff.cpp b/tools/aapt2/diff/Diff.cpp
index de0fe40..acebeda 100644
--- a/tools/aapt2/diff/Diff.cpp
+++ b/tools/aapt2/diff/Diff.cpp
@@ -17,12 +17,10 @@
 #include "android-base/macros.h"
 
 #include "Flags.h"
-#include "ResourceTable.h"
+#include "LoadedApk.h"
 #include "ValueVisitor.h"
-#include "io/ZipArchive.h"
 #include "process/IResourceTableConsumer.h"
 #include "process/SymbolTable.h"
-#include "unflatten/BinaryResourceParser.h"
 
 using android::StringPiece;
 
@@ -51,61 +49,6 @@
   SymbolTable symbol_table_;
 };
 
-class LoadedApk {
- public:
-  LoadedApk(const Source& source, std::unique_ptr<io::IFileCollection> apk,
-            std::unique_ptr<ResourceTable> table)
-      : source_(source), apk_(std::move(apk)), table_(std::move(table)) {}
-
-  io::IFileCollection* GetFileCollection() { return apk_.get(); }
-
-  ResourceTable* GetResourceTable() { return table_.get(); }
-
-  const Source& GetSource() { return source_; }
-
- private:
-  Source source_;
-  std::unique_ptr<io::IFileCollection> apk_;
-  std::unique_ptr<ResourceTable> table_;
-
-  DISALLOW_COPY_AND_ASSIGN(LoadedApk);
-};
-
-static std::unique_ptr<LoadedApk> LoadApkFromPath(IAaptContext* context,
-                                                  const StringPiece& path) {
-  Source source(path);
-  std::string error;
-  std::unique_ptr<io::ZipFileCollection> apk =
-      io::ZipFileCollection::Create(path, &error);
-  if (!apk) {
-    context->GetDiagnostics()->Error(DiagMessage(source) << error);
-    return {};
-  }
-
-  io::IFile* file = apk->FindFile("resources.arsc");
-  if (!file) {
-    context->GetDiagnostics()->Error(DiagMessage(source)
-                                     << "no resources.arsc found");
-    return {};
-  }
-
-  std::unique_ptr<io::IData> data = file->OpenAsData();
-  if (!data) {
-    context->GetDiagnostics()->Error(DiagMessage(source)
-                                     << "could not open resources.arsc");
-    return {};
-  }
-
-  std::unique_ptr<ResourceTable> table = util::make_unique<ResourceTable>();
-  BinaryResourceParser parser(context, table.get(), source, data->data(),
-                              data->size());
-  if (!parser.Parse()) {
-    return {};
-  }
-
-  return util::make_unique<LoadedApk>(source, std::move(apk), std::move(table));
-}
-
 static void EmitDiffLine(const Source& source, const StringPiece& message) {
   std::cerr << source << ": " << message << "\n";
 }
@@ -413,9 +356,9 @@
   }
 
   std::unique_ptr<LoadedApk> apk_a =
-      LoadApkFromPath(&context, flags.GetArgs()[0]);
+      LoadedApk::LoadApkFromPath(&context, flags.GetArgs()[0]);
   std::unique_ptr<LoadedApk> apk_b =
-      LoadApkFromPath(&context, flags.GetArgs()[1]);
+      LoadedApk::LoadApkFromPath(&context, flags.GetArgs()[1]);
   if (!apk_a || !apk_b) {
     return 1;
   }