001 package org.mesopotamia.lang.java; 002 003 import java.util.List; 004 005 import org.mesopotamia.LanguageElement; 006 import org.mesopotamia.LanguageElementFactory; 007 import org.mesopotamia.LanguageElementHandle; 008 import org.mesopotamia.MesopotamiaException; 009 import org.mesopotamia.MesopotamiaNode; 010 import org.mesopotamia.NodeData; 011 import org.mesopotamia.RepositoryLanguage; 012 import org.mesopotamia.Scan; 013 import org.mesopotamia.SyntaxTree; 014 015 public class ExpressionFactory implements LanguageElementFactory { 016 017 private LanguageElement languageElement; 018 019 @SuppressWarnings("unchecked") 020 public ExpressionFactory( 021 NodeData xData, 022 Class<?> context, 023 Scan scan, 024 RepositoryLanguage language, 025 Object environment) throws MesopotamiaException { 026 SyntaxTree st = (SyntaxTree) scan.getSourceUnit(xData.getSourceUnitId()).getLevelData("ast"); 027 MesopotamiaNode thisNode = st.findNode(xData.getId()); 028 List children = thisNode.getChildren(); 029 NodeData childData = children.isEmpty() ? null : (NodeData) children.get(0); 030 if (childData==null) { 031 throw new MesopotamiaException("Child at position 0 not found for expression ID: "+xData.getId()); 032 } 033 languageElement=scan.getLanguageElement(new LanguageElementHandle(childData.getSourceUnitId(), childData.getId(), context, Expression.class)); 034 if (thisNode.getParent()!=null) { 035 languageElement.setParentHandle(new LanguageElementHandle(thisNode.getSourceUnitId(), thisNode.getParent().getId(),null,null)); 036 } 037 } 038 039 @SuppressWarnings("unchecked") 040 public LanguageElement createLanguageElement(Class targetClass) { 041 return languageElement; 042 } 043 }