mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-19 00:46:47 +08:00
Implement lazy discovery for ViewManagers.
Reviewed By: kathryngray Differential Revision: D5865095 fbshipit-source-id: c94970e4cd7aafb20cf844c48feea053ac8b6b0f
This commit is contained in:
committed by
Facebook Github Bot
parent
c4f7ce9afd
commit
da30b04703
@@ -9,23 +9,25 @@
|
||||
|
||||
package com.facebook.react;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.facebook.react.bridge.JavaScriptModule;
|
||||
import com.facebook.react.bridge.NativeModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* {@code CompositeReactPackage} allows to create a single package composed of views and modules
|
||||
* from several other packages.
|
||||
*/
|
||||
public class CompositeReactPackage extends ReactInstancePackage {
|
||||
public class CompositeReactPackage extends ReactInstancePackage
|
||||
implements ViewManagerOnDemandReactPackage {
|
||||
|
||||
private final List<ReactPackage> mChildReactPackages = new ArrayList<>();
|
||||
|
||||
@@ -39,9 +41,7 @@ public class CompositeReactPackage extends ReactInstancePackage {
|
||||
mChildReactPackages.add(arg1);
|
||||
mChildReactPackages.add(arg2);
|
||||
|
||||
for (ReactPackage reactPackage: args) {
|
||||
mChildReactPackages.add(reactPackage);
|
||||
}
|
||||
Collections.addAll(mChildReactPackages, args);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,7 +56,7 @@ public class CompositeReactPackage extends ReactInstancePackage {
|
||||
moduleMap.put(nativeModule.getName(), nativeModule);
|
||||
}
|
||||
}
|
||||
return new ArrayList(moduleMap.values());
|
||||
return new ArrayList<>(moduleMap.values());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -81,7 +81,7 @@ public class CompositeReactPackage extends ReactInstancePackage {
|
||||
moduleMap.put(nativeModule.getName(), nativeModule);
|
||||
}
|
||||
}
|
||||
return new ArrayList(moduleMap.values());
|
||||
return new ArrayList<>(moduleMap.values());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,6 +95,44 @@ public class CompositeReactPackage extends ReactInstancePackage {
|
||||
viewManagerMap.put(viewManager.getName(), viewManager);
|
||||
}
|
||||
}
|
||||
return new ArrayList(viewManagerMap.values());
|
||||
return new ArrayList<>(viewManagerMap.values());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public List<String> getViewManagerNames(ReactApplicationContext reactContext) {
|
||||
Set<String> uniqueNames = new HashSet<>();
|
||||
for (ReactPackage reactPackage : mChildReactPackages) {
|
||||
if (reactPackage instanceof ViewManagerOnDemandReactPackage) {
|
||||
List<String> names =
|
||||
((ViewManagerOnDemandReactPackage) reactPackage).getViewManagerNames(reactContext);
|
||||
if (names != null) {
|
||||
uniqueNames.addAll(names);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new ArrayList<>(uniqueNames);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public @Nullable ViewManager createViewManager(
|
||||
ReactApplicationContext reactContext, String viewManagerName) {
|
||||
ListIterator<ReactPackage> iterator = mChildReactPackages.listIterator(mChildReactPackages.size());
|
||||
while (iterator.hasPrevious()) {
|
||||
ReactPackage reactPackage = iterator.previous();
|
||||
if (reactPackage instanceof ViewManagerOnDemandReactPackage) {
|
||||
ViewManager viewManager =
|
||||
((ViewManagerOnDemandReactPackage) reactPackage).createViewManager(reactContext, viewManagerName);
|
||||
if (viewManager != null) {
|
||||
return viewManager;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user