001 /*******************************************************************************
002 * Copyright (c) 2004 IBM Corporation and others.
003 * All rights reserved. This program and the accompanying materials
004 * are made available under the terms of the Common Public License v1.0
005 * which accompanies this distribution, and is available at
006 * http://www.eclipse.org/legal/cpl-v10.html
007 *
008 * Contributors:
009 * IBM - Initial API and implementation
010 ******************************************************************************/
011
012
013 package org.codehaus.groovy.classgen;
014
015 import java.util.ArrayList;
016 import java.util.Iterator;
017 import java.util.List;
018
019 import org.codehaus.groovy.ast.ClassNode;
020 import org.codehaus.groovy.ast.ConstructorNode;
021 import org.codehaus.groovy.ast.FieldNode;
022 import org.codehaus.groovy.ast.GroovyClassVisitor;
023 import org.codehaus.groovy.ast.MethodNode;
024 import org.codehaus.groovy.ast.PropertyNode;
025 import org.objectweb.asm.Opcodes;
026
027
028 /**
029 * ClassCompletionVerifier
030 *
031 */
032 public class ClassCompletionVerifier implements Opcodes, GroovyClassVisitor {
033
034 ClassNode classNode;
035
036 public ClassNode getClassNode() {
037 return classNode;
038 }
039
040
041 /* (non-Javadoc)
042 * @see org.codehaus.groovy.ast.GroovyClassVisitor#visitClass(org.codehaus.groovy.ast.ClassNode)
043 */
044 public void visitClass(ClassNode a_node) {
045 classNode = a_node;
046 if ((classNode.getModifiers() & Opcodes.ACC_ABSTRACT) == 0 ) {
047 List abstractMethods = classNode.getAbstractMethods();
048 if (abstractMethods != null) {
049 List methodNames = new ArrayList();
050 for (Iterator iter = abstractMethods.iterator(); iter.hasNext();) {
051 MethodNode method = (MethodNode) iter.next();
052 String methodName = method.getTypeDescriptor();
053 methodNames.add(methodName);
054 }
055 throw new RuntimeIncompleteClassException(methodNames, classNode);
056 }
057 }
058 }
059
060 /* (non-Javadoc)
061 * @see org.codehaus.groovy.ast.GroovyClassVisitor#visitConstructor(org.codehaus.groovy.ast.ConstructorNode)
062 */
063 public void visitConstructor(ConstructorNode a_node) {
064 }
065
066 /* (non-Javadoc)
067 * @see org.codehaus.groovy.ast.GroovyClassVisitor#visitMethod(org.codehaus.groovy.ast.MethodNode)
068 */
069 public void visitMethod(MethodNode a_node) {
070 }
071
072 /* (non-Javadoc)
073 * @see org.codehaus.groovy.ast.GroovyClassVisitor#visitField(org.codehaus.groovy.ast.FieldNode)
074 */
075 public void visitField(FieldNode a_node) {
076 }
077
078 /* (non-Javadoc)
079 * @see org.codehaus.groovy.ast.GroovyClassVisitor#visitProperty(org.codehaus.groovy.ast.PropertyNode)
080 */
081 public void visitProperty(PropertyNode a_node) {
082 }
083
084 }