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); } }