package jetbrains.mps.workbench.findusages;
/*Generated by MPS */
import java.util.Map;
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
import gnu.trove.THashMap;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import org.jetbrains.mps.openapi.model.SNodeId;
import jetbrains.mps.stubs.javastub.classpath.ClassifierKind;
import jetbrains.mps.baseLanguage.javastub.asm.ASMClass;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.baseLanguage.javastub.asm.ASMTypeVariable;
import jetbrains.mps.baseLanguage.javastub.asm.ASMFormalTypeParameter;
import jetbrains.mps.baseLanguage.javastub.asm.ASMType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMMethod;
import jetbrains.mps.baseLanguage.javastub.asm.ASMAnnotation;
import jetbrains.mps.baseLanguage.javastub.asm.ASMField;
import java.util.List;
import java.util.Iterator;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.baseLanguage.javastub.asm.ASMClassType;
import jetbrains.mps.internal.collections.runtime.IVisitor;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import jetbrains.mps.baseLanguage.javastub.asm.ASMPrimitiveType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMEnumValue;
import jetbrains.mps.baseLanguage.javastub.asm.ASMArrayType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMVarArgType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMParameterizedType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMExtendsType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMSuperType;
import jetbrains.mps.baseLanguage.javastub.asm.ASMUnboundedType;
import jetbrains.mps.baseLanguage.javastub.ASMNodeId;
import jetbrains.mps.util.NameUtil;
public class ClassifierCacher {
private Map<IdIndexEntry, Integer> myResult = new THashMap<IdIndexEntry, Integer>();
public ClassifierCacher() {
}
public Map<IdIndexEntry, Integer> getResult() {
return myResult;
}
private void instance(SAbstractConcept concept) {
myResult.put(new IdIndexEntry(concept.getQualifiedName(), true), 0);
}
private void ref(SNodeId id) {
if (!(id instanceof jetbrains.mps.smodel.SNodeId.Foreign)) {
return;
}
myResult.put(new IdIndexEntry(((jetbrains.mps.smodel.SNodeId.Foreign) id).getId(), true), 0);
}
private void modelRef(String packageName) {
myResult.put(new IdIndexEntry(packageName + "@java_stub", true), 0);
}
public void updateClassifier(ClassifierKind kind, ASMClass ac) {
if (kind == ClassifierKind.CLASS) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept"));
updateAnnotations(ac);
updateTypeVariables(ac);
updateExtendsAndImplements(ac);
updateInstanceFields(ac);
updateStaticFields(ac);
updateConstructors(ac);
updateInstanceMethods(ac);
updateStaticMethods(ac, kind);
} else if (kind == ClassifierKind.INTERFACE) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101edd46144L, "jetbrains.mps.baseLanguage.structure.Interface"));
updateAnnotations(ac);
updateTypeVariables(ac);
updateExtendsForInterface(ac);
updateStaticFields(ac);
updateInstanceMethods(ac);
} else if (kind == ClassifierKind.ANNOTATIONS) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a69dc80cL, "jetbrains.mps.baseLanguage.structure.Annotation"));
updateAnnotationMethods(ac);
updateAnnotations(ac);
} else if (kind == ClassifierKind.ENUM) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfc367070a5L, "jetbrains.mps.baseLanguage.structure.EnumClass"));
updateAnnotations(ac);
updateTypeVariables(ac);
updateExtendsAndImplements(ac);
updateInstanceFields(ac);
updateStaticFields(ac);
updateConstructors(ac);
updateInstanceMethods(ac);
updateStaticMethods(ac, kind);
} else if (kind == ClassifierKind.UNKNOWN) {
return;
}
if (ac.isPublic()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af9581ff1L, "jetbrains.mps.baseLanguage.structure.PublicVisibility"));
}
}
private void updateTypeVariables(ASMClass cls) {
for (ASMTypeVariable tv : cls.getTypeParameters()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1024639ed74L, "jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration"));
if (!(tv instanceof ASMFormalTypeParameter)) {
continue;
}
ASMFormalTypeParameter tp = (ASMFormalTypeParameter) tv;
if (tp.getClassBound() != null) {
getTypeByASMType(tp.getClassBound());
}
for (ASMType act : tp.getInterfaceBounds()) {
getTypeByASMType(act);
}
}
}
private void updateTypeVariables(ASMMethod method) {
for (ASMTypeVariable tv : method.getTypeParameters()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1024639ed74L, "jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration"));
}
for (ASMTypeVariable tv : method.getTypeParameters()) {
if (!(tv instanceof ASMFormalTypeParameter)) {
continue;
}
ASMFormalTypeParameter tp = (ASMFormalTypeParameter) tv;
if (tp.getClassBound() != null) {
getTypeByASMType(tp.getClassBound());
}
for (ASMType act : tp.getInterfaceBounds()) {
getTypeByASMType(act);
}
}
}
private void updateAnnotations(ASMClass ac) {
for (ASMAnnotation annotation : ac.getAnnotations()) {
createAnnotation(annotation);
}
}
private void updateExtendsForInterface(ASMClass ac) {
for (ASMType type : ac.getGenericInterfaces()) {
getTypeByASMType(type);
}
}
private void updateExtendsAndImplements(ASMClass ac) {
ASMType refSuperclass = ac.getGenericSuperclass();
if (refSuperclass != null) {
getTypeByASMType(refSuperclass);
}
for (ASMType type : ac.getGenericInterfaces()) {
getTypeByASMType(type);
}
}
private void updateInstanceFields(ASMClass refCls) {
for (ASMField field : refCls.getDeclaredFields()) {
if (field.isStatic()) {
continue;
}
if (field.isCompilerGenerated()) {
continue;
}
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca68L, "jetbrains.mps.baseLanguage.structure.FieldDeclaration"));
createVisibility(field);
getTypeByASMType(field.getGenericType());
for (ASMAnnotation annotation : field.getAnnotations()) {
createAnnotation(annotation);
}
}
}
private void updateStaticFields(ASMClass ac) {
for (ASMField field : ac.getDeclaredFields()) {
if (!(field.isStatic())) {
continue;
}
if (field.isCompilerGenerated()) {
continue;
}
if (field.isEnumConstant()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfc367388b3L, "jetbrains.mps.baseLanguage.structure.EnumConstantDeclaration"));
} else {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93c84351fL, "jetbrains.mps.baseLanguage.structure.StaticFieldDeclaration"));
createVisibility(field);
getTypeByASMType(field.getGenericType());
for (ASMAnnotation annotation : field.getAnnotations()) {
createAnnotation(annotation);
}
if (field.isFinal()) {
if (field.hasValue()) {
Object value = field.getValue();
if (value instanceof Integer) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc59b314L, "jetbrains.mps.baseLanguage.structure.IntegerConstant"));
} else if (value instanceof String) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d565d10L, "jetbrains.mps.baseLanguage.structure.StringLiteral"));
}
}
}
}
}
}
private void updateAnnotationMethods(ASMClass refCls) {
for (ASMMethod m : refCls.getDeclaredMethods()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a6a17a27L, "jetbrains.mps.baseLanguage.structure.AnnotationMethodDeclaration"));
getTypeByASMType(m.getGenericReturnType());
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af9581ff1L, "jetbrains.mps.baseLanguage.structure.PublicVisibility"));
if (m.getAnnotationDefault() != null) {
getAnnotationValue(m.getAnnotationDefault());
}
}
}
private void updateConstructors(ASMClass ac) {
for (ASMMethod c : ac.getDeclaredConstructors()) {
if (c.isSynthetic()) {
continue;
}
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b204L, "jetbrains.mps.baseLanguage.structure.ConstructorDeclaration"));
createVisibility(c);
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x4975dc2bdcfa0c49L, "jetbrains.mps.baseLanguage.structure.StubStatementList"));
for (ASMTypeVariable tv : c.getTypeParameters()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1024639ed74L, "jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration"));
}
{
ASMType pt;
String pn;
List<ASMAnnotation> pa;
Iterator<ASMType> pt_iterator = ListSequence.fromList(c.getGenericParameterTypes()).iterator();
Iterator<String> pn_iterator = ListSequence.fromList(c.getParameterNames()).iterator();
Iterator<List<ASMAnnotation>> pa_iterator = ListSequence.fromList(c.getParameterAnnotations()).iterator();
while (true) {
if (!(pt_iterator.hasNext())) {
break;
}
if (!(pn_iterator.hasNext())) {
break;
}
if (!(pa_iterator.hasNext())) {
break;
}
pt = pt_iterator.next();
pn = pn_iterator.next();
pa = pa_iterator.next();
if (!(ac.isStatic()) && c.getGenericParameterTypes().get(0) == pt) {
continue;
}
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c77f1e94L, "jetbrains.mps.baseLanguage.structure.ParameterDeclaration"));
getTypeByASMType(pt);
addAnnotationsToParameter(pa);
}
}
for (ASMAnnotation annotation : c.getAnnotations()) {
createAnnotation(annotation);
}
for (ASMType exception : c.getExceptionTypes()) {
getTypeByASMType(exception);
}
}
}
private void updateInstanceMethods(ASMClass ac) {
for (ASMMethod m : ac.getDeclaredMethods()) {
if (m.isStatic()) {
continue;
}
if (m.isBridge()) {
continue;
}
if (m.isCompilerGenerated()) {
continue;
}
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b21dL, "jetbrains.mps.baseLanguage.structure.InstanceMethodDeclaration"));
createVisibility(m);
updateBaseMethod(m);
}
}
private void updateStaticMethods(ASMClass ac, ClassifierKind kind) {
for (ASMMethod m : ac.getDeclaredMethods()) {
if (!(m.isStatic())) {
continue;
}
if (m.isCompilerGenerated()) {
continue;
}
if (kind == ClassifierKind.ENUM && isGeneratedEnumMethod(m)) {
continue;
}
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbebabf0aL, "jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration"));
createVisibility(m);
updateBaseMethod(m);
}
}
private void updateBaseMethod(ASMMethod m) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x4975dc2bdcfa0c49L, "jetbrains.mps.baseLanguage.structure.StubStatementList"));
updateTypeVariables(m);
getTypeByASMType(m.getGenericReturnType());
{
ASMType pt;
String pn;
List<ASMAnnotation> pa;
Iterator<ASMType> pt_iterator = ListSequence.fromList(m.getGenericParameterTypes()).iterator();
Iterator<String> pn_iterator = ListSequence.fromList(m.getParameterNames()).iterator();
Iterator<List<ASMAnnotation>> pa_iterator = ListSequence.fromList(m.getParameterAnnotations()).iterator();
while (true) {
if (!(pt_iterator.hasNext())) {
break;
}
if (!(pn_iterator.hasNext())) {
break;
}
if (!(pa_iterator.hasNext())) {
break;
}
pt = pt_iterator.next();
pn = pn_iterator.next();
pa = pa_iterator.next();
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c77f1e94L, "jetbrains.mps.baseLanguage.structure.ParameterDeclaration"));
getTypeByASMType(pt);
addAnnotationsToParameter(pa);
}
}
for (ASMType exception : m.getExceptionTypes()) {
getTypeByASMType(exception);
}
for (ASMAnnotation annotation : m.getAnnotations()) {
createAnnotation(annotation);
}
}
private boolean isGeneratedEnumMethod(ASMMethod m) {
if (m.getName().equals("values") && m.getParameterTypes().isEmpty()) {
return true;
}
if (m.getName().equals("valueOf") && m.getParameterTypes().size() == 1 && m.getParameterTypes().get(0) instanceof ASMClassType) {
ASMClassType type = (ASMClassType) m.getParameterTypes().get(0);
return type.getName().equals("java.lang.String");
}
return false;
}
protected void createVisibility(ASMMethod m) {
if (m.isPublic()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af9581ff1L, "jetbrains.mps.baseLanguage.structure.PublicVisibility"));
} else if (m.isPrivate()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af9586f0cL, "jetbrains.mps.baseLanguage.structure.PrivateVisibility"));
} else if (m.isProtected()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af958b686L, "jetbrains.mps.baseLanguage.structure.ProtectedVisibility"));
}
}
protected void createVisibility(ASMField f) {
if (f.isPublic()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af9581ff1L, "jetbrains.mps.baseLanguage.structure.PublicVisibility"));
} else if (f.isPrivate()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af9586f0cL, "jetbrains.mps.baseLanguage.structure.PrivateVisibility"));
} else if (f.isProtected()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10af958b686L, "jetbrains.mps.baseLanguage.structure.ProtectedVisibility"));
}
}
private void addAnnotationsToParameter(List<ASMAnnotation> anns) {
ListSequence.fromList(anns).visitAll(new IVisitor<ASMAnnotation>() {
public void visit(ASMAnnotation it) {
createAnnotation(it);
}
});
}
private void createAnnotation(ASMAnnotation annotation) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a6b4ccabL, "jetbrains.mps.baseLanguage.structure.AnnotationInstance"));
ASMClassType c = (ASMClassType) annotation.getType();
addClassifierReference(c);
Map<String, Object> values = ((Map<String, Object>) annotation.getValues());
for (String key : MapSequence.fromMap(values).keySet()) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a71b1af4L, "jetbrains.mps.baseLanguage.structure.AnnotationInstanceValue"));
getAnnotationValue(MapSequence.fromMap(values).get(key));
addAnnotationMethodReference(c, key);
}
}
private void getAnnotationValue(Object value) {
if (value instanceof Integer) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc59b314L, "jetbrains.mps.baseLanguage.structure.IntegerConstant"));
} else if (value instanceof Byte) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc59b314L, "jetbrains.mps.baseLanguage.structure.IntegerConstant"));
} else if (value instanceof Short) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc59b314L, "jetbrains.mps.baseLanguage.structure.IntegerConstant"));
} else if (value instanceof Boolean) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b201L, "jetbrains.mps.baseLanguage.structure.BooleanConstant"));
} else if (value instanceof Character) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1177d44b21bL, "jetbrains.mps.baseLanguage.structure.CharConstant"));
} else if (value instanceof Long) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x3b418722717710b4L, "jetbrains.mps.baseLanguage.structure.LongLiteral"));
} else if (value instanceof Float) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102cb19a434L, "jetbrains.mps.baseLanguage.structure.FloatingPointConstant"));
} else if (value instanceof Double) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102cb19a434L, "jetbrains.mps.baseLanguage.structure.FloatingPointConstant"));
} else if (value instanceof String) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d565d10L, "jetbrains.mps.baseLanguage.structure.StringLiteral"));
} else if (value instanceof ASMAnnotation) {
createAnnotation((ASMAnnotation) value);
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a6b4ccabL, "jetbrains.mps.baseLanguage.structure.AnnotationInstance"));
} else if (value instanceof ASMPrimitiveType) {
getTypeByASMType((ASMPrimitiveType) value);
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x3f57ea36bd70a4e1L, "jetbrains.mps.baseLanguage.structure.PrimitiveClassExpression"));
} else if (value instanceof List) {
List<Object> list = (List<Object>) value;
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a770dc0dL, "jetbrains.mps.baseLanguage.structure.ArrayLiteral"));
ListSequence.fromList(list).visitAll(new IVisitor<Object>() {
public void visit(Object it) {
getAnnotationValue(it);
}
});
} else if (value instanceof ASMEnumValue) {
ASMEnumValue enumValue = (ASMEnumValue) value;
ASMClassType c = (ASMClassType) enumValue.getType();
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfc37588bc8L, "jetbrains.mps.baseLanguage.structure.EnumConstantReference"));
addClassifierReference(c);
addEnumConstReference(enumValue);
} else if (value instanceof ASMClassType) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x103fb730c14L, "jetbrains.mps.baseLanguage.structure.ClassifierClassExpression"));
addClassifierReference((ASMClassType) value);
}
}
private void getTypeByASMType(ASMType type) {
if (type == ASMPrimitiveType.BOOLEAN) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d6513eL, "jetbrains.mps.baseLanguage.structure.BooleanType"));
} else if (type == ASMPrimitiveType.BYTE) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d5b617L, "jetbrains.mps.baseLanguage.structure.ByteType"));
} else if (type == ASMPrimitiveType.SHORT) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940cc380dL, "jetbrains.mps.baseLanguage.structure.ShortType"));
} else if (type == ASMPrimitiveType.INT) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d22479L, "jetbrains.mps.baseLanguage.structure.IntegerType"));
} else if (type == ASMPrimitiveType.LONG) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7f3L, "jetbrains.mps.baseLanguage.structure.LongType"));
} else if (type == ASMPrimitiveType.FLOAT) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d327fdL, "jetbrains.mps.baseLanguage.structure.FloatType"));
} else if (type == ASMPrimitiveType.DOUBLE) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d451a6L, "jetbrains.mps.baseLanguage.structure.DoubleType"));
} else if (type == ASMPrimitiveType.VOID) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc6bf96dL, "jetbrains.mps.baseLanguage.structure.VoidType"));
} else if (type == ASMPrimitiveType.CHAR) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d4f826L, "jetbrains.mps.baseLanguage.structure.CharType"));
} else if (type instanceof ASMArrayType) {
getTypeByASMType(((ASMArrayType) type).getElementType());
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d819f7L, "jetbrains.mps.baseLanguage.structure.ArrayType"));
} else if (type instanceof ASMVarArgType) {
getTypeByASMType(((ASMVarArgType) type).getElementType());
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11c08f42e7bL, "jetbrains.mps.baseLanguage.structure.VariableArityType"));
} else if (type instanceof ASMTypeVariable) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102467229d8L, "jetbrains.mps.baseLanguage.structure.TypeVariableReference"));
// usages handled on upper level as for resolve we should load model
// another variant is just to search for occurence in the same model
} else if (type instanceof ASMClassType) {
ASMClassType c = (ASMClassType) type;
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType"));
addClassifierReference(c);
} else if (type instanceof ASMParameterizedType) {
ASMParameterizedType pt = (ASMParameterizedType) type;
getTypeByASMType(pt.getRawType());
addTypeParameters(pt.getActualTypeArguments());
} else if (type instanceof ASMExtendsType) {
ASMExtendsType e = (ASMExtendsType) type;
if (e.getBound() instanceof ASMClassType) {
ASMClassType ct = (ASMClassType) e.getBound();
if (ct.getName().equals("java.lang.Object")) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110dae5f4a3L, "jetbrains.mps.baseLanguage.structure.WildCardType"));
return;
}
}
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110daeaa84aL, "jetbrains.mps.baseLanguage.structure.UpperBoundType"));
getTypeByASMType(e.getBound());
} else if (type instanceof ASMSuperType) {
ASMSuperType e = (ASMSuperType) type;
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110dae9d53dL, "jetbrains.mps.baseLanguage.structure.LowerBoundType"));
getTypeByASMType(e.getBound());
} else if (type instanceof ASMUnboundedType) {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110dae5f4a3L, "jetbrains.mps.baseLanguage.structure.WildCardType"));
} else {
instance(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506dL, "jetbrains.mps.baseLanguage.structure.Type"));
}
}
private void addTypeParameters(List<? extends ASMType> typeParameters) {
for (ASMType tv : typeParameters) {
getTypeByASMType(tv);
}
}
private void addClassifierReference(ASMClassType clsType) {
SNodeId nodeId = ASMNodeId.createId(clsType.getName());
ref(nodeId);
modelRef(NameUtil.namespaceFromLongName(clsType.getName()));
}
private void addAnnotationMethodReference(ASMClassType annotationType, String method) {
SNodeId nodeId = ASMNodeId.createAnnotationMethodId(annotationType.getName(), method);
ref(nodeId);
}
private void addEnumConstReference(ASMEnumValue enumValue) {
ASMClassType classType = (ASMClassType) enumValue.getType();
SNodeId nodeId = ASMNodeId.createFieldId(classType.getName(), enumValue.getConstant());
ref(nodeId);
}
}