diff options
| author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2011-10-24 21:48:43 +0200 |
|---|---|---|
| committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2011-10-24 22:02:14 +0200 |
| commit | c402dd86379e532895f73ee209c432f84bb5f421 (patch) | |
| tree | f5d59432ec551caf2b02c88279a9d8890ef5e26b | |
| parent | 335d6e64c66f85110cc8cafbe1155917e821db68 (diff) | |
| download | lombok-c402dd86379e532895f73ee209c432f84bb5f421.tar.gz lombok-c402dd86379e532895f73ee209c432f84bb5f421.tar.bz2 lombok-c402dd86379e532895f73ee209c432f84bb5f421.zip | |
pretty big refactor; introduced a new source package which should be (and is) separately compilable, i.e. has no deps on any of the others.
This is preparation work for being able to access some of these from lombok.ast without creating a cyclic dependency nightmare.
53 files changed, 1675 insertions, 1655 deletions
@@ -137,17 +137,33 @@ the common tasks and can be called on to run the main aspects of all the sub-scr <ivy:compile destdir="build/lombok" source="1.5" target="1.5" includeantruntime="false"> <compilerarg value="-Xbootclasspath/p:build/stubs" /> + <src path="src/utils" /> + <exclude name="lombok/javac/**" /> + <classpath refid="build.path" /> + </ivy:compile> + + <ivy:compile destdir="build/lombok" source="1.6" target="1.6" includeantruntime="false"> + <compilerarg value="-Xbootclasspath/p:build/stubs" /> + <src path="src/utils" /> + <include name="lombok/javac/**" /> + <classpath location="build/lombok" /> + <classpath refid="build.path" /> + </ivy:compile> + + <ivy:compile destdir="build/lombok" source="1.5" target="1.5" includeantruntime="false"> + <compilerarg value="-Xbootclasspath/p:build/stubs" /> <src path="src/core" /> <src path="src/installer" /> <src path="src/eclipseAgent" /> <exclude name="lombok/javac/**" /> + <classpath location="build/lombok" /> <classpath refid="build.path" /> </ivy:compile> + <ivy:compile destdir="build/lombok" source="1.6" target="1.6" includeantruntime="false"> <compilerarg value="-Xbootclasspath/p:build/stubs" /> <src path="src/core" /> <src path="src/delombok" /> - <include name="com/sun/**" /> <include name="lombok/javac/**" /> <include name="lombok/delombok/**" /> <classpath location="build/lombok" /> diff --git a/src/core/lombok/bytecode/PreventNullAnalysisRemover.java b/src/core/lombok/bytecode/PreventNullAnalysisRemover.java index 4dc08bb4..b7b29f9f 100644 --- a/src/core/lombok/bytecode/PreventNullAnalysisRemover.java +++ b/src/core/lombok/bytecode/PreventNullAnalysisRemover.java @@ -21,7 +21,7 @@ */ package lombok.bytecode; -import static lombok.bytecode.PostCompilationUtil.fixJSRInlining; +import static lombok.bytecode.AsmUtil.fixJSRInlining; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/src/core/lombok/bytecode/SneakyThrowsRemover.java b/src/core/lombok/bytecode/SneakyThrowsRemover.java index 54b00052..7c9a08a6 100644 --- a/src/core/lombok/bytecode/SneakyThrowsRemover.java +++ b/src/core/lombok/bytecode/SneakyThrowsRemover.java @@ -21,7 +21,7 @@ */ package lombok.bytecode; -import static lombok.bytecode.PostCompilationUtil.*; +import static lombok.bytecode.AsmUtil.*; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/src/core/lombok/eclipse/Eclipse.java b/src/core/lombok/eclipse/Eclipse.java deleted file mode 100644 index 858c2fe9..00000000 --- a/src/core/lombok/eclipse/Eclipse.java +++ /dev/null @@ -1,743 +0,0 @@ -/* - * Copyright © 2009-2011 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.eclipse; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; - -import lombok.core.AnnotationValues; -import lombok.core.TypeLibrary; -import lombok.core.TypeResolver; -import lombok.core.AST.Kind; -import lombok.core.AnnotationValues.AnnotationValue; - -import org.eclipse.core.runtime.ILog; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.internal.compiler.ast.ASTNode; -import org.eclipse.jdt.internal.compiler.ast.Annotation; -import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer; -import org.eclipse.jdt.internal.compiler.ast.ArrayQualifiedTypeReference; -import org.eclipse.jdt.internal.compiler.ast.ArrayTypeReference; -import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess; -import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration; -import org.eclipse.jdt.internal.compiler.ast.Expression; -import org.eclipse.jdt.internal.compiler.ast.Literal; -import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation; -import org.eclipse.jdt.internal.compiler.ast.MemberValuePair; -import org.eclipse.jdt.internal.compiler.ast.NormalAnnotation; -import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference; -import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference; -import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference; -import org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference; -import org.eclipse.jdt.internal.compiler.ast.SingleMemberAnnotation; -import org.eclipse.jdt.internal.compiler.ast.SingleNameReference; -import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference; -import org.eclipse.jdt.internal.compiler.ast.TypeParameter; -import org.eclipse.jdt.internal.compiler.ast.TypeReference; -import org.eclipse.jdt.internal.compiler.ast.Wildcard; -import org.eclipse.jdt.internal.compiler.lookup.CaptureBinding; -import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding; -import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; -import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; -import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; -import org.eclipse.jdt.internal.compiler.lookup.TypeIds; -import org.eclipse.jdt.internal.compiler.lookup.WildcardBinding; -import org.osgi.framework.Bundle; - -public class Eclipse { - /** - * Eclipse's Parser class is instrumented to not attempt to fill in the body of any method or initializer - * or field initialization if this flag is set. Set it on the flag field of - * any method, field, or initializer you create! - */ - public static final int ECLIPSE_DO_NOT_TOUCH_FLAG = ASTNode.Bit24; - - private Eclipse() { - //Prevent instantiation - } - - private static final String DEFAULT_BUNDLE = "org.eclipse.jdt.core"; - - /** - * Generates an error in the Eclipse error log. Note that most people never look at it! - * - * @param cud The {@code CompilationUnitDeclaration} where the error occurred. - * An error will be generated on line 0 linking to the error log entry. Can be {@code null}. - * @param message Human readable description of the problem. - * @param error The associated exception. Can be {@code null}. - */ - public static void error(CompilationUnitDeclaration cud, String message, Throwable error) { - error(cud, message, null, error); - } - - /** - * Generates an error in the Eclipse error log. Note that most people never look at it! - * - * @param cud The {@code CompilationUnitDeclaration} where the error occurred. - * An error will be generated on line 0 linking to the error log entry. Can be {@code null}. - * @param message Human readable description of the problem. - * @param bundleName Can be {@code null} to default to {@code org.eclipse.jdt.core} which is usually right. - * @param error The associated exception. Can be {@code null}. - */ - public static void error(CompilationUnitDeclaration cud, String message, String bundleName, Throwable error) { - if (bundleName == null) bundleName = DEFAULT_BUNDLE; - try { - new EclipseWorkspaceLogger().error(message, bundleName, error); - } catch (NoClassDefFoundError e) { //standalone ecj does not jave Platform, ILog, IStatus, and friends. - new TerminalLogger().error(message, bundleName, error); - } - if (cud != null) EclipseAST.addProblemToCompilationResult(cud, false, message + " - See error log.", 0, 0); - } - - /** - * Generates a warning in the Eclipse error log. Note that most people never look at it! - * - * @param message Human readable description of the problem. - * @param error The associated exception. Can be {@code null}. - */ - public static void warning(String message, Throwable error) { - warning(message, null, error); - } - - /** - * Generates a warning in the Eclipse error log. Note that most people never look at it! - * - * @param message Human readable description of the problem. - * @param bundleName Can be {@code null} to default to {@code org.eclipse.jdt.core} which is usually right. - * @param error The associated exception. Can be {@code null}. - */ - public static void warning(String message, String bundleName, Throwable error) { - if (bundleName == null) bundleName = DEFAULT_BUNDLE; - try { - new EclipseWorkspaceLogger().warning(message, bundleName, error); - } catch (NoClassDefFoundError e) { //standalone ecj does not jave Platform, ILog, IStatus, and friends. - new TerminalLogger().warning(message, bundleName, error); - } - } - - private static class TerminalLogger { - void error(String message, String bundleName, Throwable error) { - System.err.println(message); - if (error != null) error.printStackTrace(); - } - - void warning(String message, String bundleName, Throwable error) { - System.err.println(message); - if (error != null) error.printStackTrace(); - } - } - - private static class EclipseWorkspaceLogger { - void error(String message, String bundleName, Throwable error) { - msg(IStatus.ERROR, message, bundleName, error); - } - - void warning(String message, String bundleName, Throwable error) { - msg(IStatus.WARNING, message, bundleName, error); - } - - private void msg(int msgType, String message, String bundleName, Throwable error) { - Bundle bundle = Platform.getBundle(bundleName); - if (bundle == null) { - System.err.printf("Can't find bundle %s while trying to report error:\n%s\n", bundleName, message); - return; - } - - ILog log = Platform.getLog(bundle); - - log.log(new Status(msgType, bundleName, message, error)); - } - } - - /** - * For 'speed' reasons, Eclipse works a lot with char arrays. I have my doubts this was a fruitful exercise, - * but we need to deal with it. This turns [[java][lang][String]] into "java.lang.String". - */ - public static String toQualifiedName(char[][] typeName) { - StringBuilder sb = new StringBuilder(); - boolean first = true; - for (char[] c : typeName) { - sb.append(first ? "" : ".").append(c); - first = false; - } - return sb.toString(); - } - - public static char[][] fromQualifiedName(String typeName) { - String[] split = typeName.split("\\."); - char[][] result = new char[split.length][]; - for (int i = 0; i < split.length; i++) { - result[i] = split[i].toCharArray(); - } - return result; - } - - /** - * You can't share TypeParameter objects or bad things happen; for example, one 'T' resolves differently - * from another 'T', even for the same T in a single class file. Unfortunately the TypeParameter type hierarchy - * is complicated and there's no clone method on TypeParameter itself. This method can clone them. - */ - public static TypeParameter[] copyTypeParams(TypeParameter[] params, ASTNode source) { - if (params == null) return null; - TypeParameter[] out = new TypeParameter[params.length]; - int idx = 0; - for (TypeParameter param : params) { - TypeParameter o = new TypeParameter(); - setGeneratedBy(o, source); - o.annotations = param.annotations; - o.bits = param.bits; - o.modifiers = param.modifiers; - o.name = param.name; - o.type = copyType(param.type, source); - o.sourceStart = param.sourceStart; - o.sourceEnd = param.sourceEnd; - o.declarationEnd = param.declarationEnd; - o.declarationSourceStart = param.declarationSourceStart; - o.declarationSourceEnd = param.declarationSourceEnd; - if (param.bounds != null) { - TypeReference[] b = new TypeReference[param.bounds.length]; - int idx2 = 0; - for (TypeReference ref : param.bounds) b[idx2++] = copyType(ref, source); - o.bounds = b; - } - out[idx++] = o; - } - return out; - } - - /** - * Convenience method that creates a new array and copies each TypeReference in the source array via - * {@link #copyType(TypeReference, ASTNode)}. - */ - public static TypeReference[] copyTypes(TypeReference[] refs, ASTNode source) { - if (refs == null) return null; - TypeReference[] outs = new TypeReference[refs.length]; - int idx = 0; - for (TypeReference ref : refs) { - outs[idx++] = copyType(ref, source); - } - return outs; - } - - /** - * You can't share TypeReference objects or subtle errors start happening. - * Unfortunately the TypeReference type hierarchy is complicated and there's no clone - * method on TypeReference itself. This method can clone them. - */ - public static TypeReference copyType(TypeReference ref, ASTNode source) { - if (ref instanceof ParameterizedQualifiedTypeReference) { - ParameterizedQualifiedTypeReference iRef = (ParameterizedQualifiedTypeReference) ref; - TypeReference[][] args = null; - if (iRef.typeArguments != null) { - args = new TypeReference[iRef.typeArguments.length][]; - int idx = 0; - for (TypeReference[] inRefArray : iRef.typeArguments) { - if (inRefArray == null) args[idx++] = null; - else { - TypeReference[] outRefArray = new TypeReference[inRefArray.length]; - int idx2 = 0; - for (TypeReference inRef : inRefArray) { - outRefArray[idx2++] = copyType(inRef, source); - } - args[idx++] = outRefArray; - } - } - } - TypeReference typeRef = new ParameterizedQualifiedTypeReference(iRef.tokens, args, iRef.dimensions(), iRef.sourcePositions); - setGeneratedBy(typeRef, source); - return typeRef; - } - - if (ref instanceof ArrayQualifiedTypeReference) { - ArrayQualifiedTypeReference iRef = (ArrayQualifiedTypeReference) ref; - TypeReference typeRef = new ArrayQualifiedTypeReference(iRef.tokens, iRef.dimensions(), iRef.sourcePositions); - setGeneratedBy(typeRef, source); - return typeRef; - } - - if (ref instanceof QualifiedTypeReference) { - QualifiedTypeReference iRef = (QualifiedTypeReference) ref; - TypeReference typeRef = new QualifiedTypeReference(iRef.tokens, iRef.sourcePositions); - setGeneratedBy(typeRef, source); - return typeRef; - } - - if (ref instanceof ParameterizedSingleTypeReference) { - ParameterizedSingleTypeReference iRef = (ParameterizedSingleTypeReference) ref; - TypeReference[] args = null; - if (iRef.typeArguments != null) { - args = new TypeReference[iRef.typeArguments.length]; - int idx = 0; - for (TypeReference inRef : iRef.typeArguments) { - if (inRef == null) args[idx++] = null; - else args[idx++] = copyType(inRef, source); - } - } - - TypeReference typeRef = new ParameterizedSingleTypeReference(iRef.token, args, iRef.dimensions(), (long)iRef.sourceStart << 32 | iRef.sourceEnd); - setGeneratedBy(typeRef, source); - return typeRef; - } - - if (ref instanceof ArrayTypeReference) { - ArrayTypeReference iRef = (ArrayTypeReference) ref; - TypeReference typeRef = new ArrayTypeReference(iRef.token, iRef.dimensions(), (long)iRef.sourceStart << 32 | iRef.sourceEnd); - setGeneratedBy(typeRef, source); - return typeRef; - } - - if (ref instanceof Wildcard) { - Wildcard original = (Wildcard)ref; - - Wildcard wildcard = new Wildcard(original.kind); - wildcard.sourceStart = original.sourceStart; - wildcard.sourceEnd = original.sourceEnd; - if (original.bound != null) wildcard.bound = copyType(original.bound, source); - setGeneratedBy(wildcard, source); - return wildcard; - } - - if (ref instanceof SingleTypeReference) { - SingleTypeReference iRef = (SingleTypeReference) ref; - TypeReference typeRef = new SingleTypeReference(iRef.token, (long)iRef.sourceStart << 32 | iRef.sourceEnd); - setGeneratedBy(typeRef, source); - return typeRef; - } - - return ref; - } - - public static long pos(ASTNode node) { - return ((long) node.sourceStart << 32) | (node.sourceEnd & 0xFFFFFFFFL); - } - - public static long[] poss(ASTNode node, int repeat) { - long p = ((long) node.sourceStart << 32) | (node.sourceEnd & 0xFFFFFFFFL); - long[] out = new long[repeat]; - Arrays.fill(out, p); - return out; - } - - public static TypeReference makeType(TypeBinding binding, ASTNode pos, boolean allowCompound) { - int dims = binding.dimensions(); - binding = binding.leafComponentType(); - - // Primitives - - char[] base = null; - - switch (binding.id) { - case TypeIds.T_int: - base = TypeConstants.INT; - break; - case TypeIds.T_long: - base = TypeConstants.LONG; - break; - case TypeIds.T_short: - base = TypeConstants.SHORT; - break; - case TypeIds.T_byte: - base = TypeConstants.BYTE; - break; - case TypeIds.T_double: - base = TypeConstants.DOUBLE; - break; - case TypeIds.T_float: - base = TypeConstants.FLOAT; - break; - case TypeIds.T_boolean: - base = TypeConstants.BOOLEAN; - break; - case TypeIds.T_char: - base = TypeConstants.CHAR; - break; - case TypeIds.T_void: - base = TypeConstants.VOID; - break; - case TypeIds.T_null: - return null; - } - - if (base != null) { - if (dims > 0) { - TypeReference result = new ArrayTypeReference(base, dims, pos(pos)); - Eclipse.setGeneratedBy(result, pos); - return result; - } - TypeReference result = new SingleTypeReference(base, pos(pos)); - Eclipse.setGeneratedBy(result, pos); - return result; - } - - if (binding.isAnonymousType()) { - ReferenceBinding ref = (ReferenceBinding)binding; - ReferenceBinding[] supers = ref.superInterfaces(); - if (supers == null || supers.length == 0) supers = new ReferenceBinding[] {ref.superclass()}; - if (supers[0] == null) { - TypeReference result = new QualifiedTypeReference(TypeConstants.JAVA_LANG_OBJECT, poss(pos, 3)); - Eclipse.setGeneratedBy(result, pos); - return result; - } - return makeType(supers[0], pos, false); - } - - if (binding instanceof CaptureBinding) { - return makeType(((CaptureBinding)binding).wildcard, pos, allowCompound); - } - - if (binding.isUnboundWildcard()) { - if (!allowCompound) { - TypeReference result = new QualifiedTypeReference(TypeConstants.JAVA_LANG_OBJECT, poss(pos, 3)); - Eclipse.setGeneratedBy(result, pos); - return result; - } else { - Wildcard out = new Wildcard(Wildcard.UNBOUND); - Eclipse.setGeneratedBy(out, pos); - out.sourceStart = pos.sourceStart; - out.sourceEnd = pos.sourceEnd; - return out; - } - } - - if (binding.isWildcard()) { - WildcardBinding wildcard = (WildcardBinding) binding; - if (wildcard.boundKind == Wildcard.EXTENDS) { - if (!allowCompound) { - return makeType(wildcard.bound, pos, false); - } else { - Wildcard out = new Wildcard(Wildcard.EXTENDS); - Eclipse.setGeneratedBy(out, pos); - out.bound = makeType(wildcard.bound, pos, false); - out.sourceStart = pos.sourceStart; - out.sourceEnd = pos.sourceEnd; - return out; - } - } else if (allowCompound && wildcard.boundKind == Wildcard.SUPER) { - Wildcard out = new Wildcard(Wildcard.SUPER); - Eclipse.setGeneratedBy(out, pos); - out.bound = makeType(wildcard.bound, pos, false); - out.sourceStart = pos.sourceStart; - out.sourceEnd = pos.sourceEnd; - return out; - } else { - TypeReference result = new QualifiedTypeReference(TypeConstants.JAVA_LANG_OBJECT, poss(pos, 3)); - Eclipse.setGeneratedBy(result, pos); - return result; - } - } - - char[][] parts; - - if (binding.isLocalType() || binding.isTypeVariable()) { - parts = new char[][] { binding.shortReadableName() }; - } else { - String[] pkg = new String(binding.qualifiedPackageName()).split("\\."); - String[] name = new String(binding.qualifiedSourceName()).split("\\."); - if (pkg.length == 1 && pkg[0].isEmpty()) pkg = new String[0]; - parts = new char[pkg.length + name.length][]; - int ptr; - for (ptr = 0; ptr < pkg.length; ptr++) parts[ptr] = pkg[ptr].toCharArray(); - for (; ptr < pkg.length + name.length; ptr++) parts[ptr] = name[ptr - pkg.length].toCharArray(); - } - - TypeReference[] params = new TypeReference[0]; - - if (binding instanceof ParameterizedTypeBinding) { - Parameter |
