This product is not supported for your selected Datadog site. ().
이 페이지는 아직 영어로 제공되지 않습니다. 번역 작업 중입니다. 현재 번역 프로젝트에 대한 질문이나 피드백이 있으신 경우 언제든지 연락주시기 바랍니다.
Metadata
ID:java-code-style/avoid-dollar-signs
Language: Java
Severity: Notice
Category: Code Style
Description
Avoid using dollar signs in identifiers as auto-generated names containing dollar signs ($) may lead to unexpected issues that can be difficult to diagnose.
Non-Compliant Code Examples
publicclass$Foo{}publicclassFo$o{}publicclassFoo${Stringbar$="bar";publicStringba$(){return"baz";}}/*
/* Copyright 2018-2024 contributors to the OpenLineage project
/* SPDX-License-Identifier: Apache-2.0
*/packageio.openlineage.spark3.agent.lifecycle.plan.column;import staticorg.mockito.ArgumentMatchers.any;import staticorg.mockito.Mockito.doAnswer;import staticorg.mockito.Mockito.mock;import staticorg.mockito.Mockito.mockStatic;import staticorg.mockito.Mockito.never;import staticorg.mockito.Mockito.times;import staticorg.mockito.Mockito.verify;import staticorg.mockito.Mockito.when;importio.openlineage.spark.agent.lifecycle.plan.column.ColumnLevelLineageBuilder;importio.openlineage.spark.agent.lifecycle.plan.column.ColumnLevelLineageContext;importio.openlineage.spark.agent.util.ScalaConversionUtils;importio.openlineage.sql.ColumnMeta;importjava.util.Arrays;importjava.util.HashMap;importjava.util.Map;importjava.util.concurrent.atomic.LongAccumulator;importorg.apache.spark.sql.catalyst.expressions.Attribute;importorg.apache.spark.sql.catalyst.expressions.AttributeReference;importorg.apache.spark.sql.catalyst.expressions.ExprId;importorg.apache.spark.sql.catalyst.expressions.NamedExpression;importorg.apache.spark.sql.catalyst.util.CaseInsensitiveMap$;importorg.apache.spark.sql.execution.datasources.jdbc.JDBCOptions;importorg.apache.spark.sql.execution.datasources.jdbc.JDBCRelation;importorg.apache.spark.sql.types.IntegerType$;importorg.apache.spark.sql.types.Metadata$;importorg.apache.spark.sql.types.StringType$;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.mockito.MockedStatic;importorg.mockito.stubbing.Answer;classJdbcColumnLineageExpressionCollectorTest{ColumnLevelLineageBuilderbuilder=mock(ColumnLevelLineageBuilder.class);ColumnLevelLineageContextcontext=mock(ColumnLevelLineageContext.class);ExprIdexprId1=ExprId.apply(20);ExprIdexprId2=ExprId.apply(21);ExprIddependencyId1=ExprId.apply(0);ExprIddependencyId2=ExprId.apply(1);Attributeexpression1=newAttributeReference("k",IntegerType$.MODULE$,false,Metadata$.MODULE$.empty(),exprId1,null);Attributeexpression2=newAttributeReference("j",StringType$.MODULE$,false,Metadata$.MODULE$.empty(),exprId2,null);JDBCRelationrelation=mock(JDBCRelation.class);JDBCOptionsjdbcOptions=mock(JDBCOptions.class);StringjdbcQuery="(select js1.k, CONCAT(js1.j1, js2.j2) as j from jdbc_source1 js1 join jdbc_source2 js2 on js1.k = js2.k) SPARK_GEN_SUBQ_0";StringinvalidJdbcQuery="(INVALID) SPARK_GEN_SUBQ_0";Stringurl="jdbc:postgresql://localhost:5432/test";Map<ColumnMeta,ExprId>mockMap=newHashMap<>();@BeforeEachvoidsetup(){when(relation.jdbcOptions()).thenReturn(jdbcOptions);scala.collection.immutable.Map<String,String>properties=ScalaConversionUtils.<String,String>asScalaMapEmpty();when(jdbcOptions.parameters()).thenReturn(CaseInsensitiveMap$.MODULE$.<String>apply(properties));when(context.getBuilder()).thenReturn(builder);}@TestvoidtestInputCollection(){when(jdbcOptions.tableOrQuery()).thenReturn(jdbcQuery);when(jdbcOptions.url()).thenReturn(url);finalLongAccumulatorid=newLongAccumulator(Long::sum,0L);try(MockedStatic<NamedExpression>utilities=mockStatic(NamedExpression.class)){utilities.when(NamedExpression::newExprId).thenAnswer((Answer<ExprId>)invocation->{ExprIdexprId=ExprId.apply(id.get());id.accumulate(1);returnexprId;});doAnswer(invocation->mockMap.putIfAbsent(invocation.getArgument(0),invocation.getArgument(1))).when(builder).addExternalMapping(any(ColumnMeta.class),any(ExprId.class));when(builder.getMapping(any(ColumnMeta.class))).thenAnswer(invocation->mockMap.get(invocation.getArgument(0)));JdbcColumnLineageCollector.extractExpressionsFromJDBC(context,relation,Arrays.asList(expression1,expression2));verify(builder,times(1)).addDependency(exprId2,dependencyId1);verify(builder,times(1)).addDependency(exprId2,dependencyId2);utilities.verify(NamedExpression::newExprId,times(3));}}@TestvoidtestInvalidQuery(){when(jdbcOptions.tableOrQuery()).thenReturn(invalidJdbcQuery);when(jdbcOptions.url()).thenReturn(url);JdbcColumnLineageCollector.extractExpressionsFromJDBC(context,relation,Arrays.asList(expression1,expression2));verify(builder,never()).addDependency(any(ExprId.class),any(ExprId.class));}}\
Compliant Code Examples
publicclassFoo{}
원활한 통합. Datadog Code Security를 경험해 보세요
Datadog Code Security
이 규칙을 사용해 Datadog Code Security로 코드를 분석하세요
규칙 사용 방법
1
2
rulesets:- java-code-style # Rules to enforce Java code style.
리포지토리 루트에 위의 내용을 포함하는 static-analysis.datadog.yml을 만듭니다
무료 IDE 플러그인을 사용하거나 CI 파이프라인에 Code Security 검사를 추가합니다