import java.util.Map;
+import net.sourceforge.phpdt.core.JavaCore;
import net.sourceforge.phpdt.core.jdom.IDOMCompilationUnit;
+import net.sourceforge.phpdt.core.jdom.IDOMFactory;
import net.sourceforge.phpdt.internal.compiler.ISourceElementRequestor;
import net.sourceforge.phpdt.internal.compiler.SourceElementParser;
import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit;
+import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
import net.sourceforge.phpdt.internal.core.util.CharArrayOps;
-import net.sourceforge.phpeclipse.PHPCore;
/**
* A DOM builder that uses the SourceElementParser
*/
public class SimpleDOMBuilder extends AbstractDOMBuilder implements ISourceElementRequestor {
-public void acceptImport(int declarationStart, int declarationEnd, char[] name, boolean onDemand) {
- int[] sourceRange = {declarationStart, declarationEnd};
- String importName = new String(name);
- /** name is set to contain the '*' */
- if (onDemand) {
- importName+=".*"; //$NON-NLS-1$
- }
- fNode= new DOMImport(fDocument, sourceRange, importName, onDemand);
- addChild(fNode);
-}
-public void acceptPackage(int declarationStart, int declarationEnd, char[] name) {
- int[] sourceRange= new int[] {declarationStart, declarationEnd};
- fNode= new DOMPackage(fDocument, sourceRange, CharArrayOps.charToString(name));
- addChild(fNode);
-}
-/**
- * @see IDOMFactory#createCompilationUnit(String, String)
- */
-public IDOMCompilationUnit createCompilationUnit(String sourceCode, String name) {
- return createCompilationUnit(sourceCode.toCharArray(), name.toCharArray());
-}
-/**
- * @see IDOMFactory#createCompilationUnit(String, String)
- */
-public IDOMCompilationUnit createCompilationUnit(ICompilationUnit compilationUnit) {
- initializeBuild(compilationUnit.getContents(), true, true);
- getParser(PHPCore.getOptions()).parseCompilationUnit(compilationUnit, false);
- return super.createCompilationUnit(compilationUnit);
-}
-/**
- * Creates a new DOMMethod and inizializes.
- *
- * @param declarationStart - a source position corresponding to the first character
- * of this constructor declaration
- * @param modifiers - the modifiers for this constructor converted to a flag
- * @param returnType - the name of the return type
- * @param name - the name of this constructor
- * @param nameStart - a source position corresponding to the first character of the name
- * @param nameEnd - a source position corresponding to the last character of the name
- * @param parameterTypes - a list of parameter type names
- * @param parameterNames - a list of the names of the parameters
- * @param exceptionTypes - a list of the exception types
- */
-protected void enterAbstractMethod(int declarationStart, int modifiers,
- char[] returnType, char[] name, int nameStart, int nameEnd, char[][] parameterTypes,
- char[][] parameterNames, char[][] exceptionTypes, boolean isConstructor) {
-
- int[] sourceRange = {declarationStart, -1}; // will be fixed up on exit
- int[] nameRange = {nameStart, nameEnd};
- fNode = new DOMMethod(fDocument, sourceRange, CharArrayOps.charToString(name), nameRange, modifiers,
- isConstructor, CharArrayOps.charToString(returnType),
- CharArrayOps.charcharToString(parameterTypes),
- CharArrayOps.charcharToString(parameterNames),
- CharArrayOps.charcharToString(exceptionTypes));
- addChild(fNode);
- fStack.push(fNode);
-}
-/**
- */
-public void enterClass(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd, char[] superclass, char[][] superinterfaces) {
- enterType(declarationStart, modifiers, name, nameStart, nameEnd, superclass,
- superinterfaces, true);
-}
-/**
- */
-public void enterConstructor(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd, char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes) {
- /* see 1FVIIQZ */
- String nameString = new String(fDocument, nameStart, nameEnd - nameStart);
- int openParenPosition = nameString.indexOf('(');
- if (openParenPosition > -1)
- nameEnd = nameStart + openParenPosition - 1;
-
- enterAbstractMethod(declarationStart, modifiers,
- null, name, nameStart, nameEnd, parameterTypes,
- parameterNames, exceptionTypes,true);
-}
-/**
- */
-public void enterField(int declarationStart, int modifiers, char[] type, char[] name, int nameStart, int nameEnd) {
-
- int[] sourceRange = {declarationStart, -1};
- int[] nameRange = {nameStart, nameEnd};
- boolean isSecondary= false;
- if (fNode instanceof DOMField) {
- isSecondary = declarationStart == fNode.fSourceRange[0];
- }
- fNode = new DOMField(fDocument, sourceRange, CharArrayOps.charToString(name), nameRange,
- modifiers, CharArrayOps.charToString(type), isSecondary);
- addChild(fNode);
- fStack.push(fNode);
-}
-/**
+ public void acceptImport(int declarationStart, int declarationEnd, char[] name, boolean onDemand) {
+ int[] sourceRange = { declarationStart, declarationEnd };
+ String importName = new String(name);
+ /** name is set to contain the '*' */
+ if (onDemand) {
+ importName += ".*"; //$NON-NLS-1$
+ }
+ fNode = new DOMImport(fDocument, sourceRange, importName, onDemand);
+ addChild(fNode);
+ }
- */
-public void enterInitializer(int declarationSourceStart, int modifiers) {
- int[] sourceRange = {declarationSourceStart, -1};
- fNode = new DOMInitializer(fDocument, sourceRange, modifiers);
- addChild(fNode);
- fStack.push(fNode);
-}
-/**
- */
-public void enterInterface(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd, char[][] superinterfaces) {
- enterType(declarationStart, modifiers, name, nameStart, nameEnd, null,
- superinterfaces, false);
-}
-/**
- */
-public void enterMethod(int declarationStart, int modifiers, char[] returnType, char[] name, int nameStart, int nameEnd, char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes) {
- enterAbstractMethod(declarationStart, modifiers,
- returnType, name, nameStart, nameEnd, parameterTypes,
- parameterNames, exceptionTypes,false);
-}
-/**
- */
-protected void enterType(int declarationStart, int modifiers, char[] name,
- int nameStart, int nameEnd, char[] superclass, char[][] superinterfaces, boolean isClass) {
- if (fBuildingType) {
- int[] sourceRange = {declarationStart, -1}; // will be fixed in the exit
- int[] nameRange = new int[] {nameStart, nameEnd};
- fNode = new DOMType(fDocument, sourceRange, new String(name), nameRange,
- modifiers, CharArrayOps.charcharToString(superinterfaces), isClass);
- addChild(fNode);
- fStack.push(fNode);
- }
-}
-/**
- * Finishes the configuration of the class DOM object which
- * was created by a previous enterClass call.
- *
- * @see ISourceElementRequestor#exitClass(int)
- */
-public void exitClass(int declarationEnd) {
- exitType(declarationEnd);
-}
-/**
- * Finishes the configuration of the method DOM object which
- * was created by a previous enterConstructor call.
- *
- * @see ISourceElementRequestor#exitConstructor(int)
- */
-public void exitConstructor(int declarationEnd) {
- exitMember(declarationEnd);
-}
-/**
- */
-public void exitField(int initializationStart, int declarationEnd, int declarationSourceEnd) {
- exitMember(declarationEnd);
-}
-/**
- */
-public void exitInitializer(int declarationEnd) {
- exitMember(declarationEnd);
-}
-/**
- */
-public void exitInterface(int declarationEnd) {
- exitType(declarationEnd);
-}
-/**
- * Finishes the configuration of the member.
- *
- * @param declarationEnd - a source position corresponding to the end of the method
- * declaration. This can include whitespace and comments following the closing bracket.
- */
-protected void exitMember(int declarationEnd) {
- DOMMember m= (DOMMember) fStack.pop();
- m.setSourceRangeEnd(declarationEnd);
- fNode = m;
-}
-/**
- */
-public void exitMethod(int declarationEnd) {
- exitMember(declarationEnd);
-}
-/**
- * @see AbstractDOMBuilder#exitType
- *
- * @param declarationEnd - a source position corresponding to the end of the class
- * declaration. This can include whitespace and comments following the closing bracket.
- */
-protected void exitType(int declarationEnd) {
- exitType(declarationEnd, declarationEnd);
-}
-/**
- * Creates a new parser.
- */
-protected SourceElementParser getParser(Map settings) {
- return new SourceElementParser(this, new DefaultProblemFactory());//, new CompilerOptions(settings));
-}
-}
+ public void acceptPackage(int declarationStart, int declarationEnd, char[] name) {
+ int[] sourceRange = new int[] { declarationStart, declarationEnd };
+ fNode = new DOMPackage(fDocument, sourceRange, CharArrayOps.charToString(name));
+ addChild(fNode);
+ }
+
+ /**
+ * @see IDOMFactory#createCompilationUnit(String, String)
+ */
+ public IDOMCompilationUnit createCompilationUnit(String sourceCode, String name) {
+ return createCompilationUnit(sourceCode.toCharArray(), name.toCharArray());
+ }
+
+ /**
+ * @see IDOMFactory#createCompilationUnit(String, String)
+ */
+ public IDOMCompilationUnit createCompilationUnit(ICompilationUnit compilationUnit) {
+ initializeBuild(compilationUnit.getContents(), true, true);
+ getParser(JavaCore.getOptions()).parseCompilationUnit(compilationUnit, false);
+ return super.createCompilationUnit(compilationUnit);
+ }
+
+ /**
+ * Creates a new DOMMethod and inizializes.
+ *
+ * @param declarationStart -
+ * a source position corresponding to the first character of this constructor declaration
+ * @param modifiers -
+ * the modifiers for this constructor converted to a flag
+ * @param returnType -
+ * the name of the return type
+ * @param name -
+ * the name of this constructor
+ * @param nameStart -
+ * a source position corresponding to the first character of the name
+ * @param nameEnd -
+ * a source position corresponding to the last character of the name
+ * @param parameterTypes -
+ * a list of parameter type names
+ * @param parameterNames -
+ * a list of the names of the parameters
+ * @param exceptionTypes -
+ * a list of the exception types
+ */
+ protected void enterAbstractMethod(int declarationStart, int modifiers, char[] returnType, char[] name, int nameStart,
+ int nameEnd, char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes, boolean isConstructor) {
+
+ int[] sourceRange = { declarationStart, -1 }; // will be fixed up on exit
+ int[] nameRange = { nameStart, nameEnd };
+ fNode = new DOMMethod(fDocument, sourceRange, CharArrayOps.charToString(name), nameRange, modifiers, isConstructor,
+ CharArrayOps.charToString(returnType), CharArrayOps.charcharToString(parameterTypes), CharArrayOps
+ .charcharToString(parameterNames), CharArrayOps.charcharToString(exceptionTypes));
+ addChild(fNode);
+ fStack.push(fNode);
+ }
+
+ /**
+ */
+ public void enterClass(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd, char[] superclass,
+ char[][] superinterfaces) {
+ enterType(declarationStart, modifiers, name, nameStart, nameEnd, superclass, superinterfaces, true);
+ }
+
+ /**
+ */
+ public void enterConstructor(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd,
+ char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes) {
+ /* see 1FVIIQZ */
+ String nameString = new String(fDocument, nameStart, nameEnd - nameStart);
+ int openParenPosition = nameString.indexOf('(');
+ if (openParenPosition > -1)
+ nameEnd = nameStart + openParenPosition - 1;
+
+ enterAbstractMethod(declarationStart, modifiers, null, name, nameStart, nameEnd, parameterTypes, parameterNames,
+ exceptionTypes, true);
+ }
+
+ /**
+ */
+ public void enterField(int declarationStart, int modifiers, char[] type, char[] name, int nameStart, int nameEnd) {
+
+ int[] sourceRange = { declarationStart, -1 };
+ int[] nameRange = { nameStart, nameEnd };
+ boolean isSecondary = false;
+ if (fNode instanceof DOMField) {
+ isSecondary = declarationStart == fNode.fSourceRange[0];
+ }
+ fNode = new DOMField(fDocument, sourceRange, CharArrayOps.charToString(name), nameRange, modifiers, CharArrayOps
+ .charToString(type), isSecondary);
+ addChild(fNode);
+ fStack.push(fNode);
+ }
+
+ /**
+ *
+ */
+ public void enterInitializer(int declarationSourceStart, int modifiers) {
+ int[] sourceRange = { declarationSourceStart, -1 };
+ fNode = new DOMInitializer(fDocument, sourceRange, modifiers);
+ addChild(fNode);
+ fStack.push(fNode);
+ }
+
+ /**
+ */
+ public void enterInterface(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd, char[][] superinterfaces) {
+ enterType(declarationStart, modifiers, name, nameStart, nameEnd, null, superinterfaces, false);
+ }
+
+ /**
+ */
+ public void enterMethod(int declarationStart, int modifiers, char[] returnType, char[] name, int nameStart, int nameEnd,
+ char[][] parameterTypes, char[][] parameterNames, char[][] exceptionTypes) {
+ enterAbstractMethod(declarationStart, modifiers, returnType, name, nameStart, nameEnd, parameterTypes, parameterNames,
+ exceptionTypes, false);
+ }
+
+ /**
+ */
+ protected void enterType(int declarationStart, int modifiers, char[] name, int nameStart, int nameEnd, char[] superclass,
+ char[][] superinterfaces, boolean isClass) {
+ if (fBuildingType) {
+ int[] sourceRange = { declarationStart, -1 }; // will be fixed in the exit
+ int[] nameRange = new int[] { nameStart, nameEnd };
+ fNode = new DOMType(fDocument, sourceRange, new String(name), nameRange, modifiers, CharArrayOps
+ .charcharToString(superinterfaces), isClass);
+ addChild(fNode);
+ fStack.push(fNode);
+ }
+ }
+
+ /**
+ * Finishes the configuration of the class DOM object which was created by a previous enterClass call.
+ *
+ * @see ISourceElementRequestor#exitClass(int)
+ */
+ public void exitClass(int declarationEnd) {
+ exitType(declarationEnd);
+ }
+
+ /**
+ * Finishes the configuration of the method DOM object which was created by a previous enterConstructor call.
+ *
+ * @see ISourceElementRequestor#exitConstructor(int)
+ */
+ public void exitConstructor(int declarationEnd) {
+ exitMember(declarationEnd);
+ }
+
+ /**
+ */
+ public void exitField(int initializationStart, int declarationEnd, int declarationSourceEnd) {
+ exitMember(declarationEnd);
+ }
+
+ /**
+ */
+ public void exitInitializer(int declarationEnd) {
+ exitMember(declarationEnd);
+ }
+
+ /**
+ */
+ public void exitInterface(int declarationEnd) {
+ exitType(declarationEnd);
+ }
+
+ /**
+ * Finishes the configuration of the member.
+ *
+ * @param declarationEnd -
+ * a source position corresponding to the end of the method declaration. This can include whitespace and comments
+ * following the closing bracket.
+ */
+ protected void exitMember(int declarationEnd) {
+ DOMMember m = (DOMMember) fStack.pop();
+ m.setSourceRangeEnd(declarationEnd);
+ fNode = m;
+ }
+
+ /**
+ */
+ public void exitMethod(int declarationEnd) {
+ exitMember(declarationEnd);
+ }
+
+ /**
+ * @see AbstractDOMBuilder#exitType
+ *
+ * @param declarationEnd -
+ * a source position corresponding to the end of the class declaration. This can include whitespace and comments
+ * following the closing bracket.
+ */
+ protected void exitType(int declarationEnd) {
+ exitType(declarationEnd, declarationEnd);
+ }
+
+ /**
+ * Creates a new parser.
+ */
+ protected SourceElementParser getParser(Map settings) {
+ return new SourceElementParser(this, new DefaultProblemFactory(), new CompilerOptions(settings));
+ }
+}
\ No newline at end of file