mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-77946 fix SOE (workaround for http://code.google.com/p/android/issues/detail?id=24317)
This commit is contained in:
@@ -17,12 +17,8 @@
|
||||
package org.jetbrains.android.uipreview;
|
||||
|
||||
import com.android.ide.common.rendering.LayoutLibrary;
|
||||
import com.android.ide.common.rendering.api.ILayoutPullParser;
|
||||
import com.android.ide.common.rendering.api.IProjectCallback;
|
||||
import com.android.ide.common.rendering.api.RenderSession;
|
||||
import com.android.ide.common.rendering.api.SessionParams;
|
||||
import com.android.ide.common.rendering.api.*;
|
||||
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
|
||||
import com.android.ide.common.resources.ResourceResolver;
|
||||
import com.android.ide.common.resources.configuration.*;
|
||||
import com.android.resources.Density;
|
||||
import com.android.resources.ScreenOrientation;
|
||||
@@ -45,7 +41,7 @@ class RenderService {
|
||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.uipreview.RenderService");
|
||||
|
||||
private final IProjectCallback myProjectCallback;
|
||||
private final ResourceResolver myResourceResolver;
|
||||
private final RenderResources myResourceResolver;
|
||||
private final LayoutLibrary myLayoutLib;
|
||||
private final FolderConfiguration myConfig;
|
||||
private final int myMinSdkVersion;
|
||||
@@ -53,7 +49,7 @@ class RenderService {
|
||||
private final float myYdpi;
|
||||
|
||||
RenderService(LayoutLibrary layoutLibrary,
|
||||
@NotNull ResourceResolver resourceResolver,
|
||||
@NotNull RenderResources resourceResolver,
|
||||
FolderConfiguration config,
|
||||
float xdpi,
|
||||
float ydpi,
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.android.uipreview;
|
||||
import com.android.ide.common.log.ILogger;
|
||||
import com.android.ide.common.rendering.LayoutLibrary;
|
||||
import com.android.ide.common.rendering.api.IProjectCallback;
|
||||
import com.android.ide.common.rendering.api.RenderResources;
|
||||
import com.android.ide.common.rendering.api.ResourceValue;
|
||||
import com.android.ide.common.resources.FrameworkResources;
|
||||
import com.android.ide.common.resources.ResourceResolver;
|
||||
@@ -73,7 +74,7 @@ public class RenderServiceFactory {
|
||||
return null;
|
||||
}
|
||||
|
||||
public ResourceResolver createResourceResolver(final AndroidFacet facet,
|
||||
public RenderResources createResourceResolver(final AndroidFacet facet,
|
||||
FolderConfiguration config,
|
||||
ProjectResources projectResources,
|
||||
String themeName,
|
||||
@@ -94,10 +95,11 @@ public class RenderServiceFactory {
|
||||
}
|
||||
|
||||
final Map<ResourceType, Map<String, ResourceValue>> configedFrameworkRes = myResources.getConfiguredResources(config);
|
||||
return ResourceResolver.create(configedProjectRes, configedFrameworkRes, themeName, isProjectTheme);
|
||||
final ResourceResolver resolver = ResourceResolver.create(configedProjectRes, configedFrameworkRes, themeName, isProjectTheme);
|
||||
return new ResourceResolverDecorator(resolver);
|
||||
}
|
||||
|
||||
public RenderService createService(ResourceResolver resources,
|
||||
public RenderService createService(RenderResources resources,
|
||||
FolderConfiguration config,
|
||||
float xdpi,
|
||||
float ydpi,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.android.uipreview;
|
||||
|
||||
import com.android.ide.common.rendering.api.RenderResources;
|
||||
import com.android.ide.common.rendering.api.RenderSession;
|
||||
import com.android.ide.common.rendering.api.Result;
|
||||
import com.android.ide.common.resources.*;
|
||||
@@ -98,7 +99,7 @@ class RenderUtil {
|
||||
missingRClass = true;
|
||||
}
|
||||
|
||||
final ResourceResolver resolver =
|
||||
final RenderResources resolver =
|
||||
factory.createResourceResolver(facet, config, projectResources, theme.getName(), theme.isProjectTheme());
|
||||
final RenderService renderService = factory.createService(resolver, config, xdpi, ydpi, callback, minSdkVersion);
|
||||
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
package org.jetbrains.android.uipreview;
|
||||
|
||||
import com.android.ide.common.rendering.api.LayoutLog;
|
||||
import com.android.ide.common.rendering.api.RenderResources;
|
||||
import com.android.ide.common.rendering.api.ResourceValue;
|
||||
import com.android.ide.common.rendering.api.StyleResourceValue;
|
||||
import com.android.ide.common.resources.ResourceResolver;
|
||||
import com.android.resources.ResourceType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
public class ResourceResolverDecorator extends RenderResources {
|
||||
private final ResourceResolver myWrappee;
|
||||
|
||||
public ResourceResolverDecorator(@NotNull ResourceResolver wrappee) {
|
||||
myWrappee = wrappee;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFrameworkResourceIdProvider(FrameworkResourceIdProvider provider) {
|
||||
myWrappee.setFrameworkResourceIdProvider(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLogger(LayoutLog logger) {
|
||||
myWrappee.setLogger(logger);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StyleResourceValue getCurrentTheme() {
|
||||
return myWrappee.getCurrentTheme();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StyleResourceValue getTheme(String name, boolean frameworkTheme) {
|
||||
return myWrappee.getTheme(name, frameworkTheme);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean themeIsParentOf(StyleResourceValue parentTheme, StyleResourceValue childTheme) {
|
||||
return myWrappee.themeIsParentOf(parentTheme, childTheme);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceValue getFrameworkResource(ResourceType resourceType, String resourceName) {
|
||||
return myWrappee.getFrameworkResource(resourceType, resourceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceValue getProjectResource(ResourceType resourceType, String resourceName) {
|
||||
return myWrappee.getProjectResource(resourceType, resourceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceValue findItemInTheme(String itemName) {
|
||||
return myWrappee.findItemInTheme(itemName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceValue findItemInStyle(StyleResourceValue style, String itemName) {
|
||||
return myWrappee.findItemInStyle(style, itemName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceValue findResValue(String reference, boolean forceFrameworkOnly) {
|
||||
return myWrappee.findResValue(reference, forceFrameworkOnly);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ResourceValue resolveValue(ResourceType type, String name, String value, boolean isFrameworkValue) {
|
||||
return myWrappee.resolveValue(type, name, value, isFrameworkValue);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ResourceValue resolveResValue(ResourceValue value) {
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
final String stringValue = value.getValue();
|
||||
|
||||
if (stringValue == null) {
|
||||
return value;
|
||||
}
|
||||
final ResourceValue resolvedResValue = myWrappee.findResValue(stringValue, value.isFramework());
|
||||
|
||||
if (resolvedResValue == null) {
|
||||
return value;
|
||||
}
|
||||
|
||||
// avoid infinite recursion (see http://code.google.com/p/android/issues/detail?id=24317)
|
||||
if (resolvedResValue.equals(value)) {
|
||||
// use default value
|
||||
return null;
|
||||
}
|
||||
return resolveResValue(resolvedResValue);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user