mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
176 lines
4.6 KiB
C#
176 lines
4.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Reflection;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
|
|
// General Information about an assembly is controlled through the following
|
|
// set of attributes. Change these attribute values to modify the information
|
|
// associated with an assembly.
|
|
[assembly: AssemblyTitle("C# attributes test")]
|
|
[assembly: AssemblyDescription("A test of C# attributes")]
|
|
[assembly: AssemblyConfiguration("")]
|
|
[assembly: AssemblyCompany("Semmle Plc")]
|
|
[assembly: AssemblyProduct("Odasa")]
|
|
[assembly: AssemblyCopyright("Copyright © Semmle 2018")]
|
|
[assembly: AssemblyTrademark("")]
|
|
[assembly: AssemblyCulture("")]
|
|
|
|
// Setting ComVisible to false makes the types in this assembly not visible
|
|
// to COM components. If you need to access a type in this assembly from
|
|
// COM, set the ComVisible attribute to true on that type.
|
|
[assembly: ComVisible(false)]
|
|
|
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
[assembly: Guid("2f70fdd6-14aa-4850-b053-d547adb1f476")]
|
|
|
|
// Version information for an assembly consists of the following four values:
|
|
//
|
|
// Major Version
|
|
// Minor Version
|
|
// Build Number
|
|
// Revision
|
|
//
|
|
// You can specify all the values or you can default the Build and Revision Numbers
|
|
// by using the '*' as shown below:
|
|
// [assembly: AssemblyVersion("1.0.*")]
|
|
[assembly: AssemblyVersion("1.0.0.0")]
|
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
|
|
[assembly: Args(0, new object[] { 1, 2, null }, typeof(ArgsAttribute), (E)12, null, Prop = new object[] { 1, typeof(int) })]
|
|
[module: Args(0, new object[] { 1, 2, null }, typeof(ArgsAttribute), (E)12, null, Prop = new object[] { 1, typeof(int) })]
|
|
|
|
[System.AttributeUsage(System.AttributeTargets.All)]
|
|
class Foo : Attribute
|
|
{
|
|
[Conditional("DEBUG2")]
|
|
static void foo() { }
|
|
}
|
|
|
|
class Bar
|
|
{
|
|
int inc([Foo] int x) { return x + 1; }
|
|
|
|
[MyAttribute(false)]
|
|
void M1() { }
|
|
|
|
[MyAttribute(true, y = "", x = 0)]
|
|
[My2(b: true, j: 1, a: false, X = 42)]
|
|
void M2() { }
|
|
}
|
|
|
|
class MyAttribute : Attribute
|
|
{
|
|
public int x;
|
|
public string y { get; set; }
|
|
public MyAttribute(bool b) { }
|
|
}
|
|
|
|
public enum E { A = 42 }
|
|
|
|
public class ArgsAttribute : Attribute
|
|
{
|
|
public object[] Prop { get; set; }
|
|
public ArgsAttribute(int i, object o, Type t, E e, int[] arr) { }
|
|
}
|
|
|
|
[Args(42, null, typeof(X), E.A, new int[] { 1, 2, 3 }, Prop = new object[] { 1, typeof(int) })]
|
|
public class X
|
|
{
|
|
[Args(42 + 0, new int[] { 1, 2, 3 }, null, (E)12, null, Prop = new object[] { 1, typeof(int) })]
|
|
[return: Args(42 + 0, new int[] { 1, 2, 3 }, null, (E)12, null, Prop = new object[] { 1, typeof(int) })]
|
|
int SomeMethod() { return 1; }
|
|
}
|
|
|
|
class My2Attribute : Attribute
|
|
{
|
|
public int X { get; set; }
|
|
public My2Attribute(bool a, bool b, int i = 12, int j = 13) { }
|
|
}
|
|
|
|
class My3Attribute : Attribute
|
|
{
|
|
public My3Attribute(int x) { }
|
|
}
|
|
|
|
[My3Attribute(1)]
|
|
[return: My3Attribute(2)]
|
|
delegate int My1Delegate(string message);
|
|
|
|
[return: My3Attribute(3)]
|
|
[type: My3Attribute(4)]
|
|
delegate string My2Delegate(string message);
|
|
|
|
public class MyAttributeUsage
|
|
{
|
|
[My3Attribute(5)]
|
|
[return: My3Attribute(6)]
|
|
public static int operator +(MyAttributeUsage a, MyAttributeUsage b) => 0;
|
|
|
|
[My3Attribute(15)]
|
|
public int this[int x]
|
|
{
|
|
[My3Attribute(7)]
|
|
[return: My3Attribute(8)]
|
|
get { return x + 1; }
|
|
|
|
[method: My3Attribute(9)]
|
|
[param: My3Attribute(10)]
|
|
set { return; }
|
|
}
|
|
|
|
private int p;
|
|
[My3Attribute(16)]
|
|
public int Prop1
|
|
{
|
|
[method: My3Attribute(11)]
|
|
[return: My3Attribute(12)]
|
|
get { return p; }
|
|
|
|
[My3Attribute(13)]
|
|
[param: My3Attribute(14)]
|
|
set { p = value; }
|
|
}
|
|
}
|
|
|
|
class Class1
|
|
{
|
|
public class ParamsAttribute : Attribute
|
|
{
|
|
public ParamsAttribute(string s1, string s2, params int[] args) { }
|
|
}
|
|
|
|
[Params("a", "b", 1, 2, 3)]
|
|
public void M1() { }
|
|
|
|
[Params(s1: "a", s2: "b", 1, 2, 3)]
|
|
public void M2() { }
|
|
|
|
[Params(args: 1, s2: "b", s1: "a")]
|
|
public void M3() { }
|
|
|
|
[Params(args: new[] { 1 }, s2: "b", s1: "a")]
|
|
public void M4() { }
|
|
}
|
|
|
|
[Experimental("MyExperimentalClassId")]
|
|
public class MyExperimentalClass
|
|
{
|
|
[Experimental("MyExperimentalMethodId")]
|
|
public void MyExperimentalMethod() { }
|
|
}
|
|
|
|
public class MyOverloadResolutionClass
|
|
{
|
|
[OverloadResolutionPriority(-1)]
|
|
public void M(int[] arr) { }
|
|
|
|
[OverloadResolutionPriority(1)]
|
|
public void M(IEnumerable<int> e) { }
|
|
|
|
[OverloadResolutionPriority(2)]
|
|
public void M(ReadOnlySpan<int> s) { }
|
|
}
|