Skip to content

Commit

Permalink
WIP: Don't NPE when a Method declares a Native annotation but the Jav…
Browse files Browse the repository at this point in the history
…aPrepareDefinitionVisitor does not define it
  • Loading branch information
kindlich committed Jun 22, 2024
1 parent e0ced13 commit c9155b1
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,10 @@ public Void visitSetter(SetterMember member) {
@Override
public Void visitOperator(OperatorMember member) {
final JavaCompilingMethod javaMethod = class_.getMethod(member);
if (!javaMethod.compile) {
return null;
}

final MethodMember methodMember = new MethodMember(member.position, member.definition, member.getEffectiveModifiers(), javaMethod.compiled.name, member.header);
methodMember.body = member.body;
methodMember.annotations = member.annotations;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,29 +125,33 @@ public void addMethod(MethodSymbol method, NativeTag native_) {
if (native_ != null && nativeClass != null) {
final String signature = getContext().getMethodSignature(method.getHeader());
JavaMethod method1 = nativeClass.getMethod(native_.value);
addMethod(method, method1.asCompilingMethod(compiled, signature), method1);
} else {
final JavaNativeMethod.Kind kind = getKind(method);
final String descriptor;
final String signature;
if (kind == JavaNativeMethod.Kind.EXPANSION) {
descriptor = getContext().getMethodDescriptorExpansion(method.getHeader(), method.getTargetType());
signature = getContext().getMethodSignatureExpansion(method.getHeader(), method.getTargetType());
} else {
descriptor = getContext().getMethodDescriptor(method.getHeader());
signature = getContext().getMethodSignature(method.getHeader());
if (method1 != null) {
addMethod(method, method1.asCompilingMethod(compiled, signature), method1);
return;
}
JavaNativeMethod javaMethod = new JavaNativeMethod(
compiled,
kind,
method.getID().accept(MethodNamer.INSTANCE),
true,
descriptor,
JavaModifiers.getJavaModifiers(method.getModifiers()),
getContext().isGenericReturn(method.getHeader().getReturnType()),
method.getHeader().useTypeParameters());
addMethod(method, new JavaCompilingMethod(compiled, javaMethod, signature));

}

final JavaNativeMethod.Kind kind = getKind(method);
final String descriptor;
final String signature;
if (kind == JavaNativeMethod.Kind.EXPANSION) {
descriptor = getContext().getMethodDescriptorExpansion(method.getHeader(), method.getTargetType());
signature = getContext().getMethodSignatureExpansion(method.getHeader(), method.getTargetType());
} else {
descriptor = getContext().getMethodDescriptor(method.getHeader());
signature = getContext().getMethodSignature(method.getHeader());
}
JavaNativeMethod javaMethod = new JavaNativeMethod(
compiled,
kind,
method.getID().accept(MethodNamer.INSTANCE),
true,
descriptor,
JavaModifiers.getJavaModifiers(method.getModifiers()),
getContext().isGenericReturn(method.getHeader().getReturnType()),
method.getHeader().useTypeParameters());
addMethod(method, new JavaCompilingMethod(compiled, javaMethod, signature));
}

public void addDependency(DefinitionSymbol symbol) {
Expand Down
2 changes: 1 addition & 1 deletion StdLibs

0 comments on commit c9155b1

Please sign in to comment.