http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/SpreadListEvaluatingException.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/SpreadListEvaluatingException.java b/src/main/groovy/lang/SpreadListEvaluatingException.java deleted file mode 100644 index b6de965..0000000 --- a/src/main/groovy/lang/SpreadListEvaluatingException.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -public class SpreadListEvaluatingException extends GroovyRuntimeException { - public SpreadListEvaluatingException(String message) { - super(message); - } -}
http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/SpreadMap.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/SpreadMap.java b/src/main/groovy/lang/SpreadMap.java deleted file mode 100644 index 7ba9e4f..0000000 --- a/src/main/groovy/lang/SpreadMap.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * Helper to turn a list with an even number of elements into a Map. - * - * @author Pilho Kim - * @author Tim Tiemens - */ -public class SpreadMap extends HashMap { - private int hashCode; - - public SpreadMap(Object[] values) { - int i = 0; - while (i < values.length) { - super.put(values[i++], values[i++]); - } - } - - public SpreadMap(Map map) { - super(map); - } - - /** - * @since 1.8.0 - * @param list the list to make spreadable - */ - public SpreadMap(List list) { - this(list.toArray()); - } - - public Object put(Object key, Object value) { - throw new RuntimeException("SpreadMap: " + this + " is an immutable map, and so (" - + key + ": " + value + ") cannot be added."); - } - - public Object remove(Object key) { - throw new RuntimeException("SpreadMap: " + this + " is an immutable map, and so the key (" - + key + ") cannot be deleted."); - } - - public void putAll(Map t) { - throw new RuntimeException("SpreadMap: " + this + " is an immutable map, and so the map (" - + t + ") cannot be put in this spreadMap."); - } - - public boolean equals(Object that) { - if (that instanceof SpreadMap) { - return equals((SpreadMap) that); - } - return false; - } - - public boolean equals(SpreadMap that) { - if (that == null) return false; - - if (size() == that.size()) { - for (Object key : keySet()) { - if (!DefaultTypeTransformation.compareEqual(get(key), that.get(key))) { - return false; - } - } - return true; - } - return false; - } - - public int hashCode() { - if (hashCode == 0) { - for (Object key : keySet()) { - int hash = (key != null) ? key.hashCode() : 0xbabe; - hashCode ^= hash; - } - } - return hashCode; - } - - /** - * @return the string expression of <code>this</code> - */ - public String toString() { - if (isEmpty()) { - return "*:[:]"; - } - StringBuilder sb = new StringBuilder("*:["); - Iterator iter = keySet().iterator(); - while (iter.hasNext()) { - Object key = iter.next(); - sb.append(key).append(":").append(get(key)); - if (iter.hasNext()) - sb.append(", "); - } - sb.append("]"); - return sb.toString(); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/SpreadMapEvaluatingException.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/SpreadMapEvaluatingException.java b/src/main/groovy/lang/SpreadMapEvaluatingException.java deleted file mode 100644 index 408a223..0000000 --- a/src/main/groovy/lang/SpreadMapEvaluatingException.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -public class SpreadMapEvaluatingException extends GroovyRuntimeException { - public SpreadMapEvaluatingException(String message) { - super(message); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/StringWriterIOException.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/StringWriterIOException.java b/src/main/groovy/lang/StringWriterIOException.java deleted file mode 100644 index 0372399..0000000 --- a/src/main/groovy/lang/StringWriterIOException.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -import java.io.IOException; - -/** - * An IO exception occurred trying to append to a StringWriter which should never happen. - * - * @author <a href="mailto:[email protected]">James Strachan</a> - */ -public class StringWriterIOException extends RuntimeException { - - public StringWriterIOException(IOException e) { - super(e); - } - - public IOException getIOException() { - return (IOException) getCause(); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/TracingInterceptor.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/TracingInterceptor.java b/src/main/groovy/lang/TracingInterceptor.java deleted file mode 100644 index f67de11..0000000 --- a/src/main/groovy/lang/TracingInterceptor.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; - -/* - * This {@link Interceptor} traces method calls on the proxied object to a log. - * By default, the log is simply <pre>System.out</pre>; however, that can be - * changed with the <pre>setWriter(Writer)</pre> method. - * <p> - * A message will be written to output before a method is invoked and after a method - * is invoked. If methods are nested, and invoke one another, then indentation - * of two spaces is written. - * <p> - * Here is an example usage on the ArrayList object: <br> - * <pre class="groovyTestCase"> - * def proxy = ProxyMetaClass.getInstance(ArrayList.class) - * proxy.interceptor = new TracingInterceptor() - * proxy.use { - * def list = [1, 2, 3] - * assert 3 == list.size() - * assert list.contains(1) - * } - * </pre> - * Running this code produces this output: - * <pre> - * before java.util.ArrayList.size() - * after java.util.ArrayList.size() - * before java.util.ArrayList.contains(java.lang.Integer) - * after java.util.ArrayList.contains(java.lang.Integer) - * </pre> - */ -public class TracingInterceptor implements Interceptor { - - protected Writer writer = new PrintWriter(System.out); - private int indent = 0; - - /** - * Returns the writer associated with this interceptor. - */ - public Writer getWriter() { - return writer; - } - - /** - * Changes the writer associated with this interceptor. - */ - public void setWriter(Writer writer) { - this.writer = writer; - } - - public Object beforeInvoke(Object object, String methodName, Object[] arguments) { - write(object, methodName, arguments, "before"); - indent++ ; - return null; - } - - public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result) { - indent--; - write(object, methodName, arguments, "after "); - return result; - } - - public boolean doInvoke() { - return true; - } - private String indent(){ - StringBuilder result = new StringBuilder(); - for (int i=0; i<indent;i++){ - result.append(" "); - } - return result.toString(); - } - - protected void write(Object object, String methodName, Object[] arguments, final String origin) { - try { - writer.write(indent()); - writer.write(origin); - writer.write(" "); - Class theClass = object instanceof Class ? (Class) object: object.getClass(); - writeInfo(theClass, methodName, arguments); - writer.write("\n"); - writer.flush(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - protected void writeInfo(final Class aClass, String methodName, Object[] arguments) throws IOException { - writer.write(aClass.getName()); - writer.write("."); - writer.write(methodName); - writer.write("("); - for (int i = 0; i < arguments.length; i++) { - if (i > 0) writer.write(", "); - Object argument = arguments[i]; - writer.write(argument.getClass().getName()); - } - writer.write(")"); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/TrampolineClosure.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/TrampolineClosure.java b/src/main/groovy/lang/TrampolineClosure.java deleted file mode 100644 index ed68f00..0000000 --- a/src/main/groovy/lang/TrampolineClosure.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * A TrampolineClosure wraps a closure that needs to be executed on a functional trampoline. - * Upon calling, a TrampolineClosure will call the original closure waiting for its result. - * If the outcome of the call is another instance of a TrampolineClosure, created perhaps as a result to a call to the TrampolineClosure.trampoline() - * method, the TrampolineClosure will again be invoked. This repetitive invocation of returned TrampolineClosure instances will continue - * until a value other than TrampolineClosure is returned. - * That value will become the final result of the trampoline. - * - * @author Vaclav Pech - */ -final class TrampolineClosure<V> extends Closure<V> { - - private final Closure<V> original; - - TrampolineClosure(final Closure<V> original) { - super(original.getOwner(), original.getDelegate()); - this.original = original; - } - - /** - * Delegates to the wrapped closure - */ - @Override - public int getMaximumNumberOfParameters() { - return original.maximumNumberOfParameters; - } - - /** - * Delegates to the wrapped closure - */ - @Override - public Class[] getParameterTypes() { - return original.parameterTypes; - } - - /** - * Starts the trampoline loop and calls the wrapped closure as the first step. - * @return The final result of the trampoline - */ - @Override - public V call() { - return loop(original.call()); - } - - /** - * Starts the trampoline loop and calls the wrapped closure as the first step. - * @return The final result of the trampoline - */ - @Override - public V call(final Object arguments) { - return loop(original.call(arguments)); - } - - /** - * Starts the trampoline loop and calls the wrapped closure as the first step. - * @return The final result of the trampoline - */ - @Override - public V call(final Object... args) { - return loop(original.call(args)); - } - - private V loop(final Object lastResult) { - Object result = lastResult; - - for (;;) { - if (result instanceof TrampolineClosure) { - result = ((TrampolineClosure)result).original.call(); - } else return (V) result; - } - } - - /** - * Builds a trampolined variant of the current closure. - * @param args Parameters to curry to the underlying closure. - * @return An instance of TrampolineClosure wrapping the original closure after currying. - */ - @Override - public Closure<V> trampoline(final Object... args) { - return new TrampolineClosure<V>(original.curry(args)); - } - - /** - * Returns itself, since it is a good enough trampolined variant of the current closure. - * @return An instance of TrampolineClosure wrapping the original closure. - */ - @Override - public Closure<V> trampoline() { - return this; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple.java b/src/main/groovy/lang/Tuple.java deleted file mode 100644 index 036d13e..0000000 --- a/src/main/groovy/lang/Tuple.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation; - -import java.io.Serializable; -import java.util.AbstractList; -import java.util.List; -import java.util.Objects; - -/** - * Represents a list of Objects. - * - * @author <a href="mailto:[email protected]">James Strachan</a> - */ -public class Tuple<E> extends AbstractList<E> implements Serializable { - private static final long serialVersionUID = -6707770506387821031L; - private final E[] contents; - - public Tuple(E... contents) { - if (contents == null) throw new NullPointerException(); - this.contents = contents; - } - - @Override - public E get(int index) { - return contents[index]; - } - - @Override - public int size() { - return contents.length; - } - - @SuppressWarnings("unchecked") - @Override - public List<E> subList(int fromIndex, int toIndex) { - int size = toIndex - fromIndex; - E[] newContent = (E[]) new Object[size]; - System.arraycopy(contents, fromIndex, newContent, 0, size); - return new Tuple<>(newContent); - } - - public Tuple<E> subTuple(int fromIndex, int toIndex) { - return (Tuple<E>) subList(fromIndex, toIndex); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || !(o instanceof Tuple)) return false; - - Tuple that = (Tuple) o; - int size = size(); - if (size != that.size()) return false; - for (int i = 0; i < size; i++) { - if (!DefaultTypeTransformation.compareEqual(get(i), that.get(i))) { - return false; - } - } - return true; - } - - @Override - public int hashCode() { - return Objects.hash(contents); - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple1.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple1.java b/src/main/groovy/lang/Tuple1.java deleted file mode 100644 index 9b8d6bd..0000000 --- a/src/main/groovy/lang/Tuple1.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 1 typed Object. - * - * @since 2.5.0 - */ -public class Tuple1<T1> extends Tuple { - private static final long serialVersionUID = -4647790147461409603L; - private final T1 first; - - public Tuple1(T1 first) { - super(first); - - this.first = first; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 1; - } - - public T1 getFirst() { - return first; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple2.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple2.java b/src/main/groovy/lang/Tuple2.java deleted file mode 100644 index b096aee..0000000 --- a/src/main/groovy/lang/Tuple2.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 2 typed Objects. - */ -public class Tuple2<T1, T2> extends Tuple { - private static final long serialVersionUID = 9006144674906325597L; - private final T1 first; - private final T2 second; - - public Tuple2(T1 first, T2 second) { - super(first, second); - - this.first = first; - this.second = second; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 2; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple3.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple3.java b/src/main/groovy/lang/Tuple3.java deleted file mode 100644 index b5fe7d9..0000000 --- a/src/main/groovy/lang/Tuple3.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 3 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple3<T1, T2, T3> extends Tuple { - private static final long serialVersionUID = 8469774237154310687L; - private final T1 first; - private final T2 second; - private final T3 third; - - public Tuple3(T1 first, T2 second, T3 third) { - super(first, second, third); - - this.first = first; - this.second = second; - this.third = third; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 3; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple4.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple4.java b/src/main/groovy/lang/Tuple4.java deleted file mode 100644 index 04f414e..0000000 --- a/src/main/groovy/lang/Tuple4.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 4 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple4<T1, T2, T3, T4> extends Tuple { - private static final long serialVersionUID = -7788878731471377207L; - private final T1 first; - private final T2 second; - private final T3 third; - private final T4 fourth; - - public Tuple4(T1 first, T2 second, T3 third, T4 fourth) { - super(first, second, third, fourth); - - this.first = first; - this.second = second; - this.third = third; - this.fourth = fourth; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - case 3: - return fourth; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 4; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } - - public T4 getFourth() { - return fourth; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple5.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple5.java b/src/main/groovy/lang/Tuple5.java deleted file mode 100644 index ee9c802..0000000 --- a/src/main/groovy/lang/Tuple5.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 5 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple5<T1, T2, T3, T4, T5> extends Tuple { - private static final long serialVersionUID = 6722094358774027115L; - private final T1 first; - private final T2 second; - private final T3 third; - private final T4 fourth; - private final T5 fifth; - - public Tuple5(T1 first, T2 second, T3 third, T4 fourth, T5 fifth) { - super(first, second, third, fourth, fifth); - - this.first = first; - this.second = second; - this.third = third; - this.fourth = fourth; - this.fifth = fifth; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - case 3: - return fourth; - case 4: - return fifth; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 5; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } - - public T4 getFourth() { - return fourth; - } - - public T5 getFifth() { - return fifth; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple6.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple6.java b/src/main/groovy/lang/Tuple6.java deleted file mode 100644 index 76d12ca..0000000 --- a/src/main/groovy/lang/Tuple6.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 6 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple6<T1, T2, T3, T4, T5, T6> extends Tuple { - private static final long serialVersionUID = -7848588473093102288L; - private final T1 first; - private final T2 second; - private final T3 third; - private final T4 fourth; - private final T5 fifth; - private final T6 sixth; - - public Tuple6(T1 first, T2 second, T3 third, T4 fourth, T5 fifth, T6 sixth) { - super(first, second, third, fourth, fifth, sixth); - - this.first = first; - this.second = second; - this.third = third; - this.fourth = fourth; - this.fifth = fifth; - this.sixth = sixth; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - case 3: - return fourth; - case 4: - return fifth; - case 5: - return sixth; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 6; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } - - public T4 getFourth() { - return fourth; - } - - public T5 getFifth() { - return fifth; - } - - public T6 getSixth() { - return sixth; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple7.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple7.java b/src/main/groovy/lang/Tuple7.java deleted file mode 100644 index 05046e7..0000000 --- a/src/main/groovy/lang/Tuple7.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 7 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple7<T1, T2, T3, T4, T5, T6, T7> extends Tuple { - private static final long serialVersionUID = 4226144828786865766L; - private final T1 first; - private final T2 second; - private final T3 third; - private final T4 fourth; - private final T5 fifth; - private final T6 sixth; - private final T7 seventh; - - public Tuple7(T1 first, T2 second, T3 third, T4 fourth, T5 fifth, T6 sixth, T7 seventh) { - super(first, second, third, fourth, fifth, sixth, seventh); - - this.first = first; - this.second = second; - this.third = third; - this.fourth = fourth; - this.fifth = fifth; - this.sixth = sixth; - this.seventh = seventh; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - case 3: - return fourth; - case 4: - return fifth; - case 5: - return sixth; - case 6: - return seventh; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 7; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } - - public T4 getFourth() { - return fourth; - } - - public T5 getFifth() { - return fifth; - } - - public T6 getSixth() { - return sixth; - } - - public T7 getSeventh() { - return seventh; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple8.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple8.java b/src/main/groovy/lang/Tuple8.java deleted file mode 100644 index 1f38ca9..0000000 --- a/src/main/groovy/lang/Tuple8.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 8 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> extends Tuple { - private static final long serialVersionUID = -8895822084644138566L; - private final T1 first; - private final T2 second; - private final T3 third; - private final T4 fourth; - private final T5 fifth; - private final T6 sixth; - private final T7 seventh; - private final T8 eighth; - - public Tuple8(T1 first, T2 second, T3 third, T4 fourth, T5 fifth, T6 sixth, T7 seventh, T8 eighth) { - super(first, second, third, fourth, fifth, sixth, seventh, eighth); - - this.first = first; - this.second = second; - this.third = third; - this.fourth = fourth; - this.fifth = fifth; - this.sixth = sixth; - this.seventh = seventh; - this.eighth = eighth; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - case 3: - return fourth; - case 4: - return fifth; - case 5: - return sixth; - case 6: - return seventh; - case 7: - return eighth; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 8; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } - - public T4 getFourth() { - return fourth; - } - - public T5 getFifth() { - return fifth; - } - - public T6 getSixth() { - return sixth; - } - - public T7 getSeventh() { - return seventh; - } - - public T8 getEighth() { - return eighth; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Tuple9.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Tuple9.java b/src/main/groovy/lang/Tuple9.java deleted file mode 100644 index 3189c10..0000000 --- a/src/main/groovy/lang/Tuple9.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -/** - * Represents a list of 9 typed Objects. - * - * @since 2.5.0 - */ -public class Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9> extends Tuple { - private static final long serialVersionUID = -5181196675351911769L; - private final T1 first; - private final T2 second; - private final T3 third; - private final T4 fourth; - private final T5 fifth; - private final T6 sixth; - private final T7 seventh; - private final T8 eighth; - private final T9 ninth; - - public Tuple9(T1 first, T2 second, T3 third, T4 fourth, T5 fifth, T6 sixth, T7 seventh, T8 eighth, T9 ninth) { - super(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth); - - this.first = first; - this.second = second; - this.third = third; - this.fourth = fourth; - this.fifth = fifth; - this.sixth = sixth; - this.seventh = seventh; - this.eighth = eighth; - this.ninth = ninth; - } - - @Override - public Object get(int index) { - switch (index) { - case 0: - return first; - case 1: - return second; - case 2: - return third; - case 3: - return fourth; - case 4: - return fifth; - case 5: - return sixth; - case 6: - return seventh; - case 7: - return eighth; - case 8: - return ninth; - default: - throw new IndexOutOfBoundsException("index: " + index); - } - } - - @Override - public int size() { - return 9; - } - - public T1 getFirst() { - return first; - } - - public T2 getSecond() { - return second; - } - - public T3 getThird() { - return third; - } - - public T4 getFourth() { - return fourth; - } - - public T5 getFifth() { - return fifth; - } - - public T6 getSixth() { - return sixth; - } - - public T7 getSeventh() { - return seventh; - } - - public T8 getEighth() { - return eighth; - } - - public T9 getNinth() { - return ninth; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/Writable.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/Writable.java b/src/main/groovy/lang/Writable.java deleted file mode 100644 index ec135cd..0000000 --- a/src/main/groovy/lang/Writable.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang; - -import java.io.IOException; -import java.io.Writer; - - -/** - * Represents an object which is capable of writing itself to a text stream - * in a more efficient format than just creating a toString() representation - * of itself. This mechanism is particularly useful for templates and such like. - * <p> - * It is worth noting that writable implementations often override their - * toString() implementation as well to allow rendering the same result - * directly to a String; however this is not required. - * - * @author <a href="mailto:[email protected]">James Strachan</a> - */ -public interface Writable { - - /** - * Writes this object to the given writer. - * <p> - * This is used to defer content creation until the point when it is - * streamed to the output destination. Oftentimes, content will be defined - * but not necessarily created (as is may be the case with a Closure - * definition.) In that case, the output is then 'deferred' to the point - * when it is serialized to the writer. This class may be used whenever an - * object should be responsible for creating its own textual representation, - * but creating the entire output as a single String would be inefficient - * (such as outputting a multi-gigabyte XML document.) - * - * @param out the Writer to which this Writable should output its data. - * @return the Writer that was passed - * @throws IOException if an error occurred while outputting data to the writer - */ - Writer writeTo(Writer out) throws IOException; - -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/groovydoc/Groovydoc.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/groovydoc/Groovydoc.java b/src/main/groovy/lang/groovydoc/Groovydoc.java deleted file mode 100644 index d7d4204..0000000 --- a/src/main/groovy/lang/groovydoc/Groovydoc.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang.groovydoc; - -import java.lang.reflect.AnnotatedElement; -import java.util.List; -import java.util.Objects; - -/** - * Represents groovydoc - */ -public class Groovydoc { - private final String content; - private List<GroovydocTag> tagList; - private final GroovydocHolder holder; - - public Groovydoc(String content, GroovydocHolder groovydocHolder) { - this.content = content; - this.holder = groovydocHolder; - } - - public Groovydoc(final String content, final AnnotatedElement annotatedElement) { - this.content = content; - this.holder = new GroovydocHolder<AnnotatedElement>() { - @Override - public Groovydoc getGroovydoc() { - return Groovydoc.this; - } - - @Override - public AnnotatedElement getInstance() { - return annotatedElement; - } - }; - } - - /** - * Get the content of groovydoc - * @return the text content - */ - public String getContent() { - return content; - } - - /** - * TODO Get list of groovydoc tags - * @return a list of tags - */ - public List<GroovydocTag> getTagList() { - throw new UnsupportedOperationException("[TODO]parsing tags will be a new features of the next releases"); -// return tagList; - } - - /** - * Get the holder of the groovydoc - * @return the groovydoc holder - */ - public GroovydocHolder getHolder() { - return holder; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Groovydoc groovydoc = (Groovydoc) o; - return Objects.equals(content, groovydoc.content) && - Objects.equals(holder, groovydoc.holder); - } - - @Override - public int hashCode() { - return Objects.hash(content, holder); - } - - @Override - public String toString() { - return this.content; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/groovydoc/GroovydocHolder.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/groovydoc/GroovydocHolder.java b/src/main/groovy/lang/groovydoc/GroovydocHolder.java deleted file mode 100644 index eb41df4..0000000 --- a/src/main/groovy/lang/groovydoc/GroovydocHolder.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang.groovydoc; - -/** - * Represents Groovydoc Holder - */ -public interface GroovydocHolder<T> { - String DOC_COMMENT = "_DOC_COMMENT"; // keys for meta data - /** - * Get the groovydoc - * @return the groovydoc - */ - Groovydoc getGroovydoc(); - - /** - * Get GroovydocHolder instance - * @return GroovydocHolder instance - */ - T getInstance(); -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/groovydoc/GroovydocTag.java ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/groovydoc/GroovydocTag.java b/src/main/groovy/lang/groovydoc/GroovydocTag.java deleted file mode 100644 index 14e5aaa..0000000 --- a/src/main/groovy/lang/groovydoc/GroovydocTag.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 groovy.lang.groovydoc; - -import java.util.Objects; - -/** - * TODO parse groovydoc to get tag content - */ -public class GroovydocTag { - private String name; - private String content; - private Groovydoc groovydoc; - - public GroovydocTag(String name, String content, Groovydoc groovydoc) { - this.name = name; - this.content = content; - this.groovydoc = groovydoc; - } - - public String getName() { - return name; - } - - public String getContent() { - return content; - } - - public Groovydoc getGroovydoc() { - return groovydoc; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - GroovydocTag that = (GroovydocTag) o; - return Objects.equals(name, that.name) && - Objects.equals(content, that.content) && - Objects.equals(groovydoc, that.groovydoc); - } - - @Override - public int hashCode() { - return Objects.hash(name, content, groovydoc); - } - - @Override - public String toString() { - return content; - } -} http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/lang/package.html ---------------------------------------------------------------------- diff --git a/src/main/groovy/lang/package.html b/src/main/groovy/lang/package.html deleted file mode 100644 index 1ea84fc..0000000 --- a/src/main/groovy/lang/package.html +++ /dev/null @@ -1,28 +0,0 @@ -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you 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. - ---> -<html> - <head> - <title>package groovy.lang.*</title> - </head> - <body> - <p>Core Groovy language classes for implementing data structures, closures, metadata and so forth.</p> - </body> -</html> http://git-wip-us.apache.org/repos/asf/groovy/blob/10110145/src/main/groovy/org/codehaus/groovy/ast/builder/AstBuilder.groovy ---------------------------------------------------------------------- diff --git a/src/main/groovy/org/codehaus/groovy/ast/builder/AstBuilder.groovy b/src/main/groovy/org/codehaus/groovy/ast/builder/AstBuilder.groovy new file mode 100644 index 0000000..24dcdd6 --- /dev/null +++ b/src/main/groovy/org/codehaus/groovy/ast/builder/AstBuilder.groovy @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 org.codehaus.groovy.ast.builder + +import org.codehaus.groovy.ast.ASTNode +import org.codehaus.groovy.ast.stmt.BlockStatement +import org.codehaus.groovy.control.CompilePhase + +/** + * The AstBuilder provides several ways to build an abstract syntax tree (AST) of Groovy code. + * + * You can convert a String into AST using the buildFromString method. + * You can convert code into AST using the buildFromCode method. + * You can use the AST DSL with the buildFromSpec method. + * + * For more information, see the resources on the Groovy wiki pages. + * + * @author Hamlet D'Arcy + */ + +public class AstBuilder { + + /** + * Builds AST based on the code within the {@link Closure} parameter. + * + * This method <strong>must</strong> be invoked at compile time and never at runtime, because + * an ASTTransformation must be run to support it. If you receive an IllegalStateException then + * you most likely need to add stronger typing. For instance, this will not work: + * <code> + * def builder = new AstBuilder() + * builder.buildFromCode { + * // some code + * } + * </code> + * While this code will: + * <code> + * new AstBuilder().buildFromCode { + * // some code + * } + * </code> + * + * The compiler rewrites buildFromCode invocations into {@link AstBuilder#buildFromString(CompilePhase, boolean, String)} + * invocations. An exception raised during AST generation will show a stack trace from {@link AstBuilder#buildFromString(CompilePhase, boolean, String)} + * and not from {@link AstBuilder#buildFromCode(CompilePhase, boolean, Closure)} . + * + * The compiler saves the source code of the closure as a String within the Java class file. The String source + * of the closure will be visible and un-obfuscated within the class file. If your Closure parameter contains + * sensitive data such as a hard-coded password then that data is free to be seen by anyone with the class file. + * Do not store sensitive data within the closure parameter. + * + * @param phase + * the {@link CompilePhase} the AST will be targeted towards. Default is {@link CompilePhase#CLASS_GENERATION} + * @param statementsOnly + * when true, only the script statements are returned. WHen false, you will + * receive back a Script class node also. Default is true. + * @param block + * the code that will be converted + * @returns a List of {@link ASTNode} . + * @throws IllegalStateException + * this method may not be invoked at runtime. It works via a compile-time transformation + * of the closure source code into a String, which is sent to the {@link AstBuilder#buildFromString(CompilePhase, boolean, String)} + * method. The buildFromCode() method must be invoked against a strongly typed AstBuilder. + */ + List<ASTNode> buildFromCode(CompilePhase phase = CompilePhase.CLASS_GENERATION, boolean statementsOnly = true, Closure block) { + throw new IllegalStateException("""AstBuilder.build(CompilePhase, boolean, Closure):List<ASTNode> should never be called at runtime. +Are you sure you are using it correctly? +""") + } + + + /** + * Builds AST based on the code within the String parameter. + * + * @param phase + * the {@link CompilePhase} the AST will be targeted towards. Default is {@link CompilePhase#CLASS_GENERATION} + * @param statementsOnly + * when true, only the script statements are returned. WHen false, you will + * receive back a Script class node also. Default is true. + * @param source + * The source code String that will be compiled. + * @returns a List of {@link ASTNode} . + * @throws IllegalArgumentException + * if source is null or empty + */ + List<ASTNode> buildFromString(CompilePhase phase = CompilePhase.CLASS_GENERATION, boolean statementsOnly = true, String source) { + if (!source || "" == source.trim()) throw new IllegalArgumentException("A source must be specified") + return new AstStringCompiler().compile(source, phase, statementsOnly); + } + + /** + * Builds AST based on the code within the String parameter. The parameter is assumed to be + * a code block which is not legal Groovy code. A goto label is affixed to the block, compiled, + * and the resulting BlockStatement wrapper is removed before returning a result. + * @param phase + * the {@link CompilePhase} the AST will be targeted towards. Default is {@link CompilePhase#CLASS_GENERATION} + * @param statementsOnly + * when true, only the script statements are returned. WHen false, you will + * receive back a Script class node also. Default is true. + * @param source + * The source code String that will be compiled. The string must be a block wrapped in curly braces. + * @returns a List of {@link ASTNode} . + * @throws IllegalArgumentException + * if source is null or empty + */ + private List<ASTNode> buildFromBlock(CompilePhase phase = CompilePhase.CLASS_GENERATION, boolean statementsOnly = true, String source) { + if (!source || "" == source.trim()) throw new IllegalArgumentException("A source must be specified") + def labelledSource = "__synthesized__label__${System.currentTimeMillis()}__:" + source + List<ASTNode> result = new AstStringCompiler().compile(labelledSource, phase, statementsOnly) + // find the block statement from the result, and unwrap it from one level. + result.collect { node -> + if (node instanceof BlockStatement) { + ((BlockStatement)node).statements[0] //unwrap the artifact of pre-pending the goto label + } else { + node + } + } + } + + /** + * Builds AST based on the DSL data within the Closure parameter. + * @param specification + * the contents to create + */ + List<ASTNode> buildFromSpec(@DelegatesTo(AstSpecificationCompiler) Closure specification) { + if (specification == null) throw new IllegalArgumentException('Null: specification') + def properties = new AstSpecificationCompiler(specification) + return properties.expression + } +} \ No newline at end of file
