/******************************************************************************* * Copyright (c) 2000, 2011 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 * Erling Ellingsen - patch for bug 125570 *******************************************************************************/ package org.eclipse.wst.jsdt.internal.compiler.lookup; import java.util.HashMap; import org.eclipse.wst.jsdt.core.compiler.CharOperation; import org.eclipse.wst.jsdt.internal.compiler.CompilationResult; import org.eclipse.wst.jsdt.internal.compiler.ast.CompilationUnitDeclaration; import org.eclipse.wst.jsdt.internal.compiler.util.HashtableOfObject; import org.eclipse.wst.jsdt.internal.oaametadata.LibraryAPIs; public class LibraryAPIsScope extends CompilationUnitScope { HashMap resolvedTypes=new HashMap(); HashtableOfObject translations=new HashtableOfObject(); LibraryAPIs apis; public LibraryAPIsScope(LibraryAPIs apis, LookupEnvironment environment) { super(environment); this.apis=apis; this.referenceContext = null; this.currentPackageName = CharOperation.NO_CHAR_CHAR; this.resolvedTypes.put("any", TypeBinding.ANY); this.resolvedTypes.put("Any", TypeBinding.ANY); this.resolvedTypes.put("null", TypeBinding.NULL); translations.put("object".toCharArray(), "Object".toCharArray()); translations.put("boolean".toCharArray(), "Boolean".toCharArray()); translations.put("number".toCharArray(), "Number".toCharArray()); translations.put("string".toCharArray(), "String".toCharArray()); translations.put("array".toCharArray(), "Array".toCharArray()); CompilationResult result = new CompilationResult(apis.fileName,new char[][]{},0,0,0); CompilationUnitDeclaration unit = new CompilationUnitDeclaration(environment.problemReporter,result,0); unit.scope=this; this.referenceContext=unit; } public PackageBinding getDefaultPackage() { return environment.defaultPackage; } public TypeBinding resolveType(String name) { if (name==null) return TypeBinding.ANY; TypeBinding binding = (TypeBinding)this.resolvedTypes.get(name); if (binding!=null) return binding; if (name.length()>1 && name.charAt(0)=='[' && name.charAt(name.length()-1)==']') { name=name.substring(1, name.length()-1); TypeBinding memberType = resolveType(name); binding=new ArrayBinding(memberType, 1, this.compilationUnitScope().environment) ; } else { if (name.indexOf('|')>0) { char[][] names = CharOperation.splitAndTrimOn('|', name.toCharArray()); for (int i = 0; i < names.length; i++) { names[i]=translateName(names[i]); } binding=new MultipleTypeBinding(this,names); } else { binding = this.getType(translateName(name.toCharArray())); } /* the inferred type isn't valid, so don't assign it to the variable */ if(!binding.isValidBinding()) binding=TypeBinding.UNKNOWN; } // if (node!=null && !this.resolvedType.isValidBinding()) { // libraryScope.problemReporter().invalidType(node, this.resolvedType); // return null; // } // if (node!=null && node.isTypeUseDeprecated(this.resolvedType, libraryScope)) // libraryScope.problemReporter().deprecatedType(this.resolvedType, node); this.resolvedTypes.put(name, binding); return binding; } private char[] translateName(char[] name) { char [] newName=(char[])this.translations.get(name); return (newName!=null) ? newName : name; } public String toString() { return "--- LibraryAPIsScope Scope : " + new String(referenceContext.getFileName()); //$NON-NLS-1$ } public void cleanup() { super.cleanup(); } public char[] getFileName() { return this.apis.fileName; } }