개인 생성자 추가 Sensei

게시일: 2020년 12월 14일
by 앨런 리처드슨
사례 연구

개인 생성자 추가 Sensei

게시일: 2020년 12월 14일
by 앨런 리처드슨
리소스 보기
리소스 보기

개인 생성자 추가 Sensei


유틸리티 클래스에서 필드와 메서드가 정적일 때 인스턴스화할 이유가 없습니다.

예를 들어, 유틸리티클래스 유틸리티 = 새로운 유틸리티클래스();

아래 코드는 유틸리티 클래스를 간단하게 구현하는 것입니다.

public class UtilityClass {
    public static final Boolean ULTIMATE_TRUTH = true;
    public static boolean getTrue(){
        return ULTIMATE_TRUTH;
    }
}


이는 정적 분석 도구가 선택할 수 있는 코딩 패턴의 유형이지만 문제를 해결할 수 있는 기능을 제공하지 않는 경우가 많습니다.

사용할 수 있습니다 Sensei 코딩 패턴을 식별하고 자동으로 개인 생성기를 생성하여 클래스를 인스턴스화하는 것이 불가능합니다.

클래스 검색

유틸리티 클래스에 다음과 같은 새 레시피를 추가합니다.

  •  정적 클래스: 개인 생성자 만들기


정적 클래스에 대한 일반 설정


그리고 처음에는 클래스를 검색할 간단한 매치러를 만듭니다.

검색:

  class: {}


이것은 내가 빠른 수정을 작성하기 시작할 수있을만큼 좋은 모든 클래스와 일치합니다. 빠른 수정 이 작동하면 개인 생성자가 필요한 클래스가 있을 가능성이 더 높을 때 검색을 강조 표시하도록 수정합니다.

빠른 수정

빠른 수정의 경우 개인 생성기를 생성하려고 합니다.

예제 클래스에서는 다음과 같습니다.

   프라이빗 유틸리티클래스(){}

내 클래스에 위의 코드를 추가하려면 내 빠른 수정 메서드를 추가 하 고 메서드의 이름은 클래스의 이름을 사용 하 여 콧수염 템플릿 될 것입니다.

사용 가능한 픽스:

- name: "add private constructor"
  actions:
  - addMethod:
      method: "private {{{ name }}}(){}"


GUI 편집기에서는 변수 표시를 사용하여 콧수염 템플릿을 만든 다음 필드를 편집하여 개인 수정자, 브래킷 및 중괄호를 추가하여 구문적으로 올바르게 만듭니다.

개인 생성자 추가

이렇게 하면 이제 모든 클래스에 개인 생성기를 추가할 수 있습니다.

내가 콧수염 템플릿을 작성할 때 생성 된 코드를 볼 수 있기 때문에 QuickFix 미리보기는 나를 도움이됩니다.

유틸리티 클래스 개인 생성자 추가

이제 문제를 해결할 수 있다는 것을 알고 있습니다. 검색 조건을 구체화하여 가장 적절한 경우 레시피를 표시합니다.

누락된 생성자 검색

이상적으로는 모든 클래스에 대한 오류를 표시하는 레시피를 만들고 싶지 않습니다. 따라서 생성자가 없는 클래스에서만 일치되도록 검색에 몇 가지 추가 조건을 추가합니다.

검색:

  수업:
없이:
아이:
메서드:
생성자: 사실


YAML은 GUI와 약간 다릅니다.

GUI에서 생성자 '예'인 자식 메서드가 없는 클래스를 찾도록 구성합니다. 우리는 GUI를 좀 더 인간 친화적으로 만들기 위해 '사실'대신 GUI에서 '예'를 사용합니다.


코드에서 수업 검색


이 레시피는 이제 생성자가 없는 모든 클래스에 대해서만 드러냅니다.

가능성이 범인에 대한 좁은 검색

그래서 더 나아가 정적 메서드 나 필드의 존재를 찾고 싶을 수 있습니다.

생성자가 없고 모든 공용 정적 필드 또는 모든 공용 정적 메서드가 있는 클래스를 찾습니다.

검색:

  수업:
와:
그 중:
- 어린이 :
메서드:
모두:
- 수정자 : "공개"
- 수정자 : "정적"
- 어린이 :
밭:
모두:
- 수정자 : "정적"
- 수정자 : "공개"
없이:
아이:
메서드:
생성자: 사실


