--- /dev/null
+package net.sourceforge.phpdt.internal.compiler.parser;
+
+import java.util.List;
+
+import net.sourceforge.phpdt.core.ICompilationUnit;
+import net.sourceforge.phpdt.core.IType;
+import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.internal.compiler.ast.ImportReference;
+import net.sourceforge.phpdt.internal.compiler.ast.SingleTypeReference;
+
+import org.eclipse.core.resources.IFile;
+
+public class ParserUtil {
+
+ public static SingleTypeReference getTypeReference(Scanner scanner, List includesList, char[] ident) {
+ String identStr = new String(ident);
+ ImportReference ir;
+ IFile file = null;
+ for (int i = 0; i < includesList.size(); i++) {
+ ir = (ImportReference) includesList.get(i);
+ file = ir.getFile();
+ if (file != null) {
+ ICompilationUnit unit = JavaCore.createCompilationUnitFrom(file);
+ if (unit != null) {
+ try {
+ // TODO avoid recursion here. Sometimes we get a java.lang.StackOverflowError
+ IType[] types = unit.getAllTypes();
+ if (types != null) {
+ for (int j = 0; j < types.length; j++) {
+ if (types[j].getElementName().equals(identStr)) {
+ return new SingleTypeReference(file, ident, scanner.getCurrentTokenStartPosition(), scanner
+ .getCurrentTokenEndPosition());
+ }
+ }
+ }
+ } catch (JavaModelException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ return null;
+ }
+}