2013-06-25 3 views
0
def getParentOfType[T <: PsiElement](element: PsiElement, aClass: Class[T], strict: Boolean = false): Option[T] = { 
    System.out.println(aClass.isInstance(element), aClass, element.getClass) 
    ... 

getParentOfType(el, classOf[JSClassImpl]) 

인쇄 작동하지 : 스칼라 유형 비교 다음

(false,class com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl,class com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl) 

이 true로 평가하지해야

를?

는 현재 해결 방법은 다음과 같습니다

System.out.println(aClass.toString == element.getClass.toString) 

이 말도 안되는 것 같습니다. 나는 모든 것을 시도했다! 나는이 방법에서 Option(el.asInstanceOf[T])을 반환 할 때 내가 그것을 사용하려고 할 때마다

는 그리고 나서, 나는 다음과 같은 오류가 발생합니다 :

java.lang.ClassCastException: com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl cannot be cast to com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl 

나는 느낌이있다가 클래스 로더와 함께 할 수있는 뭔가가. IntelliJ에 지원 포럼에서

ClassCastException when casting to the same class

:

당신이 플러그인은 자신의 클래스 로더를 가지고 있음을 알아 두셔야합니다.

http://devnet.jetbrains.com/message/5259550;jsessionid=13C3F98277311F5EFFFAFD3135B42CEA

+1

가능한 중복 http://stackoverflow.com/questions/9642859/scala -generic-abstract-type-ignored-for-isinstanceof –

+0

작동하지 않는 질문에서'System.out.println (manifest.erasure.isInstance (element))'를 시도했습니다. – vaughan

답변

0

참조는 문제가 현재 here

기록 isInstanceOf/짝수 을 경우는 파라 다형성이 불가능하므로 asInstanceOf (상부 경계) 형태 파라미터 지원하지 type 매개 변수에 매니페스트가 있습니다.

+0

권장 할만한 해결 방법이 있습니까? – vaughan

+0

내가 링크 된 문제를 읽었습니까? 해결 방법은 JIRA –

+0

에 나열되어 있습니다.'manifest.erasure.isInstance (element)'를 시도했습니다. 모든 것을 시도했다. 나는 그것의 클래스 로더 이슈를 지금 생각하고있다. 질문을 업데이트했습니다. – vaughan

0

오 성공. 영광스러운 성공!

이 입력 업무는 전환이었습니다.

그래서 문제는 IntelliJ가 각 플러그인에 대해 별도의 클래스 로더를 사용하는 것으로 판명되었습니다.

기본적으로 나는 다른 클래스 로더로부터 객체를 받았다. 이것은 모든 비교가 실패 할 것이라는 것을 의미했다.

이 코드는 Java 코드에서 손상되었으므로 Scala의 잘못은 아닙니다. 대답 모두, 죄송에

덕분에 시간을 낭비하는 것이 아니라 내가 TypeTags, 매니페스트 등 :)에 대해 많은 것을 배울 않았다