diff options
author | Sergey Prigogin <sprigogin@google.com> | 2019-06-17 17:04:25 -0700 |
---|---|---|
committer | Sergey Prigogin <sprigogin@google.com> | 2019-06-19 15:50:39 +0000 |
commit | 80ab857c6c59e2c4e9e57c810147f6680d93a114 (patch) | |
tree | 30ca76bb75f7d9dc760c79c4383d783ee07d21b7 | |
parent | d6d82807bd4b820de962a851e9649de1b5b7fe3d (diff) | |
download | idea-80ab857c6c59e2c4e9e57c810147f6680d93a114.tar.gz |
Add framework_res.jar to prebuilts
Test: FrameworkResJarTest
Bug: N/A
Change-Id: I2e81bbbeaf18ac088b96d1af9bdf4030593c174c
17 files changed, 240 insertions, 151 deletions
diff --git a/android-kotlin/BUILD b/android-kotlin/BUILD index 7bce8ab8823..b977e38912e 100644 --- a/android-kotlin/BUILD +++ b/android-kotlin/BUILD @@ -126,10 +126,10 @@ iml_module( # keep sorted test_data = [ ":testData", + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/sdk:platforms/latest", "//prebuilts/tools/common/kotlin-plugin:kotlinc-files", "//tools/adt/idea/android/annotations", - "//tools/adt/idea/resources-aar:framework_res", "//tools/idea:platform-build-info", ], # do not sort: must match IML order diff --git a/android-kotlin/idea-android/tests/org/jetbrains/kotlin/android/KotlinAndroidTestSuite.kt b/android-kotlin/idea-android/tests/org/jetbrains/kotlin/android/KotlinAndroidTestSuite.kt index 7acb1245ea8..13fd5a983f3 100644 --- a/android-kotlin/idea-android/tests/org/jetbrains/kotlin/android/KotlinAndroidTestSuite.kt +++ b/android-kotlin/idea-android/tests/org/jetbrains/kotlin/android/KotlinAndroidTestSuite.kt @@ -28,8 +28,7 @@ class KotlinAndroidTestSuite : IdeaTestSuiteBase() { IdeaTestSuiteBase.symlinkToIdeaHome( "prebuilts/studio/layoutlib", "tools/adt/idea/android/annotations", - "tools/adt/idea/android/lib", - "tools/adt/idea/resources-aar/framework_res.jar") + "tools/adt/idea/android/lib") IdeaTestSuiteBase.symlinkToIdeaHome( "tools/adt/idea/android-kotlin/android-extensions-idea/testData", diff --git a/android-uitests/BUILD b/android-uitests/BUILD index cddfd3677be..91c699f665c 100644 --- a/android-uitests/BUILD +++ b/android-uitests/BUILD @@ -131,7 +131,7 @@ java_test( name = "ResolveXmlReferencesTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/data-binding:data_binding_runtime.zip", ] + glob([ "testData/DatabindingMethodsTest/**", @@ -146,7 +146,7 @@ java_test( name = "NewProjectTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.uibuilder.NewProjectTest"], tags = COMMON_TAGS + ["manual"], #sanity test passing, but latestSupportLibraryWhileDndLayouts failed for UI reason @@ -158,7 +158,7 @@ java_test( name = "NewActivityTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -173,9 +173,9 @@ java_test( size = "large", data = COMMON_DATA + [ # TODO: Remove the dependency on support-annotations once Bazel no longer requires support-annotations to build Android apps. + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/sdk:tools/support-annotations", "//prebuilts/tools/common/m2/repository/com/android/support/appcompat-v7/26.1.0:aar", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]) + glob(["testData/LayoutTest/**"]), @@ -189,7 +189,7 @@ java_test( name = "ConstraintLayoutTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", "testData/LayoutTest/**", @@ -204,7 +204,7 @@ java_test( name = "GradleSyncTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -218,7 +218,7 @@ java_test( name = "NewModuleTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", "testData/LocalJarsAsModules/**", @@ -234,7 +234,7 @@ java_test( name = "BuildTypesTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -249,7 +249,7 @@ java_test( name = "LayoutInspectorTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", "testData/LayoutInspector/**", @@ -267,7 +267,7 @@ java_test( name = "ConvertToWebpActionTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/ImportLocalWebpProject/**", ]), @@ -280,7 +280,7 @@ java_test( java_test( name = "FilterIconTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -342,7 +342,7 @@ java_test( java_test( name = "CreateDefaultActivityTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -471,8 +471,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -492,8 +492,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -513,8 +513,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -534,8 +534,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleFlavoredApplication/**", ]), @@ -605,7 +605,7 @@ java_test( name = "CreateBasicKotlinProjectTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = [ "-Dtest.suite.class=com.android.tools.idea.tests.gui.kotlin.CreateBasicKotlinProjectTest", @@ -623,7 +623,7 @@ java_test( name = "AddRemoveCppDependencyTest", size = "large", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = [ "-Dtest.suite.class=com.android.tools.idea.tests.gui.npw.AddRemoveCppDependencyTest", @@ -640,7 +640,7 @@ java_test( java_test( name = "CreateNewProjectWithCpp1Test", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.npw.CreateNewProjectWithCpp1Test"], tags = COMMON_TAGS + [ @@ -655,7 +655,7 @@ java_test( java_test( name = "CreateNewProjectWithCpp2Test", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.npw.CreateNewProjectWithCpp2Test"], tags = COMMON_TAGS + [ @@ -670,7 +670,7 @@ java_test( java_test( name = "CreateNewProjectWithCpp3Test", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.npw.CreateNewProjectWithCpp3Test"], tags = COMMON_TAGS + [ @@ -685,7 +685,7 @@ java_test( java_test( name = "CreateNewMobileProjectTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.uibuilder.CreateNewMobileProjectTest"], tags = COMMON_TAGS + [ @@ -701,7 +701,7 @@ java_test( java_test( name = "CreateCppKotlinProjectTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/CppKotlin/**", ]), @@ -1068,7 +1068,7 @@ java_test( java_test( name = "JavaLibsDepTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.projectstructure.JavaLibsDepTest"], tags = COMMON_TAGS + [ @@ -1084,7 +1084,7 @@ java_test( java_test( name = "AndroidLibsDepTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.projectstructure.AndroidLibsDepTest"], tags = COMMON_TAGS + [ @@ -1100,8 +1100,8 @@ java_test( java_test( name = "JavaDepTest", data = COMMON_DATA + [ + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/tools/common/m2/repository/com/google/code/gson/gson/2.6.2:jar", - "//tools/adt/idea/resources-aar:framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.projectstructure.JavaDepTest"], tags = COMMON_TAGS + [ @@ -1117,8 +1117,8 @@ java_test( java_test( name = "AndroidDepTest", data = COMMON_DATA + [ + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/tools/common/m2/repository/com/google/code/gson/gson/2.6.2:jar", - "//tools/adt/idea/resources-aar:framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.projectstructure.AndroidDepTest"], tags = COMMON_TAGS + [ @@ -1149,7 +1149,7 @@ java_test( java_test( name = "PrivateResourceTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/PrivateResource/**", ]), @@ -1167,7 +1167,7 @@ java_test( java_test( name = "ChangeLibModSettingsTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/PrivateResource/**", ]), @@ -1185,7 +1185,7 @@ java_test( java_test( name = "NameWithSpaceTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], jvm_flags = ["-Dtest.suite.class=com.android.tools.idea.tests.gui.uibuilder.NameWithSpaceTest"], tags = COMMON_TAGS + [ @@ -1203,11 +1203,11 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/sdk:platforms/android-23", "//prebuilts/studio/sdk:platforms/android-24", "//prebuilts/studio/sdk:platforms/android-25", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -1227,9 +1227,9 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/sdk:platforms/android-25", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -1249,8 +1249,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -1270,8 +1270,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -1291,8 +1291,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -1312,8 +1312,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/LayoutTest/**", ]), @@ -1332,8 +1332,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -1352,8 +1352,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -1373,8 +1373,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]), @@ -1394,8 +1394,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", "testData/TestImages/**", @@ -1479,7 +1479,7 @@ java_test( java_test( name = "LintCheckWithKotlinTest", data = COMMON_DATA + [ - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ] + glob([ "testData/KotlinInstrumentation/**", ]), @@ -1588,8 +1588,8 @@ java_test( data = COMMON_DATA + [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/lib:androidWidgets", - "//tools/adt/idea/resources-aar:framework_res", ] + glob([ "testData/SimpleApplication/**", ]), diff --git a/android-uitests/testSrc/com/android/tools/idea/tests/gui/GuiJarTestSuite.java b/android-uitests/testSrc/com/android/tools/idea/tests/gui/GuiJarTestSuite.java index 223159bb2bd..daba5b67d2b 100644 --- a/android-uitests/testSrc/com/android/tools/idea/tests/gui/GuiJarTestSuite.java +++ b/android-uitests/testSrc/com/android/tools/idea/tests/gui/GuiJarTestSuite.java @@ -47,7 +47,6 @@ public class GuiJarTestSuite extends IdeaTestSuiteBase { "tools/adt/idea/android/lib", "tools/adt/idea/android-uitests/testData", "tools/adt/idea/artwork/resources/device-art-resources", - "tools/adt/idea/resources-aar/framework_res.jar", "tools/base/templates", "tools/external/gradle", "tools/idea/java", diff --git a/android/BUILD b/android/BUILD index 676b3e96141..907b24b19b2 100644 --- a/android/BUILD +++ b/android/BUILD @@ -157,6 +157,7 @@ iml_module( "//prebuilts/studio/jdk", "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/sdk:build-tools/latest", "//prebuilts/studio/sdk:cmake", "//prebuilts/studio/sdk:docs", @@ -174,7 +175,6 @@ iml_module( "//tools/adt/idea/android/lib:sampleData", "//tools/adt/idea/android/testData", "//tools/adt/idea/artwork:device-art-resources", - "//tools/adt/idea/resources-aar:framework_res", "//tools/base/build-system:gradle-distrib", "//tools/base/build-system:studio_repo.zip", "//tools/base/build-system/previous-versions:1.5.0.zip", @@ -366,7 +366,6 @@ filegroup( ":deploy-artifacts", ":profiler-artifacts", ":transport-artifacts", - "//tools/adt/idea/resources-aar:framework_res.jar", "//tools/adt/idea/swingp:swing-instrumenter_deploy.jarjar.jar", "//tools/adt/idea/uitest-framework/testSrc/com/android/tools/idea/tests/gui/framework/heapassertions/bleak/agents:ObjectSizeInstrumentationAgent_deploy.jar", "//tools/adt/idea/uitest-framework/testSrc/com/android/tools/idea/tests/gui/framework/heapassertions/bleak/agents:jnibleakhelper", diff --git a/android/src/org/jetbrains/android/sdk/StudioEmbeddedRenderTarget.java b/android/src/org/jetbrains/android/sdk/StudioEmbeddedRenderTarget.java index de603ac5b88..8277de111b8 100644 --- a/android/src/org/jetbrains/android/sdk/StudioEmbeddedRenderTarget.java +++ b/android/src/org/jetbrains/android/sdk/StudioEmbeddedRenderTarget.java @@ -33,9 +33,6 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.List; import java.util.Map; import org.jetbrains.annotations.NotNull; @@ -47,6 +44,7 @@ import org.jetbrains.annotations.Nullable; public class StudioEmbeddedRenderTarget implements IAndroidTarget { private static final Logger LOG = Logger.getInstance(StudioEmbeddedRenderTarget.class); private static final String ONLY_FOR_RENDERING_ERROR = "This target is only for rendering"; + private static final String FRAMEWORK_RES_JAR = "framework_res.jar"; // Possible paths of the embedded "layoutlib" directory. private static final String[] EMBEDDED_LAYOUTLIB_PATHS = { @@ -59,18 +57,8 @@ public class StudioEmbeddedRenderTarget implements IAndroidTarget { // IDEA community path. "/android/tools-base/layoutlib/" }; - // Possible paths of framework_res.jar relative to the "layoutlib" directory. - private static final String[] EMBEDDED_FRAMEWORK_RES_JAR_PATHS = { - // Bundled path. - "data/framework_res.jar", - // Path when running in IntelliJ. - "../../../bazel-genfiles/tools/adt/idea/resources-aar/framework_res.jar", - }; - // Path of framework_res.jar relative to the runfiles directory when running in Bazel. - private static final String EMBEDDED_FRAMEWORK_RES_JAR_BAZEL_PATH = "tools/adt/idea/resources-aar/framework_res.jar"; @Nullable private final String myBasePath; - @Nullable private final String myFrameworkResPath; private static StudioEmbeddedRenderTarget ourStudioEmbeddedTarget; private static boolean ourDisableEmbeddedTargetForTesting = false; @@ -105,7 +93,8 @@ public class StudioEmbeddedRenderTarget implements IAndroidTarget { return new CompatibilityRenderTarget(getInstance(), api, target); } - private static StudioEmbeddedRenderTarget getInstance() { + @VisibleForTesting + public static StudioEmbeddedRenderTarget getInstance() { if (ourStudioEmbeddedTarget == null) { ourStudioEmbeddedTarget = new StudioEmbeddedRenderTarget(); } @@ -114,7 +103,6 @@ public class StudioEmbeddedRenderTarget implements IAndroidTarget { private StudioEmbeddedRenderTarget() { myBasePath = getEmbeddedLayoutLibPath(); - myFrameworkResPath = getEmbeddedFrameworkResPath(myBasePath); } /** @@ -145,29 +133,6 @@ public class StudioEmbeddedRenderTarget implements IAndroidTarget { return null; } - /** - * Returns the URL for the embedded layoutlib distribution. - * @param basePath - */ - @Nullable - private static String getEmbeddedFrameworkResPath(@Nullable String basePath) { - if (basePath == null) { - return null; - } - - for (String relativePath : EMBEDDED_FRAMEWORK_RES_JAR_PATHS) { - Path path = Paths.get(basePath, relativePath).normalize(); - if (Files.exists(path)) { - return path.toString(); - } - } - Path path = Paths.get(EMBEDDED_FRAMEWORK_RES_JAR_BAZEL_PATH).toAbsolutePath().normalize(); - if (Files.exists(path)) { - return path.toString(); - } - return null; - } - @Override @NotNull public String getLocation() { @@ -216,8 +181,7 @@ public class StudioEmbeddedRenderTarget implements IAndroidTarget { case DATA: return getLocation() + SdkConstants.OS_PLATFORM_DATA_FOLDER; case RESOURCES: - Preconditions.checkState(myFrameworkResPath != null, "Embedded framework_res.jar not found"); - return myFrameworkResPath; + return getLocation() + SdkConstants.OS_PLATFORM_DATA_FOLDER + FRAMEWORK_RES_JAR; case FONTS: return getLocation() + SdkConstants.OS_PLATFORM_FONTS_FOLDER; default: diff --git a/android/testSrc/com/android/tools/idea/IdeaTestSuite.java b/android/testSrc/com/android/tools/idea/IdeaTestSuite.java index b6f8a6f3e65..fa5b8794d7c 100644 --- a/android/testSrc/com/android/tools/idea/IdeaTestSuite.java +++ b/android/testSrc/com/android/tools/idea/IdeaTestSuite.java @@ -55,7 +55,6 @@ public class IdeaTestSuite extends IdeaTestSuiteBase { "tools/adt/idea/android/lib", "tools/adt/idea/artwork/resources/device-art-resources", "tools/adt/idea/android/testData", - "tools/adt/idea/resources-aar/framework_res.jar", "tools/base/templates", "tools/idea/java"); diff --git a/designer/BUILD b/designer/BUILD index 31ffe651e49..d1a44fe26e9 100644 --- a/designer/BUILD +++ b/designer/BUILD @@ -64,6 +64,7 @@ iml_module( "//prebuilts/studio/jdk", "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/sdk:build-tools/latest", "//prebuilts/studio/sdk:platforms/latest", "//tools/adt/idea/android:test_deps.zip", @@ -72,7 +73,6 @@ iml_module( "//tools/adt/idea/android/lib:sampleData", "//tools/adt/idea/android/testData", "//tools/adt/idea/designer/testData", - "//tools/adt/idea/resources-aar:framework_res", "//tools/base/build-system:gradle-distrib", "//tools/base/build-system:studio_repo.zip", "//tools/base/build-system/previous-versions:2.2.0.zip", diff --git a/designer/testSrc/com/android/tools/idea/DesignerTestSuite.java b/designer/testSrc/com/android/tools/idea/DesignerTestSuite.java index f27a9729ec8..ce307e60d46 100644 --- a/designer/testSrc/com/android/tools/idea/DesignerTestSuite.java +++ b/designer/testSrc/com/android/tools/idea/DesignerTestSuite.java @@ -43,7 +43,6 @@ public class DesignerTestSuite extends IdeaTestSuiteBase { "tools/adt/idea/android/lib/sampleData", "tools/adt/idea/android/testData", "tools/adt/idea/designer/testData", - "tools/adt/idea/resources-aar/framework_res.jar", "tools/base/templates", "tools/idea/java"); diff --git a/layoutlib/BUILD b/layoutlib/BUILD index df153f73f2c..711d275b6b4 100644 --- a/layoutlib/BUILD +++ b/layoutlib/BUILD @@ -7,7 +7,7 @@ iml_module( bundle_data = [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", - "//tools/adt/idea/resources-aar:framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", ], iml_files = ["intellij.android.layoutlib.iml"], lint_baseline = "//tools/base/lint:studio-checks/empty_baseline.xml", diff --git a/naveditor/BUILD b/naveditor/BUILD index ab7bb8611c6..c4899f42a35 100644 --- a/naveditor/BUILD +++ b/naveditor/BUILD @@ -53,9 +53,9 @@ iml_module( test_data = [ "//prebuilts/studio/layoutlib:buildprop", "//prebuilts/studio/layoutlib:data/fonts", + "//prebuilts/studio/layoutlib:data/framework_res", "//tools/adt/idea/android/testData", "//tools/adt/idea/designer/testData", - "//tools/adt/idea/resources-aar:framework_res", "//tools/adt/idea/android:test_deps.zip", "//tools/idea:platform-build-info", "//prebuilts/studio/sdk:platforms/latest", diff --git a/naveditor/testSrc/com/android/tools/idea/naveditor/NavEditorTestSuite.java b/naveditor/testSrc/com/android/tools/idea/naveditor/NavEditorTestSuite.java index cacb6ee1d9e..46987ac9223 100644 --- a/naveditor/testSrc/com/android/tools/idea/naveditor/NavEditorTestSuite.java +++ b/naveditor/testSrc/com/android/tools/idea/naveditor/NavEditorTestSuite.java @@ -31,8 +31,7 @@ public class NavEditorTestSuite extends IdeaTestSuiteBase { "prebuilts/studio/layoutlib", "tools/adt/idea/android/testData", "tools/adt/idea/designer/testData", - "tools/adt/idea/naveditor/testData", - "tools/adt/idea/resources-aar/framework_res.jar" + "tools/adt/idea/naveditor/testData" ); setUpOfflineRepo("tools/adt/idea/android/test_deps.zip", "prebuilts/tools/common/m2/repository"); diff --git a/resources-aar/BUILD b/resources-aar/BUILD index 666abf4deff..088ca811c95 100644 --- a/resources-aar/BUILD +++ b/resources-aar/BUILD @@ -29,7 +29,7 @@ iml_module( test_coverage = True, # keep sorted test_data = [ - ":framework_res", + "//prebuilts/studio/layoutlib:data/framework_res", "//prebuilts/studio/layoutlib:data/res", "//prebuilts/studio/sdk:platforms/latest", "//tools/adt/idea/android/testData", diff --git a/resources-aar/src/com/android/tools/idea/resources/aar/FrameworkResJarCreator.java b/resources-aar/src/com/android/tools/idea/resources/aar/FrameworkResJarCreator.java index df782c62e05..6711e74816e 100644 --- a/resources-aar/src/com/android/tools/idea/resources/aar/FrameworkResJarCreator.java +++ b/resources-aar/src/com/android/tools/idea/resources/aar/FrameworkResJarCreator.java @@ -15,6 +15,7 @@ */ package com.android.tools.idea.resources.aar; +import com.google.common.annotations.VisibleForTesting; import com.intellij.openapi.util.io.FileUtil; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -24,6 +25,9 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -55,7 +59,8 @@ public class FrameworkResJarCreator { } } - private static void createJar(@NotNull Path resDirectory, @NotNull Path jarFile) throws IOException { + @VisibleForTesting + static void createJar(@NotNull Path resDirectory, @NotNull Path jarFile) throws IOException { FrameworkResourceRepository repository = FrameworkResourceRepository.create(resDirectory, (Set<String>)null, null); Set<String> languages = repository.getLanguageGroups(); @@ -64,23 +69,36 @@ public class FrameworkResJarCreator { String entryName = FrameworkResourceRepository.getResourceTableNameForLanguage(language); createZipEntry(entryName, getEncodedResources(repository, language), zip); } + Path parentDir = resDirectory.getParent(); - Files.walkFileTree(resDirectory, new SimpleFileVisitor<Path>() { - @Override - @NotNull - public FileVisitResult visitFile(@NotNull Path file, @NotNull BasicFileAttributes attrs) throws IOException { - // When running on Windows, we need to make sure that the file entries are correctly encoded with the Unix path separator since the - // ZIP file spec only allows for that one. - String relativePath = FileUtil.toSystemIndependentName(parentDir.relativize(file).toString()); - if (!relativePath.equals("res/version")) { // Skip the "version" file. - createZipEntry(relativePath, Files.readAllBytes(file), zip); - } - return FileVisitResult.CONTINUE; + List<Path> files = getContainedFiles(resDirectory); + + for (Path file : files) { + // When running on Windows, we need to make sure that the file entries are correctly encoded + // with the Unix path separator since the ZIP file spec only allows for that one. + String relativePath = FileUtil.toSystemIndependentName(parentDir.relativize(file).toString()); + if (!relativePath.equals("res/version")) { // Skip the "version" file. + createZipEntry(relativePath, Files.readAllBytes(file), zip); } - }); + } } } + @NotNull + private static List<Path> getContainedFiles(@NotNull Path resDirectory) throws IOException { + List<Path> files = new ArrayList<>(); + Files.walkFileTree(resDirectory, new SimpleFileVisitor<Path>() { + @Override + @NotNull + public FileVisitResult visitFile(@NotNull Path file, @NotNull BasicFileAttributes attrs) { + files.add(file); + return FileVisitResult.CONTINUE; + } + }); + Collections.sort(files); // Make sure that the files are in canonical order. + return files; + } + private static void createZipEntry(@NotNull String name, @NotNull byte[] content, @NotNull ZipOutputStream zip) throws IOException { ZipEntry entry = new ZipEntry(name); zip.putNextEntry(entry); diff --git a/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResJarTest.java b/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResJarTest.java new file mode 100644 index 00000000000..c08179eecb5 --- /dev/null +++ b/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResJarTest.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2019 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. + */ +package com.android.tools.idea.resources.aar; + +import static com.android.SdkConstants.FD_DATA; +import static com.android.SdkConstants.FD_RES; + +import com.android.sdklib.IAndroidTarget; +import com.android.utils.PathUtils; +import com.intellij.testFramework.PlatformTestCase; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import org.jetbrains.android.sdk.StudioEmbeddedRenderTarget; +import org.jetbrains.annotations.NotNull; + +/** + * Checks that the {@code prebuilts/studio/layoutlib/data/framework_res.jar} file is up to date. + * <p> + * If this test fails, run {@code tools/vendor/google/layoutlib-prebuilt/build_framework_res_jar.sh} + * to update {@code prebuilts/studio/layoutlib/data/framework_res.jar}. + */ +public class FrameworkResJarTest extends PlatformTestCase { + private Path myTempDir; + + /** Returns the path of framework_res.jar in prebuilts. */ + @NotNull + private static Path getFrameworkResJar() { + IAndroidTarget renderTarget = StudioEmbeddedRenderTarget.getInstance(); + return Paths.get(renderTarget.getPath(IAndroidTarget.RESOURCES)); + } + + /** Returns the path of the framework res directory in prebuilts. */ + @NotNull + private static Path getFrameworkResDir() { + IAndroidTarget renderTarget = StudioEmbeddedRenderTarget.getInstance(); + return Paths.get(renderTarget.getLocation(), FD_DATA, FD_RES); + } + + /** Returns the path of a freshly built framework_res.jar. */ + @NotNull + private Path getExpectedFrameworkResJar() throws IOException { + Path path = myTempDir.resolve("framework_res.jar"); + FrameworkResJarCreator.createJar(getFrameworkResDir(), path); + return path; + } + + private static void frameworkResJarIsOutOfDate(@NotNull Path file) { + fail("The " + file + " file is out of date." + + " Please run tools/vendor/google/layoutlib-prebuilt/build_framework_res_jar.sh to update it."); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + myTempDir = Files.createTempDirectory("framework_res"); + } + + @Override + protected void tearDown() throws Exception { + try { + PathUtils.deleteRecursivelyIfExists(myTempDir); + } finally { + super.tearDown(); + } + } + + public void testCompareJars() throws Exception { + Path file = getFrameworkResJar(); + Path expectedFile = getExpectedFrameworkResJar(); + try (ZipFile zip1 = new ZipFile(file.toFile()); + ZipFile zip2 = new ZipFile(expectedFile.toFile())) { + Enumeration<? extends ZipEntry> entries1 = zip1.entries(); + Enumeration<? extends ZipEntry> entries2 = zip2.entries(); + while (true) { + boolean hasMore1 = entries1.hasMoreElements(); + boolean hasMore2 = entries1.hasMoreElements(); + if (hasMore1 != hasMore2) { + frameworkResJarIsOutOfDate(file); + } + if (!hasMore1) { + break; + } + ZipEntry entry1 = entries1.nextElement(); + ZipEntry entry2 = entries2.nextElement(); + if (!entry1.getName().equals(entry2.getName())) { + frameworkResJarIsOutOfDate(file); + } + if (entry1.getMethod() != entry2.getMethod()) { + frameworkResJarIsOutOfDate(file); + } + byte[] buf1 = new byte[8192]; + byte[] buf2 = new byte[8192]; + try (InputStream stream1 = zip1.getInputStream(entry1); + InputStream stream2 = zip2.getInputStream(entry2)) { + while (true) { + int n1 = stream1.read(buf1); + int n2 = stream2.read(buf2); + if (n1 != n2) { + frameworkResJarIsOutOfDate(file); + } + if (n1 < 0) { + break; + } + for (int i = 0; i < n1; i++) { + if (buf1[i] != buf2[i]) { + frameworkResJarIsOutOfDate(file); + } + } + } + } + } + } + } +} diff --git a/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResourceRepositoryTest.java b/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResourceRepositoryTest.java index 6e9ee0b6706..f4fe9ef59fb 100644 --- a/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResourceRepositoryTest.java +++ b/resources-aar/testSrc/com/android/tools/idea/resources/aar/FrameworkResourceRepositoryTest.java @@ -15,6 +15,8 @@ */ package com.android.tools.idea.resources.aar; +import static com.android.SdkConstants.FD_DATA; +import static com.android.SdkConstants.FD_RES; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; @@ -37,14 +39,13 @@ import com.android.resources.Density; import com.android.resources.ResourceType; import com.android.resources.ResourceVisibility; import com.android.sdklib.IAndroidTarget; -import com.android.tools.idea.configurations.ConfigurationManager; -import com.android.tools.idea.rendering.multi.CompatibilityRenderTarget; import com.android.tools.idea.res.ResourceHelper; import com.android.utils.PathUtils; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; -import com.intellij.openapi.application.PathManager; +import com.intellij.testFramework.PlatformTestCase; +import java.io.IOException; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; @@ -60,9 +61,6 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; import java.util.stream.Collectors; -import junit.framework.AssertionFailedError; -import junit.framework.TestCase; -import org.jetbrains.android.AndroidTestCase; import org.jetbrains.android.sdk.StudioEmbeddedRenderTarget; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -70,17 +68,16 @@ import org.jetbrains.annotations.Nullable; /** * Tests for {@link FrameworkResourceRepository}. */ -public class FrameworkResourceRepositoryTest extends AndroidTestCase { +public class FrameworkResourceRepositoryTest extends PlatformTestCase { /** Enables printing of repository statistics. */ private static final boolean PRINT_STATS = false; - private static final String FRAMEWORK_RES_JAR_PATH = "tools/adt/idea/resources-aar/framework_res.jar"; private Path myResourceFolder; - private Path myCacheDir; + private Path myTempDir; @NotNull private Path getCacheFile() { - return myCacheDir.resolve("cache.bin"); + return myTempDir.resolve("cache.bin"); } @NotNull @@ -92,33 +89,17 @@ public class FrameworkResourceRepositoryTest extends AndroidTestCase { * Returns the resource folder of the Android framework resources used by LayoutLib. */ @NotNull - private Path getSdkResFolder() { - ConfigurationManager manager = ConfigurationManager.getOrCreateInstance(myModule); - IAndroidTarget target = manager.getHighestApiTarget(); - if (target == null) { - TestCase.fail(); - } - CompatibilityRenderTarget compatibilityTarget = StudioEmbeddedRenderTarget.getCompatibilityTarget(target); - return Paths.get(compatibilityTarget.getLocation(), "data", "res").normalize(); + private static Path getFrameworkResDir() { + IAndroidTarget renderTarget = StudioEmbeddedRenderTarget.getInstance(); + return Paths.get(renderTarget.getLocation(), FD_DATA, FD_RES).normalize(); } - /** - * Returns the resource folder of the Android framework resources used by LayoutLib. - */ + /** Returns the path of a freshly built framework_res.jar. */ @NotNull - private static Path getFrameworkResJar() { - Path rootPath = Paths.get(PathManager.getHomePath()).getParent().getParent(); - // For running from Bazel. - Path path = rootPath.resolve(FRAMEWORK_RES_JAR_PATH).normalize(); - if (Files.exists(path)) { - return path; - } - // For running from IntelliJ. - path = rootPath.resolve("bazel-genfiles/" + FRAMEWORK_RES_JAR_PATH); - if (Files.exists(path)) { - return path; - } - throw new AssertionFailedError("Could not find " + FRAMEWORK_RES_JAR_PATH); + private Path getFrameworkResJar() throws IOException { + Path path = myTempDir.resolve("framework_res.jar"); + FrameworkResJarCreator.createJar(getFrameworkResDir(), path); + return path; } private static void assertVisibility( @@ -454,14 +435,14 @@ public class FrameworkResourceRepositoryTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - myResourceFolder = getSdkResFolder(); - myCacheDir = Files.createTempDirectory("caches"); + myResourceFolder = getFrameworkResDir(); + myTempDir = Files.createTempDirectory("temp"); } @Override protected void tearDown() throws Exception { try { - PathUtils.deleteRecursivelyIfExists(myCacheDir); + PathUtils.deleteRecursivelyIfExists(myTempDir); } finally { super.tearDown(); } @@ -470,7 +451,7 @@ public class FrameworkResourceRepositoryTest extends AndroidTestCase { public void testLoadingFromSourcesAndCache() throws Exception { for (Set<String> languages : Arrays.asList(ImmutableSet.<String>of(), ImmutableSet.of("fr", "it"), null)) { // Create persistent cache. - PathUtils.deleteRecursivelyIfExists(myCacheDir); + PathUtils.deleteRecursivelyIfExists(myTempDir); FrameworkResourceRepository.create(myResourceFolder, languages, createCachingData(directExecutor())); long loadTimeFromSources = 0; @@ -505,7 +486,7 @@ public class FrameworkResourceRepositoryTest extends AndroidTestCase { } } - public void testLoadingFromSourcesAndJar() { + public void testLoadingFromSourcesAndJar() throws Exception { Path frameworkResJar = getFrameworkResJar(); for (Set<String> languages : Arrays.asList(ImmutableSet.<String>of(), ImmutableSet.of("fr", "de"), null)) { long loadTimeFromSources = 0; @@ -539,7 +520,7 @@ public class FrameworkResourceRepositoryTest extends AndroidTestCase { } } - public void testIncrementalLoadingFromJar() { + public void testIncrementalLoadingFromJar() throws Exception { Path frameworkResJar = getFrameworkResJar(); FrameworkResourceRepository withFrench = FrameworkResourceRepository.create(frameworkResJar, ImmutableSet.of("fr"), null); checkLanguages(withFrench, ImmutableSet.of("fr")); diff --git a/resources-aar/testSrc/com/android/tools/idea/resources/aar/ResourcesAarTestSuite.java b/resources-aar/testSrc/com/android/tools/idea/resources/aar/ResourcesAarTestSuite.java index b781e99b57d..8943af2c0c2 100644 --- a/resources-aar/testSrc/com/android/tools/idea/resources/aar/ResourcesAarTestSuite.java +++ b/resources-aar/testSrc/com/android/tools/idea/resources/aar/ResourcesAarTestSuite.java @@ -25,8 +25,7 @@ public class ResourcesAarTestSuite extends IdeaTestSuiteBase { static { symlinkToIdeaHome( "prebuilts/studio/layoutlib", - "tools/adt/idea/android/testData", - "tools/adt/idea/resources-aar/framework_res.jar" + "tools/adt/idea/android/testData" ); setUpOfflineRepo("tools/base/build-system/studio_repo.zip", "out/studio/repo"); |