import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

class ThisParameter {
	void untagged(ThisParameter this, int i) {
		// no content
	}
	void sourceTagged(@SourceTagged("source") ThisParameter this) {
		// no content
	}
	void classTagged(@ClassTagged("class") ThisParameter this) {
		// no content
	}
	void runtimeTagged(@RuntimeTagged("runtime") ThisParameter this) {
		// no content
	}
	@Target(ElementType.TYPE_USE)
	@Retention(RetentionPolicy.SOURCE)
	@interface SourceTagged {
		String value();
	}
	@Target(ElementType.TYPE_USE)
	@Retention(RetentionPolicy.CLASS)
	@interface ClassTagged {
		String value();
	}
	@Target(ElementType.TYPE_USE)
	@Retention(RetentionPolicy.RUNTIME)
	@interface RuntimeTagged {
		String value();
	}
}