이래 Sensei IDE에서 프로그래머로서 코드를 정적으로 분석하고 모든 오류를 보고하는 대신 이 필터는 기본 공개 생성자를 가질 만한 충분한 이유가 있는 코드 베이스의 대부분의 클래스를 배제하기에 충분합니다.

일부 프로젝트에서는 유틸리티 클래스에 개인 메서드가 있을 수 있으므로 'all'이 아닌 '모든' 공개 정적 메서드의 존재를 찾기위해 선택할 수 있습니다.

       - 어린이 :
밭:
그 중:
- 수정자 : "정적"
- 수정자 : "공개"


힌트

Sensei 정적 분석 도구를 대체하도록 설계되지 않았습니다. Sensei 코딩 프로세스 또는 기술과 관련된 일반적인 문제에 대해 정적 분석 도구를 보강할 수 있습니다. 문제를 강조하기 위해 일치하는 를 충분히 복제하고 QuickFix 코드를 생성하여 개발 프로세스를 지원합니다.

내가하려고하는 것은 내가 필요로하는 모든 상황을 포함하는 간단한 충분한 조리법을 만드는 것입니다,하지만 모든 클래스에서 제안되지 않도록 필터링합니다.

레시피를 작업할 때 위험을 해제하려고 할 때, 이 경우 개인 생성기를 만들 수 있는지 확실하지 않았기 때문에 QuickFix를 먼저 만들었습니다. 그런 다음 검색 조건을 리팩터링하여 보다 구체적으로 만듭니다.

때로는 조리법을 작업 할 때 검색을 수행하는 방법을 잘 모르기 때문에 먼저 작업합니다.

나는 QuickFix의 리팩터링과 검색 사이를 전환, 점진적으로 구축 할 때 만들 수있는 조리법을 쉽게 찾을 수 있습니다.

---


설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드"


소스 코드와 이에 대한 조리법은 ' sensei -블로그 예제의 리포지토리는 Secure Code Warrior GitHub 계정, 'pojoexamples' 모듈에서.

https://github.com/securecodewarrior/sensei-blog-examples

리소스 보기
리소스 보기

저자

앨런 리처드슨

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

개인 생성자 추가 Sensei

게시일: 2020년 12월 14일
By 앨런 리처드슨

개인 생성자 추가 Sensei


유틸리티 클래스에서 필드와 메서드가 정적일 때 인스턴스화할 이유가 없습니다.

예를 들어, 유틸리티클래스 유틸리티 = 새로운 유틸리티클래스();

아래 코드는 유틸리티 클래스를 간단하게 구현하는 것입니다.

public class UtilityClass {
    public static final Boolean ULTIMATE_TRUTH = true;
    public static boolean getTrue(){
        return ULTIMATE_TRUTH;
    }
}


이는 정적 분석 도구가 선택할 수 있는 코딩 패턴의 유형이지만 문제를 해결할 수 있는 기능을 제공하지 않는 경우가 많습니다.

사용할 수 있습니다 Sensei 코딩 패턴을 식별하고 자동으로 개인 생성기를 생성하여 클래스를 인스턴스화하는 것이 불가능합니다.

클래스 검색

유틸리티 클래스에 다음과 같은 새 레시피를 추가합니다.

  •  정적 클래스: 개인 생성자 만들기


정적 클래스에 대한 일반 설정


그리고 처음에는 클래스를 검색할 간단한 매치러를 만듭니다.

검색:

  class: {}


이것은 내가 빠른 수정을 작성하기 시작할 수있을만큼 좋은 모든 클래스와 일치합니다. 빠른 수정 이 작동하면 개인 생성자가 필요한 클래스가 있을 가능성이 더 높을 때 검색을 강조 표시하도록 수정합니다.

빠른 수정

빠른 수정의 경우 개인 생성기를 생성하려고 합니다.

예제 클래스에서는 다음과 같습니다.

   프라이빗 유틸리티클래스(){}

내 클래스에 위의 코드를 추가하려면 내 빠른 수정 메서드를 추가 하 고 메서드의 이름은 클래스의 이름을 사용 하 여 콧수염 템플릿 될 것입니다.

사용 가능한 픽스:

