package jetbrains.mps.baseLanguage.unitTest.execution.client;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNodeReference;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.smodel.SNodePointer;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.util.annotation.ToRemove;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
public abstract class AbstractTestWrapper<N extends SNode> implements ITestNodeWrapper<N> {
@NotNull
protected final SNodeReference myNodePointer;
private String myFqName;
private final SRepository myRepo;
public AbstractTestWrapper(@NotNull N node) {
myNodePointer = new SNodePointer(node);
myRepo = SNodeOperations.getModel(node).getRepository();
}
@Deprecated
@ToRemove(version = 3.4)
public AbstractTestWrapper(@NotNull SNodeReference nodePointer) {
myNodePointer = nodePointer;
myRepo = null;
}
/*package*/ SRepository getRepo() {
return myRepo;
}
@Nullable
@Override
public N getNode() {
return new ModelAccessHelper(myRepo).runReadAction(new Computable<N>() {
public N compute() {
return (N) ((SNodePointer) myNodePointer).resolve(myRepo);
}
});
}
@NotNull
@Override
public SNodeReference getNodePointer() {
return myNodePointer;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || this.getClass() != o.getClass()) {
return false;
}
AbstractTestWrapper that = (AbstractTestWrapper) o;
return myNodePointer.equals(that.myNodePointer);
}
@Override
public int hashCode() {
int result = 0;
result = 31 * result + ((this.myNodePointer != null ? this.myNodePointer.hashCode() : 0));
return result;
}
@Nullable
@Override
public ITestNodeWrapper getTestCase() {
return null;
}
@NotNull
@Override
public Iterable<ITestNodeWrapper> getTestMethods() {
return ListSequence.fromList(new ArrayList<ITestNodeWrapper>());
}
@NotNull
@Override
public TestParameters getTestRunParameters() {
return TestParameters.calcDefault(myRepo);
}
@Override
public String getName() {
SNode node = getNode();
if (node == null) {
return null;
}
if (SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, "jetbrains.mps.lang.core.structure.INamedConcept"))) {
return SPropertyOperations.getString(SNodeOperations.cast(node, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, "jetbrains.mps.lang.core.structure.INamedConcept")), MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"));
} else {
throw new UnsupportedOperationException("Should override getName for not INamedConcept: " + SNodeOperations.getConcept(node));
}
}
@Override
public String getFqName() {
ITestNodeWrapper testCase = getTestCase();
if (isTestCase() || testCase == null) {
SNode node = getNode();
if (node == null) {
return null;
}
if (SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, "jetbrains.mps.lang.core.structure.INamedConcept"))) {
return SPropertyOperations.getString(SNodeOperations.cast(node, MetaAdapterFactory.getInterfaceConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, "jetbrains.mps.lang.core.structure.INamedConcept")), MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"));
} else {
throw new UnsupportedOperationException("Should override getFqName for not INamedConcept: " + SNodeOperations.getConcept(node));
}
}
return testCase.getFqName() + "." + getName();
}
@Override
public String getCachedFqName() {
if (myFqName == null) {
myRepo.getModelAccess().runReadAction(new Runnable() {
public void run() {
myFqName = getFqName();
}
});
}
return myFqName;
}
}