blob: d91791b85a18af48cede2160ef5348717d0a6170 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.dev.javac;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JConstructor;
import com.google.gwt.core.ext.typeinfo.JField;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.core.ext.typeinfo.JPackage;
import com.google.gwt.core.ext.typeinfo.JParameter;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.dev.resource.Resource;
import com.google.gwt.dev.util.Util;
import com.google.gwt.util.tools.Utility;
import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* A grab bag of utility functions useful for dealing with java files.
*/
public class Shared {
public static final int MOD_ABSTRACT = 0x00000001;
public static final int MOD_FINAL = 0x00000002;
public static final int MOD_NATIVE = 0x00000004;
public static final int MOD_PRIVATE = 0x00000008;
public static final int MOD_PROTECTED = 0x00000010;
public static final int MOD_PUBLIC = 0x00000020;
public static final int MOD_STATIC = 0x00000040;
public static final int MOD_TRANSIENT = 0x00000080;
public static final int MOD_VOLATILE = 0x00000100;
public static final JClassType[] NO_JCLASSES = new JClassType[0];
public static final JConstructor[] NO_JCTORS = new JConstructor[0];
public static final JField[] NO_JFIELDS = new JField[0];
public static final JMethod[] NO_JMETHODS = new JMethod[0];
public static final JPackage[] NO_JPACKAGES = new JPackage[0];
public static final JParameter[] NO_JPARAMS = new JParameter[0];
public static final JType[] NO_JTYPES = new JType[0];
public static final String[][] NO_STRING_ARR_ARR = new String[0][];
public static final String[] NO_STRINGS = new String[0];
public static int bindingToModifierBits(FieldBinding binding) {
int bits = 0;
bits |= (binding.isPublic() ? MOD_PUBLIC : 0);
bits |= (binding.isPrivate() ? MOD_PRIVATE : 0);
bits |= (binding.isProtected() ? MOD_PROTECTED : 0);
bits |= (binding.isStatic() ? MOD_STATIC : 0);
bits |= (binding.isTransient() ? MOD_TRANSIENT : 0);
bits |= (binding.isFinal() ? MOD_FINAL : 0);
bits |= (binding.isVolatile() ? MOD_VOLATILE : 0);
return bits;
}
public static int bindingToModifierBits(MethodBinding binding) {
int bits = 0;
bits |= (binding.isPublic() ? MOD_PUBLIC : 0);
bits |= (binding.isPrivate() ? MOD_PRIVATE : 0);
bits |= (binding.isProtected() ? MOD_PROTECTED : 0);
bits |= (binding.isStatic() ? MOD_STATIC : 0);
bits |= (binding.isFinal() ? MOD_FINAL : 0);
bits |= (binding.isNative() ? MOD_NATIVE : 0);
bits |= (binding.isAbstract() ? MOD_ABSTRACT : 0);
return bits;
}
public static int bindingToModifierBits(ReferenceBinding binding) {
int bits = 0;
bits |= (binding.isPublic() ? MOD_PUBLIC : 0);
bits |= (binding.isPrivate() ? MOD_PRIVATE : 0);
bits |= (binding.isProtected() ? MOD_PROTECTED : 0);
bits |= (binding.isStatic() ? MOD_STATIC : 0);
bits |= (binding.isFinal() ? MOD_FINAL : 0);
bits |= (binding.isAbstract() ? MOD_ABSTRACT : 0);
return bits;
}
public static String getPackageName(String qualifiedTypeName) {
int pos = qualifiedTypeName.lastIndexOf('.');
return (pos < 0) ? "" : qualifiedTypeName.substring(0, pos);
}
public static String getPackageNameFromBinary(String binaryName) {
int pos = binaryName.lastIndexOf('/');
return (pos < 0) ? "" : binaryName.substring(0, pos).replace('/', '.');
}
public static String getShortName(String qualifiedTypeName) {
int pos = qualifiedTypeName.lastIndexOf('.');
return (pos < 0) ? qualifiedTypeName : qualifiedTypeName.substring(pos + 1);
}
public static String getSlashedPackageFrom(String internalName) {
int pos = internalName.lastIndexOf('/');
return (pos < 0) ? "" : internalName.substring(0, pos);
}
public static String getTypeName(Resource sourceFile) {
String path = sourceFile.getPath();
assert (path.endsWith(".java"));
path = path.substring(0, path.lastIndexOf('.'));
return path.replace('/', '.');
}
public static String makeTypeName(String packageName, String shortName) {
if (packageName.length() == 0) {
return shortName;
} else {
return packageName + '.' + shortName;
}
}
public static String readContent(InputStream content) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for (int readCount = content.read(buf); readCount > 0; readCount = content.read(buf)) {
out.write(buf, 0, readCount);
}
return Util.toString(out.toByteArray());
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
Utility.close(content);
}
}
public static String readSource(Resource sourceFile) {
InputStream contents = sourceFile.openContents();
return Util.readStreamAsString(contents);
}
public static String toInternalName(String path) {
assert (path.endsWith(".java"));
return path.substring(0, path.lastIndexOf('.'));
}
public static String toPath(String qualifiedTypeName) {
return qualifiedTypeName.replace('.', '/') + ".java";
}
public static String toTypeName(String path) {
assert (path.endsWith(".java"));
path = path.substring(0, path.lastIndexOf('.'));
return path.replace('/', '.');
}
}