- name: "add private constructor"
  actions:
  - addMethod:
      method: "private {{{ name }}}(){}"


GUI 편집기에서는 변수 표시를 사용하여 콧수염 템플릿을 만든 다음 필드를 편집하여 개인 수정자, 브래킷 및 중괄호를 추가하여 구문적으로 올바르게 만듭니다.

개인 생성자 추가

이렇게 하면 이제 모든 클래스에 개인 생성기를 추가할 수 있습니다.

내가 콧수염 템플릿을 작성할 때 생성 된 코드를 볼 수 있기 때문에 QuickFix 미리보기는 나를 도움이됩니다.

유틸리티 클래스 개인 생성자 추가

이제 문제를 해결할 수 있다는 것을 알고 있습니다. 검색 조건을 구체화하여 가장 적절한 경우 레시피를 표시합니다.

누락된 생성자 검색

이상적으로는 모든 클래스에 대한 오류를 표시하는 레시피를 만들고 싶지 않습니다. 따라서 생성자가 없는 클래스에서만 일치되도록 검색에 몇 가지 추가 조건을 추가합니다.

검색:

  수업:
없이:
아이:
메서드:
생성자: 사실


YAML은 GUI와 약간 다릅니다.

GUI에서 생성자 '예'인 자식 메서드가 없는 클래스를 찾도록 구성합니다. 우리는 GUI를 좀 더 인간 친화적으로 만들기 위해 '사실'대신 GUI에서 '예'를 사용합니다.


코드에서 수업 검색


이 레시피는 이제 생성자가 없는 모든 클래스에 대해서만 드러냅니다.

가능성이 범인에 대한 좁은 검색

그래서 더 나아가 정적 메서드 나 필드의 존재를 찾고 싶을 수 있습니다.

생성자가 없고 모든 공용 정적 필드 또는 모든 공용 정적 메서드가 있는 클래스를 찾습니다.

검색:

  수업:
와:
그 중:
- 어린이 :
메서드:
모두:
- 수정자 : "공개"
- 수정자 : "정적"
- 어린이 :
밭:
모두:
- 수정자 : "정적"
- 수정자 : "공개"
없이:
아이:
메서드:
생성자: 사실


이래 Sensei IDE에서 프로그래머로서 코드를 정적으로 분석하고 모든 오류를 보고하는 대신 이 필터는 기본 공개 생성자를 가질 만한 충분한 이유가 있는 코드 베이스의 대부분의 클래스를 배제하기에 충분합니다.

일부 프로젝트에서는 유틸리티 클래스에 개인 메서드가 있을 수 있으므로 'all'이 아닌 '모든' 공개 정적 메서드의 존재를 찾기위해 선택할 수 있습니다.

       - 어린이 :
밭:
그 중:
- 수정자 : "정적"
- 수정자 : "공개"


힌트

Sensei 정적 분석 도구를 대체하도록 설계되지 않았습니다. Sensei 코딩 프로세스 또는 기술과 관련된 일반적인 문제에 대해 정적 분석 도구를 보강할 수 있습니다. 문제를 강조하기 위해 일치하는 를 충분히 복제하고 QuickFix 코드를 생성하여 개발 프로세스를 지원합니다.

내가하려고하는 것은 내가 필요로하는 모든 상황을 포함하는 간단한 충분한 조리법을 만드는 것입니다,하지만 모든 클래스에서 제안되지 않도록 필터링합니다.

레시피를 작업할 때 위험을 해제하려고 할 때, 이 경우 개인 생성기를 만들 수 있는지 확실하지 않았기 때문에 QuickFix를 먼저 만들었습니다. 그런 다음 검색 조건을 리팩터링하여 보다 구체적으로 만듭니다.

때로는 조리법을 작업 할 때 검색을 수행하는 방법을 잘 모르기 때문에 먼저 작업합니다.

나는 QuickFix의 리팩터링과 검색 사이를 전환, 점진적으로 구축 할 때 만들 수있는 조리법을 쉽게 찾을 수 있습니다.

---


설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드"


소스 코드와 이에 대한 조리법은 ' sensei -블로그 예제의 리포지토리는 Secure Code Warrior GitHub 계정, 'pojoexamples' 모듈에서.

https://github.com/securecodewarrior/sensei-blog-examples

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.