com.sun.jdo.api.persistence.enhancer.impl.MethodAction Maven / Gradle / Ivy
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.jdo.api.persistence.enhancer.impl;
import java.util.Map;
//@olsen: disabled feature
/*
import java.util.Set;
import java.util.HashSet;
import java.util.Enumeration;
*/
import com.sun.jdo.api.persistence.enhancer.classfile.*;
import com.sun.jdo.api.persistence.enhancer.util.Support;
//@olsen: cosmetics
//@olsen: moved: this class -> package impl
//@olsen: subst: /* ... */ -> // ...
//@olsen: subst: FilterEnv -> Environment
//@olsen: dropped parameter 'Environment env', use association instead
//@olsen: subst: Hashtable -> Map, Set, HashSet
//@olsen: subst: theClass, classAction -> ca
//@olsen: added: support for I18N
//@olsen: subst: FilterError -> UserException, assert()
//@olsen: removed: old, disabled ODI code
/**
* MethodAction controls the annotation actions applied to a single
* method of a class.
*/
class MethodAction
//@olsen: not needed
//implements AnnotationConstants
extends Support {
/* hash table for lookup of known ok Generic attributes */
//@olsen: disabled feature
/*
private static Set safeGenericAttributes;
private static void addSafeAttribute(String attrName) {
safeGenericAttributes.add(attrName);
}
static {
safeGenericAttributes = new HashSet();
// Microsoft COM attributes
addSafeAttribute("COM_Class_type");
addSafeAttribute("COM_DispMethod");
addSafeAttribute("COM_ExposedAs");
addSafeAttribute("COM_ExposedAs_Group");
addSafeAttribute("COM_FuncDesc");
addSafeAttribute("COM_Guid");
addSafeAttribute("COM_GuidPool");
addSafeAttribute("COM_MapsTo");
addSafeAttribute("COM_MethodPool");
addSafeAttribute("COM_ProxiesTo");
addSafeAttribute("COM_Safety");
addSafeAttribute("COM_TypeDesc");
addSafeAttribute("COM_VarTypeDesc");
addSafeAttribute("COM_VtblMethod");
}
*/
/* The parent ClassAction of this MethodAction */
//@olsen: made final
private final ClassAction ca;
/* The method to which the actions apply */
//@olsen: made final
private final ClassMethod theMethod;
/* The code annotater for the method */
//@olsen: made final
private final MethodAnnotater annotater;
/* Central repository for the options and classes */
//@olsen: added association
//@olsen: made final
private final Environment env;
/**
* Returns true if any code annotations need to be performed on
* this method.
*/
boolean needsAnnotation() {
return annotater.needsAnnotation();
}
/**
* Returns the method for which this MethodAction applies
*/
ClassMethod method() {
return theMethod;
}
/**
* Constructor
*/
//@olsen: added parameter 'env' for association
MethodAction(ClassAction ca,
ClassMethod method,
Environment env) {
this.ca = ca;
theMethod = method;
this.env = env;
annotater = new MethodAnnotater(ca, method, env);
}
/**
* Examine the method to determine what actions are required
*/
void check() {
annotater.checkMethod();
//@olsen: disabled feature
/*
if (env.verbose()) {
CodeAttribute codeAttr = theMethod.codeAttribute();
if (codeAttr != null) {
Enumeration e = codeAttr.attributes().elements();
while (e.hasMoreElements()) {
ClassAttribute attr = (ClassAttribute) e.nextElement();
if ((attr instanceof GenericAttribute) &&
safeGenericAttributes.contains(attr.attrName().asString())) {
String userClass = ca.classControl().userClassName();
String msg = "method " + userClass +
"." + theMethod.name().asString() +
Descriptor.userMethodArgs(theMethod.signature().asString()) +
" contains an unrecognized attribute of type " +
attr.attrName().asString() + ". " +
"Please check with Object Design support to see " +
"whether this is a problem.";
env.warning(msg, userClass);
}
}
}
}
*/
}
/**
* Retarget class references according to the class name mapping
* table.
*/
//@olsen: disabled feature
/*
void retarget(Map classTranslations) {
// No action needed currently
}
*/
/**
* Perform annotations
*/
void annotate() {
annotater.annotateMethod();
}
}