Program: 27655
Project: 27655
Buggy source:
/** 
 * <p>What's this? A parameterised   {@link At}? Surely not!</p> <p>  {@link org.spongepowered.asm.mixin.injection.points.MethodHead HEAD} and{@link org.spongepowered.asm.mixin.injection.points.BeforeReturn RETURN} are only two of the available values for {@link At} types and are themost straightforward to understand. HEAD only ever makes a single injection (at the head of the method) and RETURN injects before <em>every RETURN opcode</em> in a method. Other injection types are available however:<p> <dl> <dt> {@link org.spongepowered.asm.mixin.injection.points.BeforeInvoke INVOKE}</dt> <dd>searches for method invocations matching its parameters and injects immediately prior to any matching invocations</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.BeforeFieldAccess FIELD}</dt> <dd>searches for field accesses (get or set) matching its parameters and injects immediately prior to any matching access</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.BeforeNew NEW}</dt> <dd>searches for object instantiation (<b>new</b> keywords) matching its parameters and injects prior to the NEW opcode</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.BeforeStringInvoke INVOKE_STRING}</dt> <dd>is a specialised version of INVOKE which searches for a method invocation of a method which accepts a single String argument and also matches the specified string literal. This is very useful for finding calls to Profiler::startSection() with a particular argument.</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.JumpInsnPoint JUMP}</dt> <dd>searches for specific JUMP opcodes</dd> <dt><em>Fully-qualified class name</em></dt> <dd>Allows you to specify a custom class which extends   {@link org.spongepowered.asm.mixin.injection.InjectionPoint} to implement any customlogic you wish</dd> </dl> <p>The specific arguments accepted by each type of invokation are described in each class's javadoc. This example shows a simple use of the INVOKE type.</p> <p>This is what the code in the target method looks like: <blockquote><pre> this.worldObj = worldIn; this.terrainType = worldIn.getWorldInfo().getTerrainType(); this.generatorSettings = worldIn.getWorldInfo().getGeneratorOptions(); // we want to inject a callback to our method here, immediately prior to calling registerWorldChunkManager this.registerWorldChunkManager(); this.generateLightBrightnessTable(); </pre></blockquote> Having identified the target method, we simply supply the method name as the <em>target</em> argument to the  {@link At} annotation. Note thatunlike the <em>method</em> parameter (which <b>must</b> refer to a method in the target class) the <em>target</em> parameter for the  {@link At}<b>must</b> be a <em>fully-qualified</em> member reference (include both the owner and signature) because the obfuscation processor requires this information in order to look up the target member in the obfuscation tables.</p>
 */
@Inject(method="String_Node_Str",at=@At(value="String_Node_Str",target="String_Node_Str")) public void onRegisterWorld(World worldIn,CallbackInfo ci){
}

Fixed version (ground truth):
/** 
 * <p>What's this? A parameterised   {@link At}? Surely not!</p> <p>  {@link org.spongepowered.asm.mixin.injection.points.MethodHead HEAD} and{@link org.spongepowered.asm.mixin.injection.points.BeforeReturn RETURN} are only two of the available values for {@link At} types and are themost straightforward to understand. HEAD only ever makes a single injection (at the head of the method) and RETURN injects before <em>every RETURN opcode</em> in a method. Other injection types are available however:</p> <dl> <dt> {@link org.spongepowered.asm.mixin.injection.points.BeforeInvoke INVOKE}</dt> <dd>searches for method invocations matching its parameters and injects immediately prior to any matching invocations</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.BeforeFieldAccess FIELD}</dt> <dd>searches for field accesses (get or set) matching its parameters and injects immediately prior to any matching access</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.BeforeNew NEW}</dt> <dd>searches for object instantiation (<b>new</b> keywords) matching its parameters and injects prior to the NEW opcode</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.BeforeStringInvoke INVOKE_STRING}</dt> <dd>is a specialised version of INVOKE which searches for a method invocation of a method which accepts a single String argument and also matches the specified string literal. This is very useful for finding calls to Profiler::startSection() with a particular argument.</dd> <dt>  {@link org.spongepowered.asm.mixin.injection.points.JumpInsnPoint JUMP}</dt> <dd>searches for specific JUMP opcodes</dd> <dt><em>Fully-qualified class name</em></dt> <dd>Allows you to specify a custom class which extends   {@link org.spongepowered.asm.mixin.injection.InjectionPoint} to implement any customlogic you wish</dd> </dl> <p>The specific arguments accepted by each type of invokation are described in each class's javadoc. This example shows a simple use of the INVOKE type.</p> <p>This is what the code in the target method looks like:</p> <blockquote><pre> this.worldObj = worldIn; this.terrainType = worldIn.getWorldInfo().getTerrainType(); this.generatorSettings = worldIn.getWorldInfo().getGeneratorOptions(); // we want to inject a callback to our method here, immediately prior to calling registerWorldChunkManager this.registerWorldChunkManager(); this.generateLightBrightnessTable(); </pre></blockquote> <p>Having identified the target method, we simply supply the method name as the <em>target</em> argument to the  {@link At} annotation. Note thatunlike the <em>method</em> parameter (which <b>must</b> refer to a method in the target class) the <em>target</em> parameter for the  {@link At}<b>must</b> be a <em>fully-qualified</em> member reference (include both the owner and signature) because the obfuscation processor requires this information in order to look up the target member in the obfuscation tables.</p>
 * @param worldIn The world to register
 * @param ci The callback on register
 */
@Inject(method="String_Node_Str",at=@At(value="String_Node_Str",target="String_Node_Str")) public void onRegisterWorld(World worldIn,CallbackInfo ci){
}