package jetbrains.mps.ide.java.newparser; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.jetbrains.mps.openapi.model.SNode; import org.eclipse.jdt.internal.compiler.ast.Expression; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.internal.collections.runtime.ListSequence; import org.eclipse.jdt.internal.compiler.ast.TypeReference; import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference; import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference; import jetbrains.mps.smodel.SReference; import org.jetbrains.mps.openapi.language.SReferenceLink; import jetbrains.mps.smodel.DynamicReference; import jetbrains.mps.smodel.StaticReference; import org.eclipse.jdt.internal.compiler.ast.ASTNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import org.eclipse.jdt.internal.compiler.ast.AllocationExpression; import org.eclipse.jdt.internal.compiler.ast.ArrayAllocationExpression; import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer; import org.eclipse.jdt.internal.compiler.ast.ArrayReference; import org.eclipse.jdt.internal.compiler.ast.Assignment; import org.eclipse.jdt.internal.compiler.ast.BinaryExpression; import org.eclipse.jdt.internal.compiler.ast.CastExpression; import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess; import org.eclipse.jdt.internal.compiler.ast.ConditionalExpression; import org.eclipse.jdt.internal.compiler.ast.FieldReference; import org.eclipse.jdt.internal.compiler.ast.InstanceOfExpression; import org.eclipse.jdt.internal.compiler.ast.Literal; import org.eclipse.jdt.internal.compiler.ast.MessageSend; import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference; import org.eclipse.jdt.internal.compiler.ast.SingleNameReference; import org.eclipse.jdt.internal.compiler.ast.ThisReference; import org.eclipse.jdt.internal.compiler.ast.UnaryExpression; import org.eclipse.jdt.internal.compiler.ast.AND_AND_Expression; import org.eclipse.jdt.internal.compiler.ast.OR_OR_Expression; import java.util.List; import java.util.ArrayList; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import org.eclipse.jdt.internal.compiler.ast.CompoundAssignment; import org.eclipse.jdt.internal.compiler.ast.EqualExpression; import org.eclipse.jdt.internal.compiler.ast.OperatorIds; import org.eclipse.jdt.internal.compiler.ast.PostfixExpression; import org.eclipse.jdt.internal.compiler.ast.PrefixExpression; import org.eclipse.jdt.internal.compiler.ast.NullLiteral; import org.eclipse.jdt.internal.compiler.ast.SuperReference; import org.eclipse.jdt.internal.compiler.ast.QualifiedThisReference; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import org.eclipse.jdt.internal.compiler.ast.NameReference; import org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression; import org.eclipse.jdt.internal.compiler.impl.Constant; import jetbrains.mps.util.NameUtil; import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference; import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import jetbrains.mps.smodel.SModelUtil_new; import org.jetbrains.mps.openapi.model.SNodeAccessUtil; public class ASTConverterWithExpressions extends ASTConverter { private Logger LOG = LogManager.getLogger(ASTConverterWithExpressions.class); public ASTConverterWithExpressions(boolean onlyStubs) { super(onlyStubs); } protected ASTConverterWithExpressions(ASTConverterWithExpressions base) { super(base); } /*package*/ SNode convertBinaryOperation(Expression left, Expression right, SNode binaryOperation) throws JavaParseException { SLinkOperations.setTarget(binaryOperation, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbdeb6fecfL, 0xfbdeb7a11cL, "leftExpression"), convertExpressionWrap(left)); SLinkOperations.setTarget(binaryOperation, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbdeb6fecfL, 0xfbdeb7a11bL, "rightExpression"), convertExpressionWrap(right)); return binaryOperation; } public void addCallArgs(SNode call, Expression[] args) throws JavaParseException { if (args == null) { return; } for (Expression arg : args) { ListSequence.fromList(SLinkOperations.getChildren(call, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0xf8c78301aeL, "actualArgument"))).addElement(convertExpressionWrap(arg)); } } public TypeReference[] typeArguments(TypeReference typeRef) { if (typeRef instanceof ParameterizedSingleTypeReference) { return ((ParameterizedSingleTypeReference) typeRef).typeArguments; } else if (typeRef instanceof ParameterizedQualifiedTypeReference) { // ignoring type arguments in not last components, e.g. Class1<T>.Class2 TypeReference[][] allArgs = ((ParameterizedQualifiedTypeReference) typeRef).typeArguments; // return only type arguments of the last component return allArgs[allArgs.length - 1]; } else { return new TypeReference[0]; } } private String typeName(TypeReference typeRef) { char[][] tokens = typeRef.getTypeName(); if (tokens == null || tokens.length == 0) { return null; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < tokens.length; i++) { if (i > 0) { sb.append('.'); } sb.append(tokens[i]); } return sb.toString(); } private SReference adjustClassReference(SNode clsType, SNode source, SReferenceLink role) { org.jetbrains.mps.openapi.model.SReference sref = clsType.getReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, 0x101de490babL, "classifier")); if (sref instanceof DynamicReference) { return new DynamicReference(role, source, null, ((DynamicReference) sref).getResolveInfo()); } else if (sref instanceof StaticReference) { return new StaticReference(role, source, ((StaticReference) sref).getTargetNode()); } else { throw new RuntimeException("Unknown type of reference: " + sref.getClass().getName()); } } public SNode convertExpressionWrap(Expression expression) throws JavaParseException { SNode result = convertExpression(expression); if (expression != null) { int parenthesisCount = (expression.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT; for (int parenthsCreated = 0; parenthsCreated < parenthesisCount; parenthsCreated++) { SNode parenthesizedExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfb4ed32b7fL, "jetbrains.mps.baseLanguage.structure.ParenthesizedExpression")); SLinkOperations.setTarget(parenthesizedExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfb4ed32b7fL, 0xfb4ed32b80L, "expression"), result); result = parenthesizedExpression; } } return result; } @Override public SNode convertExpression(Expression x) throws JavaParseException { if (x instanceof AllocationExpression) { return convertExpression((AllocationExpression) x); } else if (x instanceof ArrayAllocationExpression) { return convertExpression((ArrayAllocationExpression) x); } else if (x instanceof ArrayInitializer) { return convertExpression((ArrayInitializer) x); } else if (x instanceof ArrayReference) { return convertExpression((ArrayReference) x); } else if (x instanceof Assignment) { return convertExpression((Assignment) x); } else if (x instanceof BinaryExpression) { return convertExpression((BinaryExpression) x); } else if (x instanceof CastExpression) { return convertExpression((CastExpression) x); } else if (x instanceof ClassLiteralAccess) { return convertExpression((ClassLiteralAccess) x); } else if (x instanceof ConditionalExpression) { return convertExpression((ConditionalExpression) x); } else if (x instanceof FieldReference) { return convertExpression((FieldReference) x); } else if (x instanceof InstanceOfExpression) { return convertExpression((InstanceOfExpression) x); } else if (x instanceof Literal) { return convertExpression((Literal) x); } else if (x instanceof MessageSend) { return convertExpression((MessageSend) x); } else if (x instanceof QualifiedNameReference) { return convertExpression((QualifiedNameReference) x); } else if (x instanceof SingleNameReference) { return convertExpression((SingleNameReference) x); } else if (x instanceof ThisReference) { return convertExpression((ThisReference) x); } else if (x instanceof UnaryExpression) { return convertExpression((UnaryExpression) x); } else { if (x != null) { LOG.error("Unknown expression type: " + x.getClass().getName()); } return null; } } /*package*/ SNode convertExpression(AND_AND_Expression x) throws JavaParseException { SNode andExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfb7c3070eeL, "jetbrains.mps.baseLanguage.structure.AndExpression")); return convertBinaryOperation(x.left, x.right, andExpression); } /*package*/ SNode convertExpression(OR_OR_Expression x) throws JavaParseException { SNode orExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfb8255689fL, "jetbrains.mps.baseLanguage.structure.OrExpression")); return convertBinaryOperation(x.left, x.right, orExpression); } /*package*/ SNode convertExpression(ArrayAllocationExpression x) throws JavaParseException { SNode compType = convertTypeReference(x.type); if (x.initializer != null) { if (x.dimensions.length > 1) { compType = buildArrayType(compType, x.dimensions.length - 1, false); } List<SNode> initializers = new ArrayList<SNode>(); if (x.initializer.expressions != null) { for (Expression expression : x.initializer.expressions) { ListSequence.fromList(initializers).addElement(convertExpressionWrap(expression)); } } SNode arrayCreator = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10cd01b77ddL, "jetbrains.mps.baseLanguage.structure.ArrayCreatorWithInitializer")); for (SNode initializer : initializers) { ListSequence.fromList(SLinkOperations.getChildren(arrayCreator, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10cd01b77ddL, 0x10cd01d19acL, "initValue"))).addElement(initializer); } SLinkOperations.setTarget(arrayCreator, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10cd01b77ddL, 0x10cd01cf3c4L, "componentType"), compType); SNode genericNewExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab8473cc5L, "jetbrains.mps.baseLanguage.structure.GenericNewExpression")); SLinkOperations.setTarget(genericNewExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab8473cc5L, 0x10ab847b486L, "creator"), arrayCreator); return genericNewExpression; } else { List<SNode> dims = new ArrayList<SNode>(); for (Expression dimension : x.dimensions) { if (dimension == null) { ListSequence.fromList(dims).addElement(null); } else { ListSequence.fromList(dims).addElement(convertExpressionWrap(dimension)); } } SNode arrayCreator = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4952f12L, "jetbrains.mps.baseLanguage.structure.ArrayCreator")); for (SNode dim : dims) { SNode dimensionExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4b2dfdaL, "jetbrains.mps.baseLanguage.structure.DimensionExpression")); ListSequence.fromList(SLinkOperations.getChildren(arrayCreator, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4952f12L, 0x113e4b36742L, "dimensionExpression"))).addElement(dimensionExpression); if (dim != null) { SLinkOperations.setTarget(dimensionExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4b2dfdaL, 0x113e4b846d4L, "expression"), dim); } } SNode deepestComponentType = compType; while (SNodeOperations.isInstanceOf(deepestComponentType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d819f7L, "jetbrains.mps.baseLanguage.structure.ArrayType"))) { deepestComponentType = SLinkOperations.getTarget(SNodeOperations.cast(deepestComponentType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d819f7L, "jetbrains.mps.baseLanguage.structure.ArrayType")), MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d819f7L, 0xf940d819f8L, "componentType")); } SLinkOperations.setTarget(arrayCreator, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4952f12L, 0x113e49578edL, "componentType"), deepestComponentType); SNode genericNewExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab8473cc5L, "jetbrains.mps.baseLanguage.structure.GenericNewExpression")); SLinkOperations.setTarget(genericNewExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab8473cc5L, 0x10ab847b486L, "creator"), arrayCreator); return genericNewExpression; } } /*package*/ SNode convertExpression(ArrayInitializer x) throws JavaParseException { List<SNode> initializers = new ArrayList<SNode>(); if (x.expressions != null) { for (Expression expression : x.expressions) { ListSequence.fromList(initializers).addElement(convertExpressionWrap(expression)); } } SNode arrayLiteral = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a770dc0dL, "jetbrains.mps.baseLanguage.structure.ArrayLiteral")); for (SNode initializer : initializers) { ListSequence.fromList(SLinkOperations.getChildren(arrayLiteral, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a770dc0dL, 0x114a770fdbfL, "item"))).addElement(initializer); } return arrayLiteral; } /*package*/ SNode convertExpression(ArrayReference x) throws JavaParseException { SNode accessExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11126b40c25L, "jetbrains.mps.baseLanguage.structure.ArrayAccessExpression")); SLinkOperations.setTarget(accessExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11126b40c25L, 0x11126b6de5aL, "array"), convertExpressionWrap(x.receiver)); SLinkOperations.setTarget(accessExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11126b40c25L, 0x11126b6ac89L, "index"), convertExpressionWrap(x.position)); return accessExpression; } /*package*/ SNode convertExpression(Assignment x) throws JavaParseException { if (x instanceof CompoundAssignment) { return convertExpression((CompoundAssignment) x); } else { SNode assignmentExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c77f1e96L, "jetbrains.mps.baseLanguage.structure.AssignmentExpression")); SLinkOperations.setTarget(assignmentExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11b0d00332cL, 0xf8c77f1e97L, "lValue"), convertExpressionWrap(x.lhs)); SLinkOperations.setTarget(assignmentExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11b0d00332cL, 0xf8c77f1e99L, "rValue"), convertExpressionWrap(x.expression)); return assignmentExpression; } } /*package*/ SNode convertExpression(BinaryExpression x) throws JavaParseException { if (x instanceof AND_AND_Expression) { return convertExpression((AND_AND_Expression) x); } else if (x instanceof EqualExpression) { return convertExpression((EqualExpression) x); } else if (x instanceof OR_OR_Expression) { return convertExpression((OR_OR_Expression) x); } else { SNode op; int binOp = (x.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT; switch (binOp) { case OperatorIds.LEFT_SHIFT: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d6cde9fb9L, "jetbrains.mps.baseLanguage.structure.ShiftLeftExpression")); break; case OperatorIds.RIGHT_SHIFT: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d6ce051dfL, "jetbrains.mps.baseLanguage.structure.ShiftRightExpression")); break; case OperatorIds.UNSIGNED_RIGHT_SHIFT: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x470fa5a7b03ac59L, "jetbrains.mps.baseLanguage.structure.ShiftRightUnsignedExpression")); break; case OperatorIds.PLUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7fbL, "jetbrains.mps.baseLanguage.structure.PlusExpression")); break; case OperatorIds.MINUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7f5L, "jetbrains.mps.baseLanguage.structure.MinusExpression")); break; case OperatorIds.REMAINDER: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10c8d509af4L, "jetbrains.mps.baseLanguage.structure.RemExpression")); break; case OperatorIds.XOR: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d19ef69abL, "jetbrains.mps.baseLanguage.structure.BitwiseXorExpression")); break; case OperatorIds.AND: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d19eede01L, "jetbrains.mps.baseLanguage.structure.BitwiseAndExpression")); break; case OperatorIds.MULTIPLY: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfe476b758fL, "jetbrains.mps.baseLanguage.structure.MulExpression")); break; case OperatorIds.OR: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d19ef4652L, "jetbrains.mps.baseLanguage.structure.BitwiseOrExpression")); break; case OperatorIds.DIVIDE: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xff2bbc13daL, "jetbrains.mps.baseLanguage.structure.DivExpression")); break; case OperatorIds.LESS_EQUAL: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10c8d53a915L, "jetbrains.mps.baseLanguage.structure.LessThanOrEqualsExpression")); break; case OperatorIds.GREATER_EQUAL: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10c8d0fac2cL, "jetbrains.mps.baseLanguage.structure.GreaterThanOrEqualsExpression")); break; case OperatorIds.GREATER: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbced38fcfL, "jetbrains.mps.baseLanguage.structure.GreaterThanExpression")); break; case OperatorIds.LESS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbced3b82aL, "jetbrains.mps.baseLanguage.structure.LessThanExpression")); break; default: throw new JavaParseException("Unsupported operator for BinaryExpression"); } return convertBinaryOperation(x.left, x.right, op); } } /*package*/ SNode convertExpression(CompoundAssignment x) throws JavaParseException { if (x instanceof PostfixExpression) { return convertExpression((PostfixExpression) x); } else if (x instanceof PrefixExpression) { return convertExpression((PrefixExpression) x); } else { SNode op; switch (x.operator) { case OperatorIds.PLUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11b0d1476d2L, "jetbrains.mps.baseLanguage.structure.PlusAssignmentExpression")); break; case OperatorIds.MINUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11b0d14a4eaL, "jetbrains.mps.baseLanguage.structure.MinusAssignmentExpression")); break; case OperatorIds.MULTIPLY: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be8616ecL, "jetbrains.mps.baseLanguage.structure.MulAssignmentExpression")); break; case OperatorIds.DIVIDE: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862ea4L, "jetbrains.mps.baseLanguage.structure.DivAssignmentExpression")); break; case OperatorIds.AND: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862eaaL, "jetbrains.mps.baseLanguage.structure.AndAssignmentExpression")); break; case OperatorIds.OR: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862ea8L, "jetbrains.mps.baseLanguage.structure.OrAssignmentExpression")); break; case OperatorIds.XOR: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862eacL, "jetbrains.mps.baseLanguage.structure.XorAssignmentExpression")); break; case OperatorIds.REMAINDER: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862ea6L, "jetbrains.mps.baseLanguage.structure.RemAssignmentExpression")); break; case OperatorIds.LEFT_SHIFT: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862eaeL, "jetbrains.mps.baseLanguage.structure.LeftShiftAssignmentExpression")); break; case OperatorIds.RIGHT_SHIFT: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x617aa860be862eb0L, "jetbrains.mps.baseLanguage.structure.RightShiftAssignmentExpression")); break; case OperatorIds.UNSIGNED_RIGHT_SHIFT: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x470fa5a7b0ad087L, "jetbrains.mps.baseLanguage.structure.UnsignedRightShiftAssignmentExpression")); break; default: throw new JavaParseException("Unsupported operator for CompoundAssignment"); } SLinkOperations.setTarget(op, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11b0d00332cL, 0xf8c77f1e97L, "lValue"), convertExpressionWrap(x.lhs)); SLinkOperations.setTarget(op, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11b0d00332cL, 0xf8c77f1e99L, "rValue"), convertExpressionWrap(x.expression)); return op; } } /*package*/ SNode convertExpression(PrefixExpression x) throws JavaParseException { SNode op; switch (x.operator) { case OperatorIds.MINUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x120a472f0e8L, "jetbrains.mps.baseLanguage.structure.PrefixDecrementExpression")); break; case OperatorIds.PLUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x120a46df580L, "jetbrains.mps.baseLanguage.structure.PrefixIncrementExpression")); break; default: throw new JavaParseException("Unexpected prefix operator"); } SLinkOperations.setTarget(op, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x120a4c1f269L, 0x120a4c433a6L, "expression"), convertExpressionWrap(x.lhs)); return op; } /*package*/ SNode convertExpression(CastExpression x) throws JavaParseException { SNode result = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940dabe4aL, "jetbrains.mps.baseLanguage.structure.CastExpression")); SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940dabe4aL, 0xf940dabe4cL, "expression"), convertExpressionWrap(x.expression)); // x.type is expression, not type reference // we're making TypeReference out of NameReference // in idea 12's eclipse parser seems to give us type reference right away if (!(x.type instanceof TypeReference)) { LOG.error("Class in class cast expession is not a type reference. Class name: " + x.type.toString()); return null; } SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940dabe4aL, 0xf940dabe4bL, "type"), convertTypeReference(x.type)); return result; } /*package*/ SNode convertExpression(NullLiteral x) { return SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940cd6167L, "jetbrains.mps.baseLanguage.structure.NullLiteral")); } /*package*/ SNode convertExpression(SuperReference x) throws JavaParseException { return SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506fL, "jetbrains.mps.baseLanguage.structure.Expression")); } /*package*/ SNode convertExpression(ThisReference x) throws JavaParseException { if (x instanceof QualifiedThisReference) { return convertExpression((QualifiedThisReference) x); } else if (x instanceof SuperReference) { return convertExpression((SuperReference) x); } else { return SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d4da00cL, "jetbrains.mps.baseLanguage.structure.ThisExpression")); } } /*package*/ SNode convertExpression(QualifiedThisReference x) throws JavaParseException { SNode thisRef = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d4da00cL, "jetbrains.mps.baseLanguage.structure.ThisExpression")); SNode type = convertTypeReference(x.qualification); if (!(SNodeOperations.isInstanceOf(type, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType")))) { throw new JavaParseException("Type should be class in qualified this reference"); } SReference sref = adjustClassReference(SNodeOperations.cast(type, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType")), thisRef, MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d4da00cL, 0x1136d9d21b3L, "classConcept")); thisRef.setReference(sref.getLink(), sref); return thisRef; } /*package*/ SNode convertExpression(SingleNameReference x) { SNode varRef = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c77f1e98L, "jetbrains.mps.baseLanguage.structure.VariableReference")); SReference sref = new DynamicReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c77f1e98L, 0xf8cc6bf960L, "variableDeclaration"), varRef, null, new String(x.token)); varRef.setReference(sref.getLink(), sref); return varRef; } /*package*/ SNode convertExpression(QualifiedNameReference x) { String[] tokens = new String[x.tokens.length]; if (tokens.length == 0) { return null; } SNode unkName = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x759937a5973279b7L, "jetbrains.mps.baseLanguage.structure.UnknownNameRef")); StringBuilder sb = new StringBuilder(); for (int i = 0; i < tokens.length; i++) { sb.append(x.tokens[i]); sb.append('.'); } sb.deleteCharAt(sb.length() - 1); SPropertyOperations.set(unkName, MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x5a98df4004080866L, 0x1996ec29712bdd92L, "tokens"), sb.toString()); return unkName; } /*package*/ SNode convertExpression(MessageSend x) throws JavaParseException { // it's a method call // results in either LocalStaticMethodCall, LocalInstanceMethodCall, StaticMethodCall // or DotExpression with MethodCallOperation String methodName = new String(x.selector); SNode result = null; SNode call = null; if (x.receiver instanceof ThisReference && ((ThisReference) x.receiver).isImplicitThis()) { // it's a local call, f() SNode lmc = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x6c6b6a1e379f9404L, "jetbrains.mps.baseLanguage.structure.LocalMethodCall")); org.jetbrains.mps.openapi.model.SReference ref = new DynamicReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0xf8c78301adL, "baseMethodDeclaration"), lmc, null, methodName); lmc.setReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0xf8c78301adL, "baseMethodDeclaration"), ref); result = lmc; call = lmc; } else { // it's something.method(...) // let's see if 'something' is SingleNameRef or QualifiedNameRef; if yes let's see if it's a class // if either it's not a name ref or not a class then handle it just as some random expression Expression receiver = x.receiver; if (receiver instanceof NameReference) { // handle this special case SNode unkDotCall = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x245faa02186fc7b5L, "jetbrains.mps.baseLanguage.structure.UnknownDotCall")); SPropertyOperations.set(unkDotCall, MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x245faa02186fc7b5L, 0x439f6403036ad2f4L, "callee"), methodName); String[] tokens; if (x.receiver instanceof SingleNameReference) { tokens = new String[1]; tokens[0] = new String(((SingleNameReference) x.receiver).token); } else if (x.receiver instanceof QualifiedNameReference) { QualifiedNameReference nameRef = ((QualifiedNameReference) x.receiver); tokens = new String[nameRef.tokens.length]; for (int i = 0; i < tokens.length; i++) { tokens[i] = new String(nameRef.tokens[i]); } } else { // TODO report error return null; } StringBuilder sb = new StringBuilder(); for (String tok : tokens) { sb.append(tok); sb.append('.'); } sb.deleteCharAt(sb.length() - 1); SPropertyOperations.set(unkDotCall, MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x5a98df4004080866L, 0x1996ec29712bdd92L, "tokens"), sb.toString()); result = unkDotCall; call = unkDotCall; } else if (x.receiver instanceof SuperReference) { SNode smc = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf9d78b55aaL, "jetbrains.mps.baseLanguage.structure.SuperMethodCall")); org.jetbrains.mps.openapi.model.SReference ref = new DynamicReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0xf8c78301adL, "baseMethodDeclaration"), smc, null, methodName); smc.setReference(ref.getLink(), ref); result = smc; call = smc; } else { // we can already know that it should be an InstanceMethodCall SNode dotExpr = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, "jetbrains.mps.baseLanguage.structure.DotExpression")); SLinkOperations.setTarget(dotExpr, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, 0x116b46a4416L, "operand"), convertExpressionWrap(x.receiver)); SNode instCall = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x118154a6332L, "jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation")); SLinkOperations.setTarget(dotExpr, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, 0x116b46b36c4L, "operation"), instCall); org.jetbrains.mps.openapi.model.SReference sref = new DynamicReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0xf8c78301adL, "baseMethodDeclaration"), instCall, null, methodName); instCall.setReference(sref.getLink(), sref); result = dotExpr; call = instCall; } } if ((call != null)) { addCallArgs(call, x.arguments); addTypeArgs(x.typeArguments, SLinkOperations.getChildren(call, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0x4500f31eb02a7788L, "typeArgument"))); } return result; } /*package*/ SNode convertExpression(AllocationExpression x) throws JavaParseException { if (x instanceof QualifiedAllocationExpression) { return convertExpression((QualifiedAllocationExpression) x); } else { SNode unkNew = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x2dda7700ec3ae154L, "jetbrains.mps.baseLanguage.structure.UnknownNew")); addCallArgs(unkNew, x.arguments); addTypeArgs(typeArguments(x.type), SLinkOperations.getChildren(unkNew, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0x4500f31eb02a7788L, "typeArgument"))); SPropertyOperations.set(unkNew, MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x2dda7700ec3ae154L, 0x2dda7700ec3bb537L, "className"), typeName(x.type)); return unkNew; } } /*package*/ SNode convertExpression(ClassLiteralAccess x) throws JavaParseException { SNode argType = convertTypeReference(x.type); if (SNodeOperations.isInstanceOf(argType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType"))) { SNode result = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x103fb730c14L, "jetbrains.mps.baseLanguage.structure.ClassifierClassExpression")); SReference sref = adjustClassReference(SNodeOperations.cast(argType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType")), result, MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x103fb730c14L, 0x103fb73a43eL, "classifier")); result.setReference(sref.getLink(), sref); return result; } else if (SNodeOperations.isInstanceOf(argType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940d819f7L, "jetbrains.mps.baseLanguage.structure.ArrayType"))) { SNode result = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x115f7830a32a65e7L, "jetbrains.mps.baseLanguage.structure.ArrayClassExpression")); SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x115f7830a32a65e7L, 0x115f7830a32a65e8L, "arrayType"), argType); return result; } else if (SNodeOperations.isInstanceOf(argType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10f0ad8bde4L, "jetbrains.mps.baseLanguage.structure.PrimitiveType"))) { SNode result = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x3f57ea36bd70a4e1L, "jetbrains.mps.baseLanguage.structure.PrimitiveClassExpression")); SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x3f57ea36bd70a4e1L, 0x3f57ea36bd70a4e2L, "primitiveType"), argType); return result; } else { throw new JavaParseException("Type in class literal access is expected to be classifier or array type"); } } /*package*/ SNode convertExpression(UnaryExpression x) throws JavaParseException { int operator = ((x.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT); switch (operator) { case OperatorIds.MINUS: SNode unaryMinus = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x6fea7de6103549b1L, "jetbrains.mps.baseLanguage.structure.UnaryMinus")); SLinkOperations.setTarget(unaryMinus, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x120a4c1f269L, 0x120a4c433a6L, "expression"), convertExpressionWrap(x.expression)); return unaryMinus; case OperatorIds.NOT: SNode notExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbcf6bd10dL, "jetbrains.mps.baseLanguage.structure.NotExpression")); SLinkOperations.setTarget(notExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbcf6bd10dL, 0xfbcf6c30a4L, "expression"), convertExpressionWrap(x.expression)); return notExpression; case OperatorIds.PLUS: return convertExpressionWrap(x.expression); case OperatorIds.TWIDDLE: SNode twiddle = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d6d026f5fL, "jetbrains.mps.baseLanguage.structure.BitwiseNotExpression")); SLinkOperations.setTarget(twiddle, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d6d026f5fL, 0x11d6d026f62L, "expression"), convertExpressionWrap(x.expression)); return twiddle; default: throw new JavaParseException("Unexpected operator for unary expression"); } } /*package*/ SNode convertExpression(ConditionalExpression x) throws JavaParseException { SNode ifTest = convertExpressionWrap(x.condition); SNode thenExpr = convertExpressionWrap(x.valueIfTrue); SNode elseExpr = convertExpressionWrap(x.valueIfFalse); SNode tOp = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ef01239c9L, "jetbrains.mps.baseLanguage.structure.TernaryOperatorExpression")); SLinkOperations.setTarget(tOp, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ef01239c9L, 0x10ef012826fL, "condition"), ifTest); SLinkOperations.setTarget(tOp, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ef01239c9L, 0x10ef012a1c0L, "ifTrue"), thenExpr); SLinkOperations.setTarget(tOp, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ef01239c9L, 0x10ef012cedcL, "ifFalse"), elseExpr); return tOp; } /*package*/ SNode convertExpression(EqualExpression x) throws JavaParseException { SNode op; switch ((x.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT) { case OperatorIds.EQUAL_EQUAL: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b210L, "jetbrains.mps.baseLanguage.structure.EqualsExpression")); break; case OperatorIds.NOT_EQUAL: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf9e20e303fL, "jetbrains.mps.baseLanguage.structure.NotEqualsExpression")); break; default: throw new JavaParseException("Unexpected operator for EqualExpression"); } return convertBinaryOperation(x.left, x.right, op); } /*package*/ SNode convertExpression(InstanceOfExpression x) throws JavaParseException { SNode expr = convertExpressionWrap(x.expression); SNode testType = convertTypeReference(x.type); SNode instanceOfExpression = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbff03700L, "jetbrains.mps.baseLanguage.structure.InstanceOfExpression")); SLinkOperations.setTarget(instanceOfExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbff03700L, 0xfbbff06218L, "leftExpression"), expr); SLinkOperations.setTarget(instanceOfExpression, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbff03700L, 0xfbbff06219L, "classType"), testType); return instanceOfExpression; } /*package*/ SNode convertExpression(PostfixExpression x) throws JavaParseException { SNode op; switch (x.operator) { case OperatorIds.MINUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11aded05fe6L, "jetbrains.mps.baseLanguage.structure.PostfixDecrementExpression")); break; case OperatorIds.PLUS: op = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11adecdb4f0L, "jetbrains.mps.baseLanguage.structure.PostfixIncrementExpression")); break; default: throw new JavaParseException("Unexpected postfix operator"); } SLinkOperations.setTarget(op, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x120a4c1f269L, 0x120a4c433a6L, "expression"), convertExpressionWrap(x.lhs)); return op; } /*package*/ SNode convertExpression(FieldReference x) throws JavaParseException { SNode result = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, "jetbrains.mps.baseLanguage.structure.DotExpression")); SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, 0x116b46a4416L, "operand"), convertExpressionWrap(x.receiver)); SNode fieldRef = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b483d77aL, "jetbrains.mps.baseLanguage.structure.FieldReferenceOperation")); SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, 0x116b46b36c4L, "operation"), fieldRef); SReference sref = new DynamicReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b483d77aL, 0x116b484a653L, "fieldDeclaration"), fieldRef, null, new String(x.token)); fieldRef.setReference(sref.getRole(), sref); return result; } /*package*/ SNode convertExpression(QualifiedAllocationExpression x) throws JavaParseException { SNode result = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab8473cc5L, "jetbrains.mps.baseLanguage.structure.GenericNewExpression")); SNode create = null; if (x.anonymousType != null) { SNode anonCreate = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1133e3b449aL, "jetbrains.mps.baseLanguage.structure.AnonymousClassCreator")); create = anonCreate; SLinkOperations.setTarget(result, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab8473cc5L, 0x10ab847b486L, "creator"), anonCreate); SNode cls = SNodeOperations.cast(convertTypeDecl(x.anonymousType), MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, "jetbrains.mps.baseLanguage.structure.AnonymousClass")); SLinkOperations.setTarget(anonCreate, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1133e3b449aL, 0x1133e3b8b49L, "cls"), cls); addReference(x.type, cls, MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, 0x1107e0fd2a0L, "classifier")); addCallArgs(cls, x.arguments); addTypeArgs(typeArguments(x.type), SLinkOperations.getChildren(cls, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, 0x117ac45a693L, "typeParameter"))); } else { // TODO what is enclosing instance? handle it if (x.enclosingInstance() == null) { return convertExpression((AllocationExpression) x); } } return result; } /*package*/ SNode convertExpression(Literal x) { if (x instanceof NullLiteral) { return convertExpression((NullLiteral) x); } else { x.computeConstant(); if (x.constant == null) { return null; } if (x.constant != Constant.NotAConstant) { return convertConstant(x.constant, new String(x.source())); } else if (x instanceof NullLiteral) { return SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf940cd6167L, "jetbrains.mps.baseLanguage.structure.NullLiteral")); } else { // import token as string constant even if it was an error in literal return _quotation_createNode_do26wr_a1a0c0pb(NameUtil.escapeString(new String(((Literal) x).source()))); } } } public int addReference(TypeReference typeRef, SNode source, SReferenceLink role) { if (typeRef instanceof QualifiedTypeReference) { return addReference((QualifiedTypeReference) typeRef, source, role); } else if (typeRef instanceof SingleTypeReference) { return addReference((SingleTypeReference) typeRef, source, role); } else { LOG.error("Unexpected kind of type reference: " + typeRef.getClass().getName()); return 0; } } public int addReference(SingleTypeReference typeRef, SNode source, SReferenceLink role) { org.jetbrains.mps.openapi.model.SReference ref = new DynamicReference(role, source, null, new String(typeRef.token)); source.setReference(role, ref); return 1; } public int addReference(QualifiedTypeReference typeRef, SNode source, SReferenceLink role) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < typeRef.tokens.length; i++) { if (i > 0) { sb.append("."); } sb.append(new String(typeRef.tokens[i])); } String qname = sb.toString(); org.jetbrains.mps.openapi.model.SReference ref = new DynamicReference(role, source, null, qname); source.setReference(role, ref); return 2; } @Override protected ASTConverterWithExpressions withNewState(ASTConverter.State state) { return new ASTConverterWithExpressions.ASTConverterExprWithState(this, state); } private class ASTConverterExprWithState extends ASTConverterWithExpressions { private ASTConverter.State myState; private ASTConverterExprWithState(ASTConverterWithExpressions base, ASTConverter.State state) { super(base); myState = state; } @Override public ASTConverter.State getState() { return myState; } } private static SNode _quotation_createNode_do26wr_a1a0c0pb(Object parameter_1) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode quotedNode_2 = null; quotedNode_2 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(MetaAdapterFactory.getLanguage(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, "jetbrains.mps.baseLanguage"), 0xf93d565d10L, "StringLiteral"), null, null, false); SNodeAccessUtil.setProperty(quotedNode_2, MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d565d10L, 0xf93d565d11L, "value"), (String) parameter_1); return quotedNode_2; } }