diff --git a/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Experimental.java b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Experimental.java new file mode 100644 index 000000000..bbbbb0caf --- /dev/null +++ b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Experimental.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ververica.cdc.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Experimental API. + * + *
API classes or methods need to be marked with modified versions. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ + ElementType.TYPE, + ElementType.FIELD, + ElementType.METHOD, + ElementType.PARAMETER, + ElementType.CONSTRUCTOR, + ElementType.LOCAL_VARIABLE, + ElementType.PACKAGE +}) +@Public +public @interface Experimental {} diff --git a/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Internal.java b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Internal.java new file mode 100644 index 000000000..e310567c2 --- /dev/null +++ b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Internal.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ververica.cdc.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Annotation to mark class and methods as an internal developer API that should not be used by + * users. Internal APIs are not stable and might change across releases. + */ +@Documented +@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD}) +@Internal +public @interface Internal {} diff --git a/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Public.java b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Public.java new file mode 100644 index 000000000..062cb2661 --- /dev/null +++ b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/Public.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ververica.cdc.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Annotation for marking classes as public, stable interfaces. + * + *
Classes, methods and fields with this annotation are stable across minor releases (1.0, 1.1, + * 1.2). In other words, applications using @Public annotated classes will compile against newer + * versions of the same major release. + * + *
Only major releases (1.0, 2.0, 3.0) can break interfaces with this annotation. + */ +@Documented +@Target(ElementType.TYPE) +@Public +public @interface Public {} diff --git a/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/PublicEvolving.java b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/PublicEvolving.java new file mode 100644 index 000000000..6d5a1d708 --- /dev/null +++ b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/PublicEvolving.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ververica.cdc.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Annotation to mark classes and methods for public use, but with evolving interfaces. + * + *
Compatibility may be broken at minor release (e.g. 1.0 to 1.1). + */ +@Documented +@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR}) +@Public +public @interface PublicEvolving {} diff --git a/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/VisibleForTesting.java b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/VisibleForTesting.java new file mode 100644 index 000000000..ab9e2f96b --- /dev/null +++ b/flink-cdc-common/src/main/java/com/ververica/cdc/common/annotation/VisibleForTesting.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.ververica.cdc.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * This annotations declares that a function, field, constructor, or entire type, is only visible + * for testing purposes. + * + *
This annotation is typically attached when for example a method should be {@code private} + * (because it is not intended to be called externally), but cannot be declared private, because + * some tests need to have access to it. + */ +@Documented +@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR}) +@Internal +public @interface VisibleForTesting {}