001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package modeldump;
043:
044: import java.util.ArrayList;
045: import java.util.Iterator;
046: import java.util.List;
047: import modelutils.FileCodeModel;
048: import modelutils.FileCodeModelDeclaration;
049: import org.netbeans.modules.cnd.api.model.CsmDeclaration;
050: import org.netbeans.modules.cnd.api.model.CsmFile;
051: import org.netbeans.modules.cnd.api.model.CsmOffsetable;
052: import org.netbeans.modules.cnd.api.model.CsmOffsetable.Position;
053: import org.netbeans.modules.cnd.api.model.CsmType;
054: import org.netbeans.modules.cnd.modelimpl.csm.ClassForwardDeclarationImpl;
055: import org.netbeans.modules.cnd.modelimpl.csm.ClassImpl;
056: import org.netbeans.modules.cnd.modelimpl.csm.ConstructorDefinitionImpl;
057: import org.netbeans.modules.cnd.modelimpl.csm.FieldImpl;
058: import org.netbeans.modules.cnd.modelimpl.csm.FunctionDDImpl;
059: import org.netbeans.modules.cnd.modelimpl.csm.FunctionDefinitionImpl;
060: import org.netbeans.modules.cnd.modelimpl.csm.FunctionImpl;
061: import org.netbeans.modules.cnd.modelimpl.csm.ParameterImpl;
062: import org.netbeans.modules.cnd.modelimpl.csm.TypedefImpl;
063: import org.netbeans.modules.cnd.modelimpl.csm.UsingDirectiveImpl;
064: import org.netbeans.modules.cnd.modelimpl.csm.VariableImpl;
065:
066: //import org.openide.util.NotImplementedException;
067:
068: /**
069: *
070: * @author ak119685
071: */
072: public class FileCodeModelReader {
073:
074: /** Creates a new instance of FileCodeModelReader */
075: public FileCodeModelReader() {
076: }
077:
078: public FileCodeModel getModelFor(CsmFile file) {
079: String absolutePath = file.getAbsolutePath();
080: ArrayList<FileCodeModelDeclaration> declarations = new ArrayList<FileCodeModelDeclaration>();
081:
082: List declarationList = file.getDeclarations();
083: for (Iterator<CsmDeclaration> i = declarationList.iterator(); i
084: .hasNext();) {
085: declarations.add(getFileCodeModelDeclaration(i.next()));
086: }
087:
088: FileCodeModel cm = new FileCodeModel(absolutePath, declarations);
089: return cm;
090: }
091:
092: public static FileCodeModelDeclaration getFileCodeModelDeclaration(
093: CsmDeclaration declaration) {
094: FileCodeModelDeclaration result = new FileCodeModelDeclaration();
095: result.setKind(declaration.getKind().toString());
096:
097: Position declPosition = ((CsmOffsetable) declaration)
098: .getStartPosition();
099: String declPositionStr = new String("" + declPosition.getLine()
100: + ":" + declPosition.getColumn()); // NOI18N
101:
102: String declarationString = "";
103:
104: // TODO: Is it OK?
105:
106: if (declaration instanceof FunctionImpl) {
107: FunctionImpl functionDeclaration = (FunctionImpl) declaration;
108: List<ParameterImpl> params = functionDeclaration
109: .getParameters();
110:
111: StringBuffer paramsStr = new StringBuffer();
112:
113: for (Iterator<ParameterImpl> j = params.iterator(); j
114: .hasNext();) {
115: ParameterImpl param = j.next();
116: FileCodeModelDeclaration paramDecl = getFileCodeModelDeclaration(param);
117: paramsStr.append(paramDecl.getDeclaration());
118:
119: if (j.hasNext()) {
120: paramsStr.append(", "); // NOI18N
121: }
122:
123: result.addChild(paramDecl);
124: }
125:
126: declarationString = functionDeclaration.getReturnType()
127: .getText()
128: + " "
129: + functionDeclaration.getQualifiedName()
130: + "(" + paramsStr.toString() + ")"; // NOI18N
131: } else if (declaration instanceof VariableImpl) {
132: VariableImpl variable = (VariableImpl) declaration;
133: CsmType type = variable.getType();
134:
135: if (type != null) {
136: declarationString = type.getText() + " "; // NOI18N
137: }
138:
139: declarationString += variable.getQualifiedName();
140: } else if (TypedefImpl.class.equals(declaration.getClass())) {
141: TypedefImpl typedefImpl = (TypedefImpl) declaration;
142: declarationString = typedefImpl.getType().getText() + " "
143: + typedefImpl.getQualifiedName().toString(); // NOI18N
144: } else {
145: declarationString = declaration.getQualifiedName();
146: }
147:
148: result.setDeclarationString(declarationString);
149: result.setDeclarationPosition(declPositionStr);
150:
151: return result;
152: }
153: }
|