feat(TUP-29651): Fix indefinite loop

This commit is contained in:
bhe-talendbj
2020-12-30 11:25:48 +08:00
parent 053fa7955f
commit bfa629cdc7
2 changed files with 66 additions and 10 deletions

View File

@@ -18,6 +18,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -483,12 +484,10 @@ public class ComponentsFactory implements IComponentsFactory {
* @see org.talend.core.model.components.IComponentsFactory#getComponents()
*/
@Override
@Deprecated
public Set<IComponent> getComponents() {
wait4InitialiseFinish();
if (componentList == null) {
init(false);
}
return componentList;
// just return cache components
return ComponentsMemoryCacheMgr.getInstance().getComponents();
}
@Override
@@ -498,12 +497,12 @@ public class ComponentsFactory implements IComponentsFactory {
@Override
public Collection<IComponent> readComponents() {
Set<IComponent> components = getComponents();
Collection<IComponent> readComponents = null;
synchronized (components) {
readComponents = Arrays.asList(components.toArray(new IComponent[0]));
wait4InitialiseFinish();
if (componentList == null) {
init(false);
}
return readComponents;
Set<IComponent> components = ComponentsMemoryCacheMgr.getInstance().getComponents();
return Collections.unmodifiableCollection(components);
}
@Override
@@ -691,4 +690,24 @@ public class ComponentsFactory implements IComponentsFactory {
}
public void removeComponents(Collection<IComponent> comps) {
ComponentsMemoryCacheMgr.getInstance().removeComponents(comps);
}
public void addComponents(Collection<IComponent> comps) {
ComponentsMemoryCacheMgr.getInstance().addComponents(comps);
}
public void clearComponents() {
ComponentsMemoryCacheMgr.getInstance().clearComponents();
}
public void addComponent(IComponent comp) {
ComponentsMemoryCacheMgr.getInstance().addComponent(comp);
}
public boolean containComponent(IComponent comp) {
return ComponentsMemoryCacheMgr.getInstance().containComponent(comp);
}
}

View File

@@ -14,6 +14,7 @@ package org.talend.designer.codegen.components.model;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -100,6 +101,42 @@ public class ComponentsMemoryCacheMgr {
}
}
public void addComponents(Collection<IComponent> comps) {
componentList.addAll(comps);
for (IComponent comp : comps) {
if (comp instanceof EmfComponent) {
int owner = ((EmfComponent) comp).getComponentInfo().getOwner();
if ((owner & EmfComponent.OWNER_CUSTOM) > 0) {
customComponentList.add(comp);
}
if ((owner & EmfComponent.OWNER_USER) > 0) {
userComponentList.add(comp);
}
}
}
}
public void removeComponents(Collection<IComponent> comps) {
componentList.removeAll(comps);
for (IComponent comp : comps) {
if (comp instanceof EmfComponent) {
int owner = ((EmfComponent) comp).getComponentInfo().getOwner();
if ((owner & EmfComponent.OWNER_CUSTOM) > 0) {
customComponentList.remove(comp);
}
if ((owner & EmfComponent.OWNER_USER) > 0) {
userComponentList.remove(comp);
}
}
}
}
public void clearComponents() {
componentList.clear();
customComponentList.clear();
userComponentList.clear();
}
public void addUserComponent(IComponent comp) {
componentList.add(comp);
userComponentList.add(comp);