blob: 55ea0103e516bb224b16e396c3f4e35aa6aa9e05 [file] [log] [blame]
/*
* Copyright 2010 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.android.jack.ir.ast;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.load.MethodLoader;
import com.android.jack.util.NamingTools;
import com.android.sched.item.Component;
import com.android.sched.item.Description;
import com.android.sched.scheduler.ScheduleInstance;
import com.android.sched.transform.TransformRequest;
import javax.annotation.Nonnull;
/**
* A Java constructor method.
*/
@Description("A Java constructor method")
public class JConstructor extends JMethod {
public JConstructor(@Nonnull SourceInfo info, @Nonnull JDefinedClass enclosingType,
int modifier) {
super(info, new JMethodId(
new JMethodIdWide(NamingTools.INIT_NAME, MethodKind.INSTANCE_NON_VIRTUAL),
JPrimitiveTypeEnum.VOID.getType()),
enclosingType, modifier);
assert JModifier.isMethodModifier(modifier);
assert JModifier.isValidMethodModifier(modifier);
assert !JModifier.isAbstract(modifier);
assert !JModifier.isBridge(modifier);
assert !JModifier.isFinal(modifier);
assert !JModifier.isNative(modifier);
assert !JModifier.isStatic(modifier);
assert !JModifier.isSynchronized(modifier);
}
public JConstructor(@Nonnull SourceInfo info, @Nonnull JDefinedClass enclosingType, int modifier,
@Nonnull MethodLoader loader) {
super(info, new JMethodId(
new JMethodIdWide(NamingTools.INIT_NAME, MethodKind.INSTANCE_NON_VIRTUAL),
JPrimitiveTypeEnum.VOID.getType()),
enclosingType, modifier, loader);
assert JModifier.isMethodModifier(modifier);
assert JModifier.isValidMethodModifier(modifier);
assert !JModifier.isAbstract(modifier);
assert !JModifier.isBridge(modifier);
assert !JModifier.isFinal(modifier);
assert !JModifier.isNative(modifier);
assert !JModifier.isStatic(modifier);
assert !JModifier.isSynchronized(modifier);
}
@Override
public boolean canBePolymorphic() {
return false;
}
@Override
public JMethodBody getBody() {
return (JMethodBody) super.getBody();
}
@Nonnull
@Override
public JDefinedClass getEnclosingType() {
return (JDefinedClass) super.getEnclosingType();
}
public JClass getNewType() {
return getEnclosingType();
}
@Override
public void traverse(@Nonnull JVisitor visitor) {
if (visitor.visit(this)) {
visitChildren(visitor);
}
visitor.endVisit(this);
}
@Override
public void traverse(@Nonnull ScheduleInstance<? super Component> schedule) throws Exception {
schedule.process(this);
visitChildren(schedule);
}
@Override
public void visit(@Nonnull JVisitor visitor, @Nonnull TransformRequest transformRequest)
throws Exception {
visitor.visit(this, transformRequest);
}
}