/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.wst.jsdt.internal.compiler.batch; import java.io.File; import java.io.IOException; import java.util.Hashtable; import org.eclipse.wst.jsdt.core.UnimplementedException; import org.eclipse.wst.jsdt.core.compiler.CharOperation; import org.eclipse.wst.jsdt.internal.compiler.env.AccessRuleSet; import org.eclipse.wst.jsdt.internal.compiler.env.NameEnvironmentAnswer; import org.eclipse.wst.jsdt.internal.compiler.impl.ITypeRequestor; import org.eclipse.wst.jsdt.internal.compiler.lookup.Binding; import org.eclipse.wst.jsdt.internal.oaametadata.LibraryAPIs; import org.eclipse.wst.jsdt.internal.oaametadata.MetadataReader; public class ClasspathMetadataFile extends ClasspathLocation { protected File file; protected Hashtable packageCache; String packageName; protected char[] normalizedPath; String encoding; LibraryAPIs apis; NameEnvironmentAnswer foundAnswer; public ClasspathMetadataFile(File file, String encoding, AccessRuleSet accessRuleSet, String destinationPath) { super(accessRuleSet,destinationPath); this.file = file; this.packageName=file.getName(); this.encoding=encoding; } public NameEnvironmentAnswer findBinding(char[] typeName, String qualifiedPackageName, int type, ITypeRequestor requestor) { // if (!qualifiedPackageName.equals(this.packageName)) // return null; if (foundAnswer==null) { parseFile(requestor); } if (this.apis==null) return null; String name = new String(typeName); if ((type&(Binding.VARIABLE|Binding.FIELD))!=0) { if (this.apis.getGlobalVar(name)!=null) return foundAnswer; } if ((type&Binding.TYPE)!=0) { if (this.apis.getClass(name)!=null) return foundAnswer; } if ((type&Binding.METHOD)!=0) { if (this.apis.getGlobalMethod(name)!=null) return foundAnswer; } return null; } private void parseFile(ITypeRequestor requestor) { CompilationUnit compilationUnit = new CompilationUnit(null, file.getAbsolutePath(), this.encoding); compilationUnit.packageName=new char [][]{packageName.toCharArray()}; apis=MetadataReader.readAPIsFromFile(this.file.getAbsolutePath()); foundAnswer = new NameEnvironmentAnswer(apis); } public NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageName, String qualifiedBinaryFileName) { return findClass(typeName,qualifiedPackageName,qualifiedBinaryFileName,false); } public NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageName, String qualifiedBinaryFileName, boolean asBinaryOnly) { if (!isPackage(qualifiedPackageName)) return null; // most common case throw new org.eclipse.wst.jsdt.core.UnimplementedException(); // return null; } public void initialize() throws IOException { } public boolean isPackage(String qualifiedPackageName) { return packageName.equals(qualifiedPackageName); } public void reset() { this.packageCache = null; } public String toString() { return "Classpath for file " + this.file.getPath(); //$NON-NLS-1$ } public char[] normalizedPath() { if (this.normalizedPath == null) { char[] rawName = this.file.getPath().toCharArray(); if (File.separatorChar == '\\') { CharOperation.replace(rawName, '\\', '/'); } this.normalizedPath = CharOperation.subarray(rawName, 0, CharOperation.lastIndexOf('.', rawName)); } return this.normalizedPath; } public String getPath(){ return this.file.getPath(); } public char[][][] findTypeNames(String qualifiedPackageName) { throw new UnimplementedException("implement"); //$NON-NLS-1$ } }