001 /*
002 * mesopotamia-java @mesopotamia.version@
003 * Multilingual parser and repository.
004 * Copyright (C) 2005 Hammurapi Group
005 *
006 * This program is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 2 of the License, or (at your option) any later version.
010 *
011 * This program is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with this library; if not, write to the Free Software
018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019 *
020 * URL: http://http://www.hammurapi.biz
021 * e-Mail: support@hammurapi.biz
022 */
023 package org.mesopotamia.lang.java;
024
025 import java.util.List;
026
027 import org.mesopotamia.LanguageElement;
028 import org.mesopotamia.LanguageElementHandle;
029 import org.mesopotamia.NodeData;
030 import org.mesopotamia.RepositoryLanguage;
031 import org.mesopotamia.Scan;
032
033 import biz.hammurapi.util.VisitableBase;
034 import biz.hammurapi.util.Visitor;
035
036 /**
037 * Base class for all language elements for Java language
038 * @author Pavel Vlasov
039 * @revision $Revision$
040 */
041 public class JavaLanguageElement extends LanguageElement {
042
043 public static final String JAVA_LANG_OBJECT = "java.lang.Object";
044
045 public JavaLanguageElement(
046 NodeData xData,
047 Class<?> context,
048 Scan scan,
049 RepositoryLanguage language,
050 Object environment) {
051 super(xData, context, scan, language, environment);
052 if (xData instanceof MesopotamiaJavaNode) {
053 comments = ((MesopotamiaJavaNode) xData).getComments();
054 }
055 }
056
057 private List<Comment> comments;
058
059 /**
060 * @return Comments before this element, if any.
061 */
062 public List<Comment> getComments() {
063 return comments;
064 }
065
066 protected LanguageElementHandle providerHandle;
067
068 public void setProviderHandle(LanguageElementHandle providerHandle) {
069 this.providerHandle = providerHandle;
070 }
071
072 protected void acceptChildren(Visitor visitor) {
073 super.acceptChildren(visitor);
074 VisitableBase.object2visitor(getProvider(), visitor);
075 }
076
077 /**
078 * Provider for this language element, i.e. what comes before DOT.
079 * @return
080 */
081 public LanguageElement getProvider() {
082 return (LanguageElement) (providerHandle == null ? null : getScan().getLanguageElement(providerHandle));
083 }
084
085 protected String fcn;
086 protected boolean fcnCalculated;
087
088 /**
089 * Helper method for giving FCN's to anonymous and local classes.
090 * @return
091 */
092 protected String getFcn() {
093 if (!fcnCalculated) {
094 LanguageElement parent = getParent();
095 if (parent instanceof JavaLanguageElement) {
096 fcn = ((JavaLanguageElement) parent).getFcn()+"."+getId();
097 } else {
098 fcn = String.valueOf(getId());
099 }
100 fcnCalculated = true;
101 }
102 return fcn;
103 }
104 